@global-packages/mcp-kit 1.0.0 → 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 +58 -16
  121. package/src/postinstall.ts +121 -0
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAUA,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFzD"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAwDA,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGzD"}
@@ -1,88 +1,134 @@
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.runAdd = runAdd;
7
- const fs_extra_1 = __importDefault(require("fs-extra"));
8
- const inquirer_1 = __importDefault(require("inquirer"));
9
- const constants_1 = require("../constants");
10
- const detector_1 = require("../core/detector");
11
- const credentials_1 = require("../core/credentials");
12
- const registry_1 = require("../core/registry");
13
- const writer_1 = require("../core/writer");
14
- const shared_prompts_1 = require("../prompts/shared-prompts");
15
- const logger_1 = require("../utils/logger");
16
- async function runAdd(mcpId) {
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import { detectVsCodePath } from '../core/detector.js';
4
+ import { readMcpJson, addServerToMcpJson } from '../core/writer.js';
5
+ import { getMcpById } from '../core/registry.js';
6
+ import { storeCredential, buildEnvRefValue, getEnvFilePath } from '../core/credentials.js';
7
+ import { askCredentialStorage } from '../prompts/shared-prompts.js';
8
+ import { log } from '../utils/logger.js';
9
+ import { safeReadJSON, safeWriteJSON, ensureDir } from '../utils/fs.js';
10
+ import { MCP_REGISTRY, MCP_KIT_META_PATH, MCP_KIT_DIR } from '../constants.js';
11
+ import { createRequire } from 'node:module';
12
+ const _require = createRequire(import.meta.url);
13
+ const pkg = _require('../../package.json');
14
+ //
15
+ // mcp-kit add <mcp-id>
16
+ //
17
+ function buildArgs(mcp, answers) {
18
+ return mcp.args.map(arg => arg.replace(/\$\{([^}]+)\}/g, (_, key) => answers[key] ?? ''));
19
+ }
20
+ function buildCommand(mcp, answers) {
21
+ return mcp.command.replace(/\$\{([^}]+)\}/g, (_, key) => answers[key] ?? mcp.command);
22
+ }
23
+ function getArgEmbeddedKeys(mcp) {
24
+ const keys = new Set();
25
+ const allText = [...mcp.args, mcp.command].join('');
26
+ const matches = allText.matchAll(/\$\{([^}]+)\}/g);
27
+ for (const match of matches) {
28
+ keys.add(match[1]);
29
+ }
30
+ return keys;
31
+ }
32
+ function buildEnvRecord(mcp, answers, storage) {
33
+ const argEmbedded = getArgEmbeddedKeys(mcp);
34
+ const env = {};
35
+ for (const envVar of mcp.envVars) {
36
+ if (argEmbedded.has(envVar.key))
37
+ continue;
38
+ const value = answers[envVar.key] ?? '';
39
+ if (!value && !envVar.required)
40
+ continue;
41
+ env[envVar.key] = buildEnvRefValue(envVar.key, storage, value);
42
+ }
43
+ return env;
44
+ }
45
+ export async function runAdd(mcpId) {
17
46
  try {
18
- const mcp = (0, registry_1.getMcpById)(mcpId);
47
+ if (!mcpId) {
48
+ log.error('Please specify an MCP ID: mcp-kit add <mcp-id>');
49
+ log.info('Run "mcp-kit list" to see all available MCPs.');
50
+ process.exit(1);
51
+ }
52
+ const mcp = getMcpById(mcpId);
19
53
  if (!mcp) {
20
- logger_1.log.error(`Unknown MCP: ${mcpId}`);
21
- logger_1.log.info("Run `mcp-kit list --available` to see valid MCP IDs.");
54
+ log.error(`Unknown MCP: "${mcpId}"`);
55
+ log.blank();
56
+ log.info('Available MCP IDs:');
57
+ MCP_REGISTRY.forEach(m => log.muted(` ${m.id.padEnd(16)} ${m.name}`));
22
58
  process.exit(1);
23
59
  }
24
- const detected = await (0, detector_1.detectVsCodePath)();
25
- const config = await (0, writer_1.readMcpJson)(detected.mcpJsonPath);
60
+ const vscodePaths = await detectVsCodePath();
61
+ const config = await readMcpJson(vscodePaths.mcpJsonPath);
26
62
  if (config.servers[mcpId]) {
27
- logger_1.log.warn(`MCP ${mcpId} is already configured. Reconfiguring...`);
63
+ log.warn(`${mcp.name} is already configured. Continuing will overwrite it.`);
28
64
  }
29
- const storage = await (0, shared_prompts_1.askCredentialStorage)();
65
+ const storage = await askCredentialStorage();
66
+ const envFilePath = getEnvFilePath(vscodePaths.vscodeFolderPath);
67
+ // Collect answers for this MCP
30
68
  const answers = {};
31
- for (const envVar of mcp.envVars) {
32
- const response = await inquirer_1.default.prompt([
33
- {
34
- type: envVar.secret ? "password" : "input",
35
- name: "value",
36
- message: `${envVar.label}${envVar.required ? " *" : " (optional)"}`,
37
- mask: envVar.secret ? "*" : undefined,
38
- validate: (input) => !envVar.required || input.length > 0 || "This field is required"
39
- }
40
- ]);
41
- answers[envVar.key] = response.value;
42
- if (envVar.secret && response.value) {
43
- await (0, credentials_1.storeCredential)(envVar.key, response.value, storage);
44
- }
69
+ if (mcp.envVars.length > 0) {
70
+ console.log('');
71
+ console.log(chalk.bold.cyan(`Setting up: ${mcp.name}`));
72
+ console.log(chalk.gray(`${mcp.description}`));
73
+ const questions = mcp.envVars.map(envVar => {
74
+ if (envVar.hint)
75
+ console.log(chalk.gray(`${envVar.hint}`));
76
+ return {
77
+ type: envVar.secret ? 'password' : 'input',
78
+ name: envVar.key,
79
+ message: `${envVar.label}${envVar.required ? ' *' : ' (optional)'}`,
80
+ default: envVar.defaultValue ?? '',
81
+ validate: (input) => {
82
+ if (!envVar.required)
83
+ return true;
84
+ if (input.trim().length === 0)
85
+ return 'This field is required';
86
+ return true;
87
+ },
88
+ };
89
+ });
90
+ const raw = await inquirer.prompt(questions);
91
+ Object.assign(answers, raw);
45
92
  }
46
- const args = mcp.id === "filesystem" && answers.FILESYSTEM_ALLOWED_PATH
47
- ? [...mcp.args, answers.FILESYSTEM_ALLOWED_PATH]
48
- : [...mcp.args];
49
- const env = {};
93
+ const argEmbedded = getArgEmbeddedKeys(mcp);
94
+ // Store secrets
50
95
  for (const envVar of mcp.envVars) {
51
- const value = answers[envVar.key];
52
- if (!value && !envVar.required) {
96
+ if (argEmbedded.has(envVar.key))
53
97
  continue;
98
+ const value = answers[envVar.key];
99
+ if (value && envVar.secret && storage !== 'inline') {
100
+ await storeCredential(envVar.key, value, storage, envFilePath);
54
101
  }
55
- env[envVar.key] = (0, credentials_1.buildEnvRefValue)(envVar.key, storage, value);
56
102
  }
57
- await (0, writer_1.addServerToMcpJson)(detected.mcpJsonPath, mcp.id, {
58
- command: mcp.command,
59
- args,
60
- env
61
- });
62
- const meta = (await fs_extra_1.default.pathExists(constants_1.MCP_KIT_META_PATH))
63
- ? await fs_extra_1.default.readJSON(constants_1.MCP_KIT_META_PATH)
64
- : {
65
- installedAt: new Date().toISOString(),
66
- mcpKitVersion: require("../../package.json").version,
67
- installedMcps: []
68
- };
69
- meta.lastUpdated = new Date().toISOString();
70
- meta.credentialStorage = storage;
71
- meta.vscodePath = detected.vscodeFolderPath;
72
- meta.installedMcps = Array.from(new Set([...(meta.installedMcps || []), mcp.id]));
73
- await fs_extra_1.default.mkdirp(require("node:path").dirname(constants_1.MCP_KIT_META_PATH));
74
- await fs_extra_1.default.writeJSON(constants_1.MCP_KIT_META_PATH, meta, { spaces: 2 });
75
- logger_1.log.success(`Added ${mcp.name} to ${detected.mcpJsonPath}`);
76
- logger_1.log.info("Reload VS Code to activate");
77
- process.exit(0);
103
+ const entry = {
104
+ type: 'stdio',
105
+ command: buildCommand(mcp, answers),
106
+ args: buildArgs(mcp, answers),
107
+ env: buildEnvRecord(mcp, answers, storage),
108
+ };
109
+ if (entry.env && Object.keys(entry.env).length === 0) {
110
+ delete entry.env;
111
+ }
112
+ await addServerToMcpJson(vscodePaths.mcpJsonPath, mcp.id, entry);
113
+ // Update meta
114
+ await ensureDir(MCP_KIT_DIR);
115
+ const existingMeta = await safeReadJSON(MCP_KIT_META_PATH) ?? {};
116
+ const currentInstalled = existingMeta.installedMcps ?? [];
117
+ const meta = {
118
+ ...existingMeta,
119
+ lastUpdated: new Date().toISOString(),
120
+ installedMcps: [...new Set([...currentInstalled, mcpId])],
121
+ mcpKitVersion: pkg.version,
122
+ };
123
+ await safeWriteJSON(MCP_KIT_META_PATH, meta);
124
+ log.success(`Added ${mcp.name} to ${vscodePaths.mcpJsonPath}`);
125
+ log.info('Reload VS Code to activate: Cmd/Ctrl+Shift+P → "Reload Window"');
78
126
  }
79
127
  catch (err) {
80
- const message = err instanceof Error ? err.message : "Unknown error";
81
- logger_1.log.error(`Add failed: ${message}`);
82
- logger_1.log.muted("Suggestion: run `mcp-kit doctor` after fixing input values.");
83
- if (process.env.DEBUG && err instanceof Error) {
84
- console.error(err.stack);
85
- }
128
+ const message = err instanceof Error ? err.message : String(err);
129
+ log.error(`Add failed: ${message}`);
130
+ if (process.env['DEBUG'])
131
+ console.error(err);
86
132
  process.exit(1);
87
133
  }
88
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB1E"}
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAUA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC1E"}
@@ -1,34 +1,34 @@
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.runBackup = runBackup;
7
- const fs_extra_1 = __importDefault(require("fs-extra"));
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const detector_1 = require("../core/detector");
10
- const logger_1 = require("../utils/logger");
11
- async function runBackup(options = {}) {
1
+ import path from 'node:path';
2
+ import fs from 'node:fs/promises';
3
+ import { detectVsCodePath } from '../core/detector.js';
4
+ import { log } from '../utils/logger.js';
5
+ import { fileExists } from '../utils/fs.js';
6
+ export async function runBackup(options = {}) {
12
7
  try {
13
- const detected = await (0, detector_1.detectVsCodePath)();
14
- if (!(await fs_extra_1.default.pathExists(detected.mcpJsonPath))) {
15
- logger_1.log.warn("No mcp.json file found to backup.");
16
- process.exit(0);
8
+ const vscodePaths = await detectVsCodePath();
9
+ const mcpJsonPath = vscodePaths.mcpJsonPath;
10
+ if (!(await fileExists(mcpJsonPath))) {
11
+ log.error('No mcp.json found. Nothing to back up.');
12
+ log.info('Run "mcp-kit init dev" to create a config first.');
13
+ process.exit(1);
17
14
  }
18
- const stamp = new Date().toISOString().replace(/[:.]/g, "-");
19
- const backupPath = options.output
20
- ? node_path_1.default.resolve(options.output)
21
- : node_path_1.default.join(node_path_1.default.dirname(detected.mcpJsonPath), `mcp-backup-${stamp}.json`);
22
- await fs_extra_1.default.mkdirp(node_path_1.default.dirname(backupPath));
23
- await fs_extra_1.default.copyFile(detected.mcpJsonPath, backupPath);
24
- logger_1.log.success(`Backup created at ${backupPath}`);
25
- process.exit(0);
15
+ const timestamp = new Date()
16
+ .toISOString()
17
+ .replace(/[:.]/g, '-')
18
+ .replace('T', '_')
19
+ .slice(0, 19); // YYYY-MM-DD_HH-MM-SS
20
+ const destPath = options.output ??
21
+ path.join(path.dirname(mcpJsonPath), `mcp.backup.${timestamp}.json`);
22
+ const content = await fs.readFile(mcpJsonPath, 'utf-8');
23
+ await fs.writeFile(destPath, content, 'utf-8');
24
+ log.success(`Backup saved: ${destPath}`);
25
+ log.muted(`Source: ${mcpJsonPath}`);
26
26
  }
27
27
  catch (err) {
28
- logger_1.log.error(`backup failed: ${err instanceof Error ? err.message : "Unknown error"}`);
29
- if (process.env.DEBUG && err instanceof Error) {
30
- console.error(err.stack);
31
- }
28
+ const message = err instanceof Error ? err.message : String(err);
29
+ log.error(`Backup failed: ${message}`);
30
+ if (process.env['DEBUG'])
31
+ console.error(err);
32
32
  process.exit(1);
33
33
  }
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":";;;;;AASA,8BAwBC;AAjCD,wDAA0B;AAC1B,0DAA6B;AAC7B,+CAAoD;AACpD,4CAAsC;AAM/B,KAAK,UAAU,SAAS,CAAC,UAAyB,EAAE;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAA,2BAAgB,GAAE,CAAC;QAC1C,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACjD,YAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;YAC/B,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9B,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC;QAC9E,MAAM,kBAAE,CAAC,MAAM,CAAC,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAE1C,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACpD,YAAG,CAAC,OAAO,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QAC/C,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":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAU5C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAyB,EAAE;IACzD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;QAE5C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACpD,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;aACzB,WAAW,EAAE;aACb,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;aACjB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB;QAEvC,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM;YACd,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EACzB,cAAc,SAAS,OAAO,CAC/B,CAAC;QAEJ,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE/C,GAAG,CAAC,OAAO,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC,KAAK,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;IAEtC,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,kBAAkB,OAAO,EAAE,CAAC,CAAC;QACvC,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":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAyDA,wBAAsB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BjE"}
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAkFA,wBAAsB,aAAa,CAAC,KAAK,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBxE"}
@@ -1,12 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runCompletion = runCompletion;
4
- const logger_1 = require("../utils/logger");
1
+ import { log } from '../utils/logger.js';
2
+ //
3
+ // mcp-kit completion [shell]
4
+ //
5
5
  const ZSH_COMPLETION = `
6
6
  # mcp-kit zsh completion
7
7
  # Add to ~/.zshrc: eval "$(mcp-kit completion zsh)"
8
8
 
9
- mcp_kit_completions() {
9
+ _mcp_kit_completions() {
10
10
  local -a subcmds
11
11
  subcmds=(
12
12
  'init:Initialise MCP configuration'
@@ -33,52 +33,67 @@ mcp_kit_completions() {
33
33
  _describe 'command' subcmds
34
34
  }
35
35
 
36
- compdef mcp_kit_completions mcp-kit
36
+ _mcp_kit_mcpids() {
37
+ local -a ids
38
+ ids=(
39
+ 'azure' 'confluence' 'mssql' 'playwright' 'runbook'
40
+ 'filesystem' 'git' 'azuredevops' 'postgres' 'slack'
41
+ 'sonarqube' 'context' 'figma' 'everything'
42
+ )
43
+ _describe 'mcp-id' ids
44
+ }
45
+
46
+ _mcp_kit() {
47
+ local -a args
48
+ args=(\${words[@]})
49
+ case "\${args[2]}" in
50
+ add|remove|update|enable|disable|info)
51
+ _mcp_kit_mcpids ;;
52
+ *)
53
+ _mcp_kit_completions ;;
54
+ esac
55
+ }
56
+
57
+ compdef _mcp_kit mcp-kit
37
58
  `.trimStart();
38
59
  const BASH_COMPLETION = `
39
60
  # mcp-kit bash completion
40
61
  # Add to ~/.bashrc: eval "$(mcp-kit completion bash)"
41
62
 
42
- mcp_kit_completions() {
43
- local MCP_IDS="azure confluence mssql playwright runbook filesystem git azuredevops postgres slack sonarqube context7 figma everything"
63
+ _mcp_kit_completions() {
64
+ local MCP_IDS="azure confluence mssql playwright runbook filesystem git azuredevops postgres slack sonarqube context figma everything"
44
65
  local SUBCMDS="init add remove update status doctor list reset export import install env validate enable disable info open backup search completion"
45
66
  local cur prev
46
67
  cur="\${COMP_WORDS[COMP_CWORD]}"
47
68
  prev="\${COMP_WORDS[COMP_CWORD-1]}"
48
69
  case "\${prev}" in
49
- add|remove|enable|disable|info)
50
- COMPREPLY=( $(compgen -W "\${MCP_IDS}" -- "\${cur}") )
70
+ add|remove|update|enable|disable|info)
71
+ COMPREPLY=(\$(compgen -W "\${MCP_IDS}" -- "\${cur}"))
51
72
  return ;;
52
73
  esac
53
- COMPREPLY=( $(compgen -W "\${SUBCMDS}" -- "\${cur}") )
74
+ COMPREPLY=(\$(compgen -W "\${SUBCMDS}" -- "\${cur}"))
54
75
  }
55
76
 
56
- complete -F mcp_kit_completions mcp-kit
77
+ complete -F _mcp_kit_completions mcp-kit
57
78
  `.trimStart();
58
- async function runCompletion(shell) {
59
- try {
60
- const s = shell?.toLowerCase() ?? "zsh";
61
- if (s === "zsh") {
62
- process.stdout.write(ZSH_COMPLETION);
63
- return;
64
- }
65
- if (s === "bash") {
66
- process.stdout.write(BASH_COMPLETION);
67
- return;
68
- }
69
- logger_1.log.error(`Unsupported shell: '${shell}'. Use 'zsh' or 'bash'.`);
70
- logger_1.log.blank();
71
- logger_1.log.info("Usage:");
72
- logger_1.log.muted(" mcp-kit completion zsh # zsh");
73
- logger_1.log.muted(" mcp-kit completion bash # bash");
74
- logger_1.log.blank();
75
- logger_1.log.muted("Then add to your shell profile:");
76
- logger_1.log.muted(' echo \'eval "$(mcp-kit completion zsh)"\' >> ~/.zshrc && source ~/.zshrc');
77
- process.exit(1);
79
+ export async function runCompletion(shell = 'zsh') {
80
+ const s = shell.toLowerCase();
81
+ if (s === 'zsh') {
82
+ process.stdout.write(ZSH_COMPLETION);
83
+ return;
78
84
  }
79
- catch (err) {
80
- logger_1.log.error(`completion failed: ${err instanceof Error ? err.message : "Unknown error"}`);
81
- process.exit(1);
85
+ if (s === 'bash') {
86
+ process.stdout.write(BASH_COMPLETION);
87
+ return;
82
88
  }
89
+ log.error(`Unsupported shell: "${shell}". Use 'zsh' or 'bash'.`);
90
+ log.blank();
91
+ log.info('Usage:');
92
+ log.muted(' mcp-kit completion zsh # zsh');
93
+ log.muted(' mcp-kit completion bash # bash');
94
+ log.blank();
95
+ log.muted('Then add to your shell profile:');
96
+ log.muted(` echo 'eval "$(mcp-kit completion zsh)"' >> ~/.zshrc && source ~/.zshrc`);
97
+ process.exit(1);
83
98
  }
84
99
  //# sourceMappingURL=completion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":";;AAyDA,sCA2BC;AApFD,4CAAsC;AAEtC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCtB,CAAC,SAAS,EAAE,CAAC;AAEd,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;CAmBvB,CAAC,SAAS,EAAE,CAAC;AAEP,KAAK,UAAU,aAAa,CAAC,KAAc;IAChD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC;QAExC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,YAAG,CAAC,KAAK,CAAC,uBAAuB,KAAK,yBAAyB,CAAC,CAAC;QACjE,YAAG,CAAC,KAAK,EAAE,CAAC;QACZ,YAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnB,YAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC9C,YAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC/C,YAAG,CAAC,KAAK,EAAE,CAAC;QACZ,YAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC7C,YAAG,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAG,CAAC,KAAK,CAAC,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,EAAE;AACF,6BAA6B;AAC7B,EAAE;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDtB,CAAC,SAAS,EAAE,CAAC;AAEd,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;CAmBvB,CAAC,SAAS,EAAE,CAAC;AAEd,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,KAAK;IACvD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAE9B,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,uBAAuB,KAAK,yBAAyB,CAAC,CAAC;IACjE,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9C,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC/C,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC7C,GAAG,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;IACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -1,2 +1,6 @@
1
- export declare function runDoctor(): Promise<void>;
1
+ interface DoctorOptions {
2
+ json?: boolean;
3
+ }
4
+ export declare function runDoctor(options?: DoctorOptions): Promise<void>;
5
+ export {};
2
6
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAUA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAoJ/C"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAeA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsL1E"}