@global-packages/mcp-kit 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/commands/add.d.ts.map +1 -1
  2. package/dist/commands/add.js +117 -71
  3. package/dist/commands/add.js.map +1 -1
  4. package/dist/commands/backup.d.ts.map +1 -1
  5. package/dist/commands/backup.js +27 -27
  6. package/dist/commands/backup.js.map +1 -1
  7. package/dist/commands/completion.d.ts.map +1 -1
  8. package/dist/commands/completion.js +50 -35
  9. package/dist/commands/completion.js.map +1 -1
  10. package/dist/commands/doctor.d.ts +5 -1
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +128 -104
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/env-check.d.ts.map +1 -1
  15. package/dist/commands/env-check.js +63 -40
  16. package/dist/commands/env-check.js.map +1 -1
  17. package/dist/commands/export.d.ts +6 -4
  18. package/dist/commands/export.d.ts.map +1 -1
  19. package/dist/commands/export.js +52 -41
  20. package/dist/commands/export.js.map +1 -1
  21. package/dist/commands/import.d.ts.map +1 -1
  22. package/dist/commands/import.js +109 -74
  23. package/dist/commands/import.js.map +1 -1
  24. package/dist/commands/info.d.ts.map +1 -1
  25. package/dist/commands/info.js +60 -56
  26. package/dist/commands/info.js.map +1 -1
  27. package/dist/commands/init.d.ts +5 -2
  28. package/dist/commands/init.d.ts.map +1 -1
  29. package/dist/commands/init.js +189 -87
  30. package/dist/commands/init.js.map +1 -1
  31. package/dist/commands/install.d.ts.map +1 -1
  32. package/dist/commands/install.js +56 -48
  33. package/dist/commands/install.js.map +1 -1
  34. package/dist/commands/list.d.ts +5 -2
  35. package/dist/commands/list.d.ts.map +1 -1
  36. package/dist/commands/list.js +103 -45
  37. package/dist/commands/list.js.map +1 -1
  38. package/dist/commands/open.d.ts.map +1 -1
  39. package/dist/commands/open.js +31 -23
  40. package/dist/commands/open.js.map +1 -1
  41. package/dist/commands/remove.d.ts.map +1 -1
  42. package/dist/commands/remove.js +60 -43
  43. package/dist/commands/remove.js.map +1 -1
  44. package/dist/commands/reset.d.ts.map +1 -1
  45. package/dist/commands/reset.js +52 -48
  46. package/dist/commands/reset.js.map +1 -1
  47. package/dist/commands/search.d.ts.map +1 -1
  48. package/dist/commands/search.js +52 -20
  49. package/dist/commands/search.js.map +1 -1
  50. package/dist/commands/status.d.ts.map +1 -1
  51. package/dist/commands/status.js +94 -76
  52. package/dist/commands/status.js.map +1 -1
  53. package/dist/commands/toggle.d.ts.map +1 -1
  54. package/dist/commands/toggle.js +22 -24
  55. package/dist/commands/toggle.js.map +1 -1
  56. package/dist/commands/update.d.ts.map +1 -1
  57. package/dist/commands/update.js +86 -62
  58. package/dist/commands/update.js.map +1 -1
  59. package/dist/commands/validate.d.ts.map +1 -1
  60. package/dist/commands/validate.js +43 -37
  61. package/dist/commands/validate.js.map +1 -1
  62. package/dist/constants.d.ts +3 -1
  63. package/dist/constants.d.ts.map +1 -1
  64. package/dist/constants.js +377 -78
  65. package/dist/constants.js.map +1 -1
  66. package/dist/core/credentials.d.ts +15 -2
  67. package/dist/core/credentials.d.ts.map +1 -1
  68. package/dist/core/credentials.js +205 -116
  69. package/dist/core/credentials.js.map +1 -1
  70. package/dist/core/detector.d.ts +28 -2
  71. package/dist/core/detector.d.ts.map +1 -1
  72. package/dist/core/detector.js +101 -60
  73. package/dist/core/detector.js.map +1 -1
  74. package/dist/core/registry.d.ts +25 -1
  75. package/dist/core/registry.d.ts.map +1 -1
  76. package/dist/core/registry.js +45 -33
  77. package/dist/core/registry.js.map +1 -1
  78. package/dist/core/validator.d.ts +18 -2
  79. package/dist/core/validator.d.ts.map +1 -1
  80. package/dist/core/validator.js +53 -30
  81. package/dist/core/validator.js.map +1 -1
  82. package/dist/core/writer.d.ts +19 -1
  83. package/dist/core/writer.d.ts.map +1 -1
  84. package/dist/core/writer.js +41 -35
  85. package/dist/core/writer.js.map +1 -1
  86. package/dist/index.d.ts +0 -1
  87. package/dist/index.js +233 -123
  88. package/dist/index.js.map +1 -1
  89. package/dist/postinstall.js +25 -30
  90. package/dist/postinstall.js.map +1 -1
  91. package/dist/prompts/dev-prompts.d.ts +10 -2
  92. package/dist/prompts/dev-prompts.d.ts.map +1 -1
  93. package/dist/prompts/dev-prompts.js +87 -31
  94. package/dist/prompts/dev-prompts.js.map +1 -1
  95. package/dist/prompts/non-dev-prompts.d.ts +16 -2
  96. package/dist/prompts/non-dev-prompts.d.ts.map +1 -1
  97. package/dist/prompts/non-dev-prompts.js +90 -35
  98. package/dist/prompts/non-dev-prompts.js.map +1 -1
  99. package/dist/prompts/shared-prompts.d.ts +10 -1
  100. package/dist/prompts/shared-prompts.d.ts.map +1 -1
  101. package/dist/prompts/shared-prompts.js +66 -43
  102. package/dist/prompts/shared-prompts.js.map +1 -1
  103. package/dist/types.d.ts +22 -6
  104. package/dist/types.d.ts.map +1 -1
  105. package/dist/types.js +4 -2
  106. package/dist/types.js.map +1 -1
  107. package/dist/utils/fs.d.ts +36 -4
  108. package/dist/utils/fs.d.ts.map +1 -1
  109. package/dist/utils/fs.js +92 -28
  110. package/dist/utils/fs.js.map +1 -1
  111. package/dist/utils/logger.d.ts.map +1 -1
  112. package/dist/utils/logger.js +18 -24
  113. package/dist/utils/logger.js.map +1 -1
  114. package/dist/utils/network.d.ts +12 -1
  115. package/dist/utils/network.d.ts.map +1 -1
  116. package/dist/utils/network.js +37 -9
  117. package/dist/utils/network.js.map +1 -1
  118. package/dist/utils/spinner.js +10 -19
  119. package/dist/utils/spinner.js.map +1 -1
  120. package/package.json +62 -27
  121. package/src/postinstall.ts +121 -0
@@ -1,32 +1,64 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runSearch = runSearch;
4
- const constants_1 = require("../constants");
5
- const logger_1 = require("../utils/logger");
6
- async function runSearch(query, options = {}) {
1
+ import chalk from 'chalk';
2
+ import { detectVsCodePath } from '../core/detector.js';
3
+ import { readMcpJson } from '../core/writer.js';
4
+ import { log, printTable } from '../utils/logger.js';
5
+ import { MCP_REGISTRY } from '../constants.js';
6
+ export async function runSearch(query, options = {}) {
7
7
  try {
8
- const term = query.trim().toLowerCase();
9
- if (!term) {
10
- logger_1.log.error("Please provide a search query.");
8
+ if (!query || query.trim().length === 0) {
9
+ log.error('Please provide a search query: mcp-kit search <query>');
11
10
  process.exit(1);
12
11
  }
13
- const results = constants_1.MCP_REGISTRY.filter((mcp) => [mcp.id, mcp.name, mcp.description, mcp.category, mcp.npmPackage].join(" ").toLowerCase().includes(term));
12
+ const q = query.toLowerCase();
13
+ const matches = MCP_REGISTRY.filter(m => m.id.toLowerCase().includes(q) ||
14
+ m.name.toLowerCase().includes(q) ||
15
+ m.description.toLowerCase().includes(q) ||
16
+ m.category.toLowerCase().includes(q) ||
17
+ m.npmPackage.toLowerCase().includes(q) ||
18
+ m.envVars.some(ev => ev.key.toLowerCase().includes(q) ||
19
+ ev.label.toLowerCase().includes(q)));
20
+ // Check which are currently configured
21
+ let configuredIds = [];
22
+ try {
23
+ const vscodePaths = await detectVsCodePath();
24
+ const config = await readMcpJson(vscodePaths.mcpJsonPath);
25
+ configuredIds = Object.keys(config.servers);
26
+ }
27
+ catch { /* no config yet */ }
14
28
  if (options.json) {
15
- console.log(JSON.stringify(results, null, 2));
29
+ console.log(JSON.stringify(matches.map(m => ({
30
+ id: m.id,
31
+ name: m.name,
32
+ description: m.description,
33
+ category: m.category,
34
+ npmPackage: m.npmPackage,
35
+ devOnly: m.devOnly,
36
+ configured: configuredIds.includes(m.id),
37
+ })), null, 2));
16
38
  return;
17
39
  }
18
- if (results.length === 0) {
19
- logger_1.log.warn(`No MCPs matched "${query}"`);
20
- process.exit(0);
40
+ if (matches.length === 0) {
41
+ log.warn(`No MCPs found matching "${query}".`);
42
+ log.info('Run "mcp-kit list --available" to see all MCPs.');
43
+ return;
21
44
  }
22
- (0, logger_1.printTable)(["ID", "Name", "Category", "Package", "Description"], results.map((mcp) => [mcp.id, mcp.name, mcp.category, mcp.npmPackage, mcp.description]));
23
- process.exit(0);
45
+ log.header(`Search results for "${query}" (${matches.length} match${matches.length === 1 ? '' : 'es'})`);
46
+ const rows = matches.map(m => [
47
+ chalk.cyan(m.id),
48
+ m.name,
49
+ m.category,
50
+ configuredIds.includes(m.id) ? chalk.green('✓') : chalk.gray('-'),
51
+ m.description,
52
+ ]);
53
+ printTable(['ID', 'Name', 'Category', 'Configured', 'Description'], rows);
54
+ log.blank();
55
+ log.info('Add one: "mcp-kit add <id>" | Details: "mcp-kit info <id>"');
24
56
  }
25
57
  catch (err) {
26
- logger_1.log.error(`search failed: ${err instanceof Error ? err.message : "Unknown error"}`);
27
- if (process.env.DEBUG && err instanceof Error) {
28
- console.error(err.stack);
29
- }
58
+ const message = err instanceof Error ? err.message : String(err);
59
+ log.error(`search failed: ${message}`);
60
+ if (process.env['DEBUG'])
61
+ console.error(err);
30
62
  process.exit(1);
31
63
  }
32
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":";;AAOA,8BAmCC;AA1CD,4CAA4C;AAC5C,4CAAkD;AAM3C,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,UAAyB,EAAE;IACxE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,YAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,wBAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1C,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACzG,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,YAAG,CAAC,IAAI,CAAC,oBAAoB,KAAK,GAAG,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAA,mBAAU,EACR,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,EACpD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CACxF,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAG,CAAC,KAAK,CAAC,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACpF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAOD,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF1E"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAaA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwH1E"}
@@ -1,91 +1,109 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.runStatus = runStatus;
7
- const fs_extra_1 = __importDefault(require("fs-extra"));
8
- const constants_1 = require("../constants");
9
- const detector_1 = require("../core/detector");
10
- const registry_1 = require("../core/registry");
11
- const writer_1 = require("../core/writer");
12
- const logger_1 = require("../utils/logger");
13
- function extractCurrentVersion(args) {
14
- const match = /@([\w.-]+)$/.exec(args.join(" "));
15
- return match?.[1] || "latest";
16
- }
17
- async function runStatus(options = {}) {
1
+ import { detectVsCodePath } from '../core/detector.js';
2
+ import { readMcpJson } from '../core/writer.js';
3
+ import { getMcpById, getLatestVersion } from '../core/registry.js';
4
+ import { log, printTable } from '../utils/logger.js';
5
+ import { safeReadJSON } from '../utils/fs.js';
6
+ import { MCP_KIT_META_PATH } from '../constants.js';
7
+ import chalk from 'chalk';
8
+ export async function runStatus(options = {}) {
18
9
  try {
19
- const detected = await (0, detector_1.detectVsCodePath)();
20
- const config = await (0, writer_1.readMcpJson)(detected.mcpJsonPath);
21
- const meta = (await fs_extra_1.default.pathExists(constants_1.MCP_KIT_META_PATH))
22
- ? await fs_extra_1.default.readJSON(constants_1.MCP_KIT_META_PATH)
23
- : { credentialStorage: "keychain", lastUpdated: "never" };
24
- const entries = Object.entries(config.servers);
25
- const latestVersions = await Promise.all(entries.map(async ([id]) => {
26
- const mcp = (0, registry_1.getMcpById)(id);
27
- if (!mcp) {
28
- return "unknown";
10
+ const vscodePaths = await detectVsCodePath();
11
+ const config = await readMcpJson(vscodePaths.mcpJsonPath);
12
+ const meta = await safeReadJSON(MCP_KIT_META_PATH);
13
+ const serverIds = Object.keys(config.servers);
14
+ if (serverIds.length === 0) {
15
+ if (options.json) {
16
+ console.log(JSON.stringify({
17
+ configured: [],
18
+ source: vscodePaths.source,
19
+ mcpJsonPath: vscodePaths.mcpJsonPath,
20
+ }));
21
+ return;
29
22
  }
30
- return (0, registry_1.getLatestVersion)(mcp.npmPackage);
23
+ log.warn('No MCP servers currently configured.');
24
+ log.info('Run "mcp-kit init --dev" or "mcp-kit init --non-dev" to get started.');
25
+ return;
26
+ }
27
+ // Fetch latest versions in parallel
28
+ const latestVersions = await Promise.all(serverIds.map(id => {
29
+ const def = getMcpById(id);
30
+ return def ? getLatestVersion(def.npmPackage) : Promise.resolve('n/a');
31
31
  }));
32
- const rows = entries.map(([id, server], index) => {
33
- const mcp = (0, registry_1.getMcpById)(id);
34
- const current = extractCurrentVersion(server.args);
35
- const latest = latestVersions[index];
36
- const upToDate = current === "latest" || current === latest;
37
- return [
38
- mcp?.name || id,
39
- mcp?.category || "unknown",
40
- mcp?.npmPackage || "unknown",
41
- current,
42
- latest,
43
- upToDate ? "Yes" : "No",
44
- meta.credentialStorage || "keychain",
45
- ];
46
- });
47
32
  if (options.json) {
48
- const output = entries.map(([id, server], index) => {
49
- const mcp = (0, registry_1.getMcpById)(id);
33
+ const output = serverIds.map((id, i) => {
34
+ const def = getMcpById(id);
35
+ const entry = config.servers[id];
36
+ const latest = latestVersions[i] ?? 'n/a';
37
+ const versionInArgs = entry?.args
38
+ ?.map(a => {
39
+ const match = a.match(/@([^\s@]+)$/);
40
+ return match ? match[1] : null;
41
+ })
42
+ .find(Boolean) ?? 'latest';
43
+ const upToDate = versionInArgs === 'latest' || versionInArgs === latest || latest === 'n/a';
50
44
  return {
51
45
  id,
52
- name: mcp?.name ?? id,
53
- category: mcp?.category ?? "unknown",
54
- package: mcp?.npmPackage ?? "unknown",
55
- command: server.command,
56
- args: server.args,
57
- version: extractCurrentVersion(server.args),
58
- latest: latestVersions[index],
59
- disabled: Boolean(server.disabled),
60
- credentialStorage: meta.credentialStorage || "keychain",
46
+ name: def?.name ?? id,
47
+ category: def?.category ?? 'unknown',
48
+ package: def?.npmPackage ?? '',
49
+ version: versionInArgs,
50
+ latest,
51
+ upToDate,
52
+ credentialStorage: meta?.credentialStorage ?? 'unknown',
53
+ disabled: entry?.disabled ?? false,
61
54
  };
62
55
  });
63
- console.log(JSON.stringify(output, null, 2));
56
+ console.log(JSON.stringify({
57
+ source: vscodePaths.source,
58
+ mcpJsonPath: vscodePaths.mcpJsonPath,
59
+ configured: output,
60
+ }, null, 2));
64
61
  return;
65
62
  }
66
- (0, logger_1.printTable)([
67
- "ID",
68
- "Name",
69
- "MCP Name",
70
- "Category",
71
- "Package",
72
- "Version",
73
- "Latest",
74
- "Up-to-date",
75
- "Credential Storage",
76
- ], rows);
77
- logger_1.log.info(`Config path: ${detected.mcpJsonPath}`);
78
- logger_1.log.info(`Last updated: ${meta.lastUpdated || "unknown"}`);
79
- logger_1.log.info("Run `mcp-kit doctor` to diagnose any issues");
80
- process.exit(0);
63
+ const sourceLabel = vscodePaths.source === 'project' ? 'project .vscode' :
64
+ vscodePaths.source === 'global' ? 'VS Code global config' :
65
+ 'created .vscode';
66
+ log.header('MCP Status');
67
+ const rows = serverIds.map((id, i) => {
68
+ const def = getMcpById(id);
69
+ const entry = config.servers[id];
70
+ const latest = latestVersions[i] ?? 'n/a';
71
+ // Try to extract version from args (e.g. "@azure/mcp@1.2.0")
72
+ const versionInArgs = entry?.args
73
+ ?.map(a => {
74
+ const match = a.match(/@([^\s@]+)$/);
75
+ return match ? match[1] : null;
76
+ })
77
+ .find(Boolean) ?? 'latest';
78
+ const upToDate = versionInArgs === 'latest' || versionInArgs === latest || latest === 'n/a';
79
+ const disabled = entry?.disabled === true;
80
+ return [
81
+ disabled ? chalk.gray(id) : id,
82
+ def?.name ?? id,
83
+ def?.category ?? 'unknown',
84
+ def?.npmPackage ?? entry?.command ?? '',
85
+ versionInArgs,
86
+ latest,
87
+ disabled
88
+ ? chalk.gray('⏸ disabled')
89
+ : upToDate
90
+ ? chalk.green('✓')
91
+ : chalk.yellow('↑ update available'),
92
+ meta?.credentialStorage ?? 'unknown',
93
+ ];
94
+ });
95
+ printTable(['ID', 'Name', 'Category', 'Package', 'Version', 'Latest', 'Status', 'Cred Storage'], rows);
96
+ log.blank();
97
+ log.muted(`Config path: ${vscodePaths.mcpJsonPath} (${sourceLabel})`);
98
+ log.muted(`Last updated: ${meta?.lastUpdated ?? 'unknown'}`);
99
+ log.blank();
100
+ log.info('Run "mcp-kit doctor" to diagnose any issues.');
81
101
  }
82
102
  catch (err) {
83
- const message = err instanceof Error ? err.message : "Unknown error";
84
- logger_1.log.error(`Status failed: ${message}`);
85
- logger_1.log.muted("Suggestion: ensure mcp.json is valid and readable.");
86
- if (process.env.DEBUG && err instanceof Error) {
87
- console.error(err.stack);
88
- }
103
+ const message = err instanceof Error ? err.message : String(err);
104
+ log.error(`Status check failed: ${message}`);
105
+ if (process.env['DEBUG'])
106
+ console.error(err);
89
107
  process.exit(1);
90
108
  }
91
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/commands/toggle.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D"}
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/commands/toggle.ts"],"names":[],"mappings":"AASA,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D"}
@@ -1,33 +1,32 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runEnable = runEnable;
4
- exports.runDisable = runDisable;
5
- const detector_1 = require("../core/detector");
6
- const registry_1 = require("../core/registry");
7
- const writer_1 = require("../core/writer");
8
- const logger_1 = require("../utils/logger");
9
- async function runEnable(mcpId) {
1
+ import { detectVsCodePath } from '../core/detector.js';
2
+ import { readMcpJson, writeMcpJson } from '../core/writer.js';
3
+ import { getMcpById } from '../core/registry.js';
4
+ import { log } from '../utils/logger.js';
5
+ //
6
+ // mcp-kit enable <id> / mcp-kit disable <id>
7
+ //
8
+ export async function runEnable(mcpId) {
10
9
  await setDisabled(mcpId, false);
11
10
  }
12
- async function runDisable(mcpId) {
11
+ export async function runDisable(mcpId) {
13
12
  await setDisabled(mcpId, true);
14
13
  }
15
14
  async function setDisabled(mcpId, disabled) {
16
- const action = disabled ? "disable" : "enable";
15
+ const action = disabled ? 'disable' : 'enable';
17
16
  try {
18
- const vscodePaths = await (0, detector_1.detectVsCodePath)();
19
- const config = await (0, writer_1.readMcpJson)(vscodePaths.mcpJsonPath);
17
+ const vscodePaths = await detectVsCodePath();
18
+ const config = await readMcpJson(vscodePaths.mcpJsonPath);
20
19
  if (!config.servers[mcpId]) {
21
- logger_1.log.error(`'${mcpId}' is not configured. Run 'mcp-kit list' to see configured MCPs.`);
20
+ log.error(`"${mcpId}" is not configured. Run "mcp-kit list" to see configured MCPs.`);
22
21
  process.exit(1);
23
22
  }
24
23
  const entry = config.servers[mcpId];
25
24
  if (disabled && entry.disabled === true) {
26
- logger_1.log.warn(`${mcpId} is already disabled.`);
25
+ log.warn(`${mcpId} is already disabled.`);
27
26
  return;
28
27
  }
29
28
  if (!disabled && !entry.disabled) {
30
- logger_1.log.warn(`${mcpId} is already enabled.`);
29
+ log.warn(`${mcpId} is already enabled.`);
31
30
  return;
32
31
  }
33
32
  if (disabled) {
@@ -37,22 +36,21 @@ async function setDisabled(mcpId, disabled) {
37
36
  delete entry.disabled;
38
37
  }
39
38
  config.servers[mcpId] = entry;
40
- await (0, writer_1.writeMcpJson)(vscodePaths.mcpJsonPath, config);
41
- const def = (0, registry_1.getMcpById)(mcpId);
42
- const name = def?.name ?? mcpId;
39
+ await writeMcpJson(vscodePaths.mcpJsonPath, config);
40
+ const def = getMcpById(mcpId);
41
+ const label = def?.name ?? mcpId;
43
42
  if (disabled) {
44
- logger_1.log.success(`${name} disabled. VS Code will ignore it until re-enabled.`);
43
+ log.success(`${label} disabled - VS Code will ignore it until re-enabled.`);
45
44
  }
46
45
  else {
47
- logger_1.log.success(`${name} enabled. Reload VS Code to apply (Cmd/Ctrl+Shift+P -> Reload Window).`);
46
+ log.success(`${label} enabled - reload VS Code to activate (Cmd/Ctrl+Shift+P Reload Window).`);
48
47
  }
49
48
  }
50
49
  catch (err) {
51
50
  const message = err instanceof Error ? err.message : String(err);
52
- logger_1.log.error(`Failed to ${action} ${mcpId}: ${message}`);
53
- if (process.env.DEBUG) {
51
+ log.error(`Failed to ${action} ${mcpId}: ${message}`);
52
+ if (process.env['DEBUG'])
54
53
  console.error(err);
55
- }
56
54
  process.exit(1);
57
55
  }
58
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"toggle.js","sourceRoot":"","sources":["../../src/commands/toggle.ts"],"names":[],"mappings":";;AAKA,8BAEC;AAED,gCAEC;AAXD,+CAAoD;AACpD,+CAA8C;AAC9C,2CAA2D;AAC3D,4CAAsC;AAE/B,KAAK,UAAU,SAAS,CAAC,KAAa;IAC3C,MAAM,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,KAAa;IAC5C,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAa,EAAE,QAAiB;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAgB,GAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAW,EAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,YAAG,CAAC,KAAK,CAAC,IAAI,KAAK,iEAAiE,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACxC,YAAG,CAAC,IAAI,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjC,YAAG,CAAC,IAAI,CAAC,GAAG,KAAK,sBAAsB,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC9B,MAAM,IAAA,qBAAY,EAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEpD,MAAM,GAAG,GAAG,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC;QAChC,IAAI,QAAQ,EAAE,CAAC;YACb,YAAG,CAAC,OAAO,CAAC,GAAG,IAAI,qDAAqD,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,YAAG,CAAC,OAAO,CAAC,GAAG,IAAI,wEAAwE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,YAAG,CAAC,KAAK,CAAC,aAAa,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"toggle.js","sourceRoot":"","sources":["../../src/commands/toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,EAAE;AACF,6CAA6C;AAC7C,EAAE;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa;IAC3C,MAAM,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa;IAC5C,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAa,EAAE,QAAiB;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,iEAAiE,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC;QAErC,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,sBAAsB,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC9B,MAAM,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEpD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC;QAEjC,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,sDAAsD,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,2EAA2E,CAAC,CAAC;QACnG,CAAC;IAEH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,aAAa,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAaA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAwE/C"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAgCA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAkG/C"}
@@ -1,79 +1,103 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runUpdate = runUpdate;
4
- const detector_1 = require("../core/detector");
5
- const registry_1 = require("../core/registry");
6
- const writer_1 = require("../core/writer");
7
- const shared_prompts_1 = require("../prompts/shared-prompts");
8
- const logger_1 = require("../utils/logger");
9
- const spinner_1 = require("../utils/spinner");
10
- function parseVersionFromArgs(args, npmPackage) {
11
- const joined = args.join(" ");
12
- const match = joined.match(new RegExp(`${npmPackage.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}@([^\s]+)`));
13
- return match?.[1] || "latest";
1
+ import { detectVsCodePath } from '../core/detector.js';
2
+ import { readMcpJson, writeMcpJson } from '../core/writer.js';
3
+ import { getMcpById, getLatestVersion } from '../core/registry.js';
4
+ import { askConfirm } from '../prompts/shared-prompts.js';
5
+ import { log, printTable } from '../utils/logger.js';
6
+ import { startSpinner, succeedSpinner, failSpinner } from '../utils/spinner.js';
7
+ import { safeWriteJSON, ensureDir, safeReadJSON } from '../utils/fs.js';
8
+ import { MCP_KIT_META_PATH, MCP_KIT_DIR } from '../constants.js';
9
+ import { createRequire } from 'node:module';
10
+ const _require = createRequire(import.meta.url);
11
+ const pkg = _require('../../package.json');
12
+ //
13
+ // mcp-kit update
14
+ //
15
+ /** Extract a pinned version from an arg like "@azure/mcp@1.2.0" */
16
+ function extractVersionFromArg(arg) {
17
+ const match = arg.match(/@(\d+\.\d+\.\d+(?:-[\w.]+)?)$/);
18
+ return match ? match[1] : null;
14
19
  }
15
- async function runUpdate() {
20
+ export async function runUpdate() {
16
21
  try {
17
- const detected = await (0, detector_1.detectVsCodePath)();
18
- const config = await (0, writer_1.readMcpJson)(detected.mcpJsonPath);
19
- const outdated = [];
20
- const rows = [];
21
- for (const [id, server] of Object.entries(config.servers)) {
22
- const mcp = (0, registry_1.getMcpById)(id);
23
- if (!mcp) {
24
- rows.push([id, "unknown", "unknown", "⚠ Not in registry"]);
25
- continue;
26
- }
27
- const current = parseVersionFromArgs(server.args, mcp.npmPackage);
28
- const latest = await (0, registry_1.getLatestVersion)(mcp.npmPackage);
29
- const needsUpdate = current !== "latest" && latest !== "unknown" && current !== latest;
30
- rows.push([mcp.name, current, latest, needsUpdate ? "⬆ Update available" : "✅ Up to date"]);
31
- if (needsUpdate) {
32
- outdated.push(id);
33
- }
22
+ const vscodePaths = await detectVsCodePath();
23
+ const config = await readMcpJson(vscodePaths.mcpJsonPath);
24
+ const serverIds = Object.keys(config.servers);
25
+ if (serverIds.length === 0) {
26
+ log.warn('No MCP servers are configured. Nothing to update.');
27
+ return;
34
28
  }
35
- (0, logger_1.printTable)(["MCP", "Current", "Latest", "Action"], rows);
29
+ log.header('mcp-kit - Check for Updates');
30
+ // Check latest versions in parallel
31
+ const results = await Promise.all(serverIds.map(async (id) => {
32
+ const def = getMcpById(id);
33
+ if (!def)
34
+ return { id, current: 'unknown', latest: 'n/a', needsUpdate: false };
35
+ const latest = await getLatestVersion(def.npmPackage);
36
+ const entry = config.servers[id];
37
+ const pinned = entry?.args?.map(extractVersionFromArg).find(Boolean);
38
+ const current = pinned ?? 'latest';
39
+ const needsUpdate = current !== 'latest' &&
40
+ latest !== 'unknown' &&
41
+ latest !== 'n/a' &&
42
+ current !== latest;
43
+ return { id, def, current, latest, needsUpdate };
44
+ }));
45
+ const rows = results.map(r => [
46
+ r.id,
47
+ r.def?.name ?? r.id,
48
+ r.current,
49
+ r.latest,
50
+ r.needsUpdate ? '↑ Update available' : '✓ Up to date',
51
+ ]);
52
+ printTable(['ID', 'Name', 'Current', 'Latest', 'Action'], rows);
53
+ const outdated = results.filter(r => r.needsUpdate);
36
54
  if (outdated.length === 0) {
37
- logger_1.log.success("All configured MCPs are up to date.");
38
- process.exit(0);
55
+ log.success('All configured MCPs are up to date!');
56
+ return;
39
57
  }
40
- const confirm = await (0, shared_prompts_1.askConfirm)("Update all outdated MCPs?");
41
- if (!confirm) {
42
- logger_1.log.info("No updates were applied.");
43
- process.exit(0);
58
+ const doUpdate = await askConfirm(`Update ${outdated.length} outdated MCP(s) to @latest?`);
59
+ if (!doUpdate) {
60
+ log.info('No changes made.');
61
+ return;
44
62
  }
45
- let updated = 0;
46
- for (const id of outdated) {
47
- const mcp = (0, registry_1.getMcpById)(id);
48
- if (!mcp) {
63
+ for (const item of outdated) {
64
+ if (!item.def)
49
65
  continue;
50
- }
51
- const spinner = (0, spinner_1.startSpinner)(`Updating ${mcp.name}`);
66
+ const spinner = startSpinner(`Updating ${item.def.name}...`);
52
67
  try {
53
- config.servers[id].args = mcp.args.map((arg) => {
54
- if (arg.includes(mcp.npmPackage)) {
55
- return `${mcp.npmPackage}@latest`;
56
- }
57
- return arg;
58
- });
59
- (0, spinner_1.succeedSpinner)(spinner, `Updated ${mcp.name}`);
60
- updated += 1;
68
+ const entry = config.servers[item.id];
69
+ if (entry) {
70
+ // Replace pinned version tags in args with @latest
71
+ entry.args = entry.args.map(arg => arg.replace(/@\d+\.\d+\.\d+(?:-[\w.]+)?$/, '@latest'));
72
+ config.servers[item.id] = entry;
73
+ }
74
+ succeedSpinner(spinner, `Updated ${item.def.name} to @latest`);
61
75
  }
62
76
  catch (err) {
63
- (0, spinner_1.failSpinner)(spinner, `Failed ${mcp.name}: ${err instanceof Error ? err.message : "Unknown error"}`);
77
+ const message = err instanceof Error ? err.message : String(err);
78
+ failSpinner(spinner, `Failed to update ${item.def.name}: ${message}`);
64
79
  }
65
80
  }
66
- await (0, writer_1.writeMcpJson)(detected.mcpJsonPath, config);
67
- logger_1.log.success(`Updated ${updated} MCPs. Reload VS Code to apply.`);
68
- process.exit(0);
81
+ await writeMcpJson(vscodePaths.mcpJsonPath, config);
82
+ // Update meta
83
+ await ensureDir(MCP_KIT_DIR);
84
+ const meta = await safeReadJSON(MCP_KIT_META_PATH);
85
+ if (meta) {
86
+ await safeWriteJSON(MCP_KIT_META_PATH, {
87
+ ...meta,
88
+ lastUpdated: new Date().toISOString(),
89
+ mcpKitVersion: pkg.version,
90
+ });
91
+ }
92
+ log.blank();
93
+ log.success(`Updated ${outdated.length} MCP(s). Reload VS Code to apply.`);
94
+ log.info('Cmd/Ctrl+Shift+P → "Reload Window"');
69
95
  }
70
96
  catch (err) {
71
- const message = err instanceof Error ? err.message : "Unknown error";
72
- logger_1.log.error(`Update failed: ${message}`);
73
- logger_1.log.muted("Suggestion: run `mcp-kit status` to inspect versions manually.");
74
- if (process.env.DEBUG && err instanceof Error) {
75
- console.error(err.stack);
76
- }
97
+ const message = err instanceof Error ? err.message : String(err);
98
+ log.error(`Update failed: ${message}`);
99
+ if (process.env['DEBUG'])
100
+ console.error(err);
77
101
  process.exit(1);
78
102
  }
79
103
  }