@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":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAK/E;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpF"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAQA;;GAEG;AAEH,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAOzE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMvE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhE"}
package/dist/utils/fs.js CHANGED
@@ -1,30 +1,94 @@
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.ensureDirForFile = ensureDirForFile;
7
- exports.pathExists = pathExists;
8
- exports.readJsonSafe = readJsonSafe;
9
- exports.writeJsonAtomic = writeJsonAtomic;
10
- const fs_extra_1 = __importDefault(require("fs-extra"));
11
- const node_path_1 = __importDefault(require("node:path"));
12
- async function ensureDirForFile(filePath) {
13
- await fs_extra_1.default.mkdirp(node_path_1.default.dirname(filePath));
14
- }
15
- async function pathExists(filePath) {
16
- return fs_extra_1.default.pathExists(filePath);
17
- }
18
- async function readJsonSafe(filePath, fallback) {
19
- if (!(await fs_extra_1.default.pathExists(filePath))) {
20
- return fallback;
21
- }
22
- return fs_extra_1.default.readJSON(filePath);
23
- }
24
- async function writeJsonAtomic(filePath, data) {
25
- await ensureDirForFile(filePath);
26
- const tmpPath = `${filePath}.tmp`;
27
- await fs_extra_1.default.writeFile(tmpPath, JSON.stringify(data, null, 2), "utf8");
28
- await fs_extra_1.default.rename(tmpPath, filePath);
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import fsExtra from 'fs-extra';
4
+ //--------------------------------------------------------------
5
+ // Safe file system helpers
6
+ //--------------------------------------------------------------
7
+ /**
8
+ * Read and parse a JSON file. Returns null if the file doesn't exist or is invalid.
9
+ */
10
+ export async function safeReadJSON(filePath) {
11
+ try {
12
+ const content = await fs.readFile(filePath, 'utf-8');
13
+ return JSON.parse(content);
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
19
+ /**
20
+ * Write an object to a JSON file, creating directories as needed.
21
+ */
22
+ export async function safeWriteJSON(filePath, data) {
23
+ await fsExtra.outputJSON(filePath, data, { encoding: 'utf-8', spaces: 2 });
24
+ const tmpPath = filePath + '.tmp';
25
+ await fs.writeFile(tmpPath, JSON.stringify(data, null, 2), 'utf-8');
26
+ await fs.rename(tmpPath, filePath);
27
+ }
28
+ /**
29
+ * Check if a file exists.
30
+ */
31
+ export async function fileExists(filePath) {
32
+ try {
33
+ await fs.access(filePath);
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ /**
41
+ * Check whether path is writable.
42
+ */
43
+ export async function isWritable(filePath) {
44
+ try {
45
+ await fs.access(filePath, fs.constants.W_OK);
46
+ return true;
47
+ }
48
+ catch {
49
+ return false;
50
+ }
51
+ }
52
+ /**
53
+ * Ensure a directory exists, creating it if necessary.
54
+ */
55
+ export async function ensureDir(dirPath) {
56
+ await fsExtra.ensureDir(dirPath);
57
+ }
58
+ /**
59
+ * Read a text file, returning null if it doesn't exist.
60
+ */
61
+ export async function readText(filePath) {
62
+ try {
63
+ return await fs.readFile(filePath, 'utf-8');
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ }
69
+ /**
70
+ * Write text to a file, creating directories as needed.
71
+ */
72
+ export async function writeText(filePath, content) {
73
+ await fsExtra.ensureDir(path.dirname(filePath));
74
+ await fsExtra.outputFile(filePath, content, 'utf-8');
75
+ }
76
+ /**
77
+ * Append text to a file, creating it if it doesn't exist.
78
+ */
79
+ export async function appendText(filePath, content) {
80
+ await fsExtra.ensureDir(path.dirname(filePath));
81
+ await fsExtra.appendFile(filePath, content, 'utf-8');
82
+ }
83
+ /**
84
+ * Delete a file if it exists.
85
+ */
86
+ export async function deleteFile(filePath) {
87
+ try {
88
+ await fs.unlink(filePath);
89
+ }
90
+ catch {
91
+ // Ignore errors if the file doesn't exist
92
+ }
29
93
  }
30
94
  //# sourceMappingURL=fs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":";;;;;AAGA,4CAEC;AAED,gCAEC;AAED,oCAKC;AAED,0CAKC;AAvBD,wDAA0B;AAC1B,0DAA6B;AAEtB,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,MAAM,kBAAE,CAAC,MAAM,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,OAAO,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAEM,KAAK,UAAU,YAAY,CAAI,QAAgB,EAAE,QAAW;IACjE,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,kBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAe,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAa;IACnE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAC;IAClC,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,kBAAE,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,GAAG;gBACF,MAAM,KAAG,IAAI;mBACV,MAAM,KAAG,IAAI;gBAChB,MAAM,KAAG,IAAI;iBACZ,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;kBACX,MAAM,KAAG,IAAI;iBAOd,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;iBACd,IAAI;CAChB,CAAC;AAGF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAOpE"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,GAAG;gBACF,MAAM,KAAG,IAAI;mBACV,MAAM,KAAG,IAAI;gBAChB,MAAM,KAAG,IAAI;iBACZ,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;kBACX,MAAM,KAAG,IAAI;iBAQd,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;iBACd,IAAI;CAChB,CAAC;AAGF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAOpE"}
@@ -1,35 +1,29 @@
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.log = void 0;
7
- exports.printTable = printTable;
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const boxen_1 = __importDefault(require("boxen"));
10
- const table_1 = require("table");
1
+ import chalk from "chalk";
2
+ import boxen from "boxen";
3
+ import { table } from "table";
11
4
  // Chalk-based colored logger
12
- exports.log = {
13
- info: (msg) => console.log(`${chalk_1.default.cyan("ℹ")} ${msg}`),
14
- success: (msg) => console.log(`${chalk_1.default.green("✅")} ${msg}`),
15
- warn: (msg) => console.log(`${chalk_1.default.yellow("⚠️")} ${msg}`),
16
- error: (msg) => console.error(`${chalk_1.default.red("❌")} ${msg}`),
17
- step: (msg) => console.log(`${chalk_1.default.blue("→")} ${msg}`),
18
- header: (msg) => console.log((0, boxen_1.default)(chalk_1.default.bold(msg), {
5
+ export const log = {
6
+ info: (msg) => console.log(`${chalk.cyan("ℹ")} ${msg}`),
7
+ success: (msg) => console.log(`${chalk.green("✅")} ${msg}`),
8
+ warn: (msg) => console.log(`${chalk.yellow("⚠️")} ${msg}`),
9
+ error: (msg) => console.error(`${chalk.red("❌")} ${msg}`),
10
+ step: (msg) => console.log(`${chalk.blue("→")} ${msg}`),
11
+ header: (msg) => console.log(boxen(chalk.bold(msg), {
19
12
  padding: 1,
20
- borderColor: "cyan"
13
+ borderColor: "cyan",
14
+ borderStyle: "round",
21
15
  })),
22
- muted: (msg) => console.log(chalk_1.default.gray(msg)),
23
- code: (msg) => console.log(chalk_1.default.bgGray.white(` ${msg} `)),
16
+ muted: (msg) => console.log(chalk.gray(msg)),
17
+ code: (msg) => console.log(chalk.bgGray.white(` ${msg} `)),
24
18
  blank: () => console.log("")
25
19
  };
26
20
  // ASCII table renderer
27
- function printTable(headers, rows) {
21
+ export function printTable(headers, rows) {
28
22
  if (rows.length === 0) {
29
- exports.log.muted("(no entries)");
23
+ log.muted("(no entries)");
30
24
  return;
31
25
  }
32
- const data = [headers.map((h) => chalk_1.default.bold.cyan(h)), ...rows];
33
- console.log((0, table_1.table)(data));
26
+ const data = [headers.map((h) => chalk.bold.cyan(h)), ...rows];
27
+ console.log(table(data));
34
28
  }
35
29
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;;;;AAwBA,gCAOC;AA/BD,kDAA0B;AAC1B,kDAA0B;AAC1B,iCAA8B;AAE9B,6BAA6B;AAChB,QAAA,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACrE,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACzE,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACxE,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACvE,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACrE,MAAM,EAAE,CAAC,GAAW,EAAQ,EAAE,CAC5B,OAAO,CAAC,GAAG,CACT,IAAA,eAAK,EAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrB,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,MAAM;KACpB,CAAC,CACH;IACH,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACxE,KAAK,EAAE,GAAS,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;CACnC,CAAC;AAEF,uBAAuB;AACvB,SAAgB,UAAU,CAAC,OAAiB,EAAE,IAAgB;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,WAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,6BAA6B;AAC7B,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACrE,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACzE,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACxE,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACvE,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACrE,MAAM,EAAE,CAAC,GAAW,EAAQ,EAAE,CAC5B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrB,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,OAAO;KACrB,CAAC,CACH;IACH,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACxE,KAAK,EAAE,GAAS,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;CACnC,CAAC;AAEF,uBAAuB;AACvB,MAAM,UAAU,UAAU,CAAC,OAAiB,EAAE,IAAgB;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,CAAC"}
@@ -1,2 +1,13 @@
1
- export declare function canReach(url: string, timeout?: number): Promise<boolean>;
1
+ /**
2
+ * Ping a URL to check if it's reachable. Returns true if the request succeeds, false otherwise.
3
+ */
4
+ export declare function checkConnectivity(url: string, timeoutMs?: number): Promise<boolean>;
5
+ /**
6
+ * Fetch the latest published version of a package from the npm registry. Returns 'unknown' if the package doesn't exist or there's an error.
7
+ */
8
+ export declare function getNpmPackageVersion(packageName: string): Promise<string | null>;
9
+ /**
10
+ * check whether an npm package exists. Returns true if the package exists, false otherwise.
11
+ */
12
+ export declare function checkNpmPackageExists(packageName: string): Promise<boolean>;
2
13
  //# sourceMappingURL=network.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAEA,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5E"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvF;AAED;;IAEI;AAEJ,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUtF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASjF"}
@@ -1,17 +1,45 @@
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.canReach = canReach;
7
- const axios_1 = __importDefault(require("axios"));
8
- async function canReach(url, timeout = 5000) {
1
+ import axios from "axios";
2
+ //------------------------------------------------------------
3
+ // Connectivity & npm registry helpers
4
+ //------------------------------------------------------------
5
+ /**
6
+ * Ping a URL to check if it's reachable. Returns true if the request succeeds, false otherwise.
7
+ */
8
+ export async function checkConnectivity(url, timeoutMs = 8000) {
9
9
  try {
10
- const response = await axios_1.default.head(url, { timeout });
10
+ const response = await axios.head(url, { timeout: timeoutMs });
11
11
  return response.status >= 200 && response.status < 300;
12
12
  }
13
13
  catch {
14
14
  return false;
15
15
  }
16
16
  }
17
+ /**
18
+ * Fetch the latest published version of a package from the npm registry. Returns 'unknown' if the package doesn't exist or there's an error.
19
+ */
20
+ export async function getNpmPackageVersion(packageName) {
21
+ try {
22
+ const pkgPath = packageName.replace(/\//g, '%2f');
23
+ const url = `https://registry.npmjs.org/${pkgPath}/latest`;
24
+ const response = await axios.get(url, { timeout: 8000 });
25
+ return response.data?.version ?? 'unknown';
26
+ }
27
+ catch {
28
+ return 'unknown';
29
+ }
30
+ }
31
+ /**
32
+ * check whether an npm package exists. Returns true if the package exists, false otherwise.
33
+ */
34
+ export async function checkNpmPackageExists(packageName) {
35
+ try {
36
+ const pkgPath = packageName.replace(/\//g, '%2f');
37
+ const url = `https://registry.npmjs.org/${pkgPath}`;
38
+ await axios.head(url, { timeout: 8000 });
39
+ return true;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
17
45
  //# sourceMappingURL=network.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":";;;;;AAEA,4BAOC;AATD,kDAA0B;AAEnB,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,OAAO,GAAG,IAAI;IACxD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,8DAA8D;AAC9D,sCAAsC;AACtC,8DAA8D;AAE9D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI;IACnE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;IAEI;AAEJ,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,IAAI,CAAC;QACL,MAAM,OAAO,GAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,8BAA8B,OAAO,SAAS,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAsB,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC;IAC7C,CAAC;IACA,MAAM,CAAC;QACJ,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,8BAA8B,OAAO,EAAE,CAAC;QACpD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,24 +1,15 @@
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.startSpinner = startSpinner;
7
- exports.succeedSpinner = succeedSpinner;
8
- exports.failSpinner = failSpinner;
9
- exports.updateSpinner = updateSpinner;
10
- const chalk_1 = __importDefault(require("chalk"));
11
- const ora_1 = __importDefault(require("ora"));
12
- function startSpinner(text) {
13
- return (0, ora_1.default)({ text: chalk_1.default.cyan(text), color: "cyan" }).start();
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ export function startSpinner(text) {
4
+ return ora({ text: chalk.cyan(text), color: "cyan" }).start();
14
5
  }
15
- function succeedSpinner(spinner, text) {
16
- spinner.succeed(chalk_1.default.cyan(text));
6
+ export function succeedSpinner(spinner, text) {
7
+ spinner.succeed(chalk.cyan(text));
17
8
  }
18
- function failSpinner(spinner, text) {
19
- spinner.fail(chalk_1.default.cyan(text));
9
+ export function failSpinner(spinner, text) {
10
+ spinner.fail(chalk.cyan(text));
20
11
  }
21
- function updateSpinner(spinner, text) {
22
- spinner.text = chalk_1.default.cyan(text);
12
+ export function updateSpinner(spinner, text) {
13
+ spinner.text = chalk.cyan(text);
23
14
  }
24
15
  //# sourceMappingURL=spinner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":";;;;;AAKA,oCAEC;AAED,wCAEC;AAED,kCAEC;AAED,sCAEC;AAnBD,kDAA0B;AAC1B,8CAA+B;AAI/B,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,IAAA,aAAG,EAAC,EAAE,IAAI,EAAE,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,SAAgB,cAAc,CAAC,OAAgB,EAAE,IAAY;IAC3D,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,WAAW,CAAC,OAAgB,EAAE,IAAY;IACxD,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,aAAa,CAAC,OAAgB,EAAE,IAAY;IAC1D,OAAO,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAY,MAAM,KAAK,CAAC;AAI/B,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,IAAY;IAC3D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,IAAY;IACxD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAY;IAC1D,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
package/package.json CHANGED
@@ -1,25 +1,29 @@
1
1
  {
2
2
  "name": "@global-packages/mcp-kit",
3
- "version": "1.0.0",
4
- "description": "Universal MCP Configuration CLI auto-detect, configure and manage MCP servers across Azure, Confluence, MSSQL, Playwright and more. Works on Windows, macOS and Linux.",
3
+ "version": "1.0.3",
4
+ "description": "Universal MCP Configuration CLI - auto-detect, configure and manage MCP servers across Azure, Confluence, MSSQL, Playwright and more. Works on Windows, macOS and Linux.",
5
+ "type": "module",
6
+
5
7
  "main": "dist/index.js",
6
8
  "types": "dist/index.d.ts",
9
+
7
10
  "bin": {
8
11
  "mcp-kit": "./dist/index.js"
9
12
  },
13
+
10
14
  "scripts": {
11
15
  "build": "tsc && chmod +x dist/index.js",
12
- "dev": "ts-node src/index.ts",
16
+ "dev": "node --loader ts-node/esm src/index.ts",
13
17
  "start": "node dist/index.js",
14
- "postinstall": "node dist/postinstall.js",
15
18
  "prepare": "npm run build",
16
- "test": "jest",
19
+ "postinstall": "node dist/postinstall.js || true",
20
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest",
17
21
  "lint": "eslint src/**/*.ts"
18
22
  },
23
+
19
24
  "keywords": [
20
25
  "mcp",
21
26
  "model-context-protocol",
22
- "vscode",
23
27
  "cli",
24
28
  "azure",
25
29
  "confluence",
@@ -30,11 +34,28 @@
30
34
  "automation",
31
35
  "ai-tools"
32
36
  ],
37
+
33
38
  "author": "global-packages",
34
39
  "license": "MIT",
40
+
35
41
  "publishConfig": {
36
42
  "access": "public"
37
43
  },
44
+
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ },
48
+
49
+ "files": [
50
+ "dist/",
51
+ "README.md",
52
+ "src/postinstall.ts"
53
+ ],
54
+
55
+ "optionalDependencies": {
56
+ "keytar": "^7.9.0"
57
+ },
58
+
38
59
  "dependencies": {
39
60
  "axios": "^1.6.0",
40
61
  "boxen": "^7.1.0",
@@ -44,8 +65,6 @@
44
65
  "fs-extra": "^11.2.0",
45
66
  "glob": "^10.3.0",
46
67
  "inquirer": "^9.2.0",
47
- "keytar": "^7.9.0",
48
- "mcp-kit": "^1.2.8",
49
68
  "node-machine-id": "^1.1.12",
50
69
  "ora": "^8.0.0",
51
70
  "semver": "^7.6.0",
@@ -53,6 +72,7 @@
53
72
  "update-notifier": "^7.0.0",
54
73
  "zod": "^3.22.0"
55
74
  },
75
+
56
76
  "devDependencies": {
57
77
  "@types/fs-extra": "^11.0.0",
58
78
  "@types/inquirer": "^9.0.0",
@@ -64,11 +84,33 @@
64
84
  "ts-node": "^10.9.0",
65
85
  "typescript": "^5.3.0"
66
86
  },
67
- "engines": {
68
- "node": ">=18.0.0"
69
- },
70
- "files": [
71
- "dist/",
72
- "README.md"
73
- ]
74
- }
87
+
88
+ "jest": {
89
+ "preset": "ts-jest/presets/default-esm",
90
+
91
+ "extensionsToTreatAsEsm": [
92
+ ".ts"
93
+ ],
94
+
95
+ "moduleNameMapper": {
96
+ "^chalk$": "<rootDir>/test/mocks/chalk.ts",
97
+ "^boxen$": "<rootDir>/test/mocks/boxen.ts",
98
+ "^(\\.{1,2}/.*)\\.js$": "$1"
99
+ },
100
+
101
+ "transform": {
102
+ "^.+\\.tsx?$": [
103
+ "ts-jest",
104
+ {
105
+ "useESM": true
106
+ }
107
+ ]
108
+ },
109
+
110
+ "testEnvironment": "node",
111
+
112
+ "testMatch": [
113
+ "**/test/**/*.test.ts"
114
+ ]
115
+ }
116
+ }
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * postinstall.ts
5
+ *
6
+ * Runs automatically after `npm install -g @global-packages/mcp-kit`.
7
+ * Prints the MCP-KIT welcome banner with a quick-start command table.
8
+ */
9
+
10
+ import chalk from "chalk";
11
+ import boxen from "boxen";
12
+ import { table } from "table";
13
+
14
+ const ASCII = `
15
+ ███╗ ███╗ ██████╗██████╗ ██╗ ██╗██╗████████╗
16
+ ████╗ ████║██╔════╝██╔══██╗ ██║ ██╔╝██║╚══██╔══╝
17
+ ██╔████╔██║██║ ██████╔╝█████╗█████╔╝ ██║ ██║
18
+ ██║╚██╔╝██║██║ ██╔═══╝ ╚════╝██╔═██╗ ██║ ██║
19
+ ██║ ╚═╝ ██║╚██████╗██║ ██║ ██╗██║ ██║
20
+ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝
21
+ `;
22
+
23
+ const COMMANDS: [string, string][] = [
24
+ ["mcp-kit init --dev", "Interactive setup for development MCPs (filesystem, git, playwright...)"],
25
+ ["mcp-kit init --non-dev", "Interactive setup for shared/team MCPs (azure, confluence, slack...)"],
26
+ ["mcp-kit install", "Pre-download MCP packages (recommended in restricted networks)"],
27
+ ["mcp-kit list", "Show configured MCPs and availability"],
28
+ ["mcp-kit status", "Show MCP versions and config health summary"],
29
+ ["mcp-kit add <id>", "Add one MCP server by ID (e.g. mcp-kit add azure)"],
30
+ ["mcp-kit remove <id>", "Remove a configured MCP server"],
31
+ ["mcp-kit update", "Refresh command args to latest package tags"],
32
+ ["mcp-kit doctor", "Diagnose env/version/path/credential issues"],
33
+ ["mcp-kit export", "Export current setup as shareable JSON"],
34
+ ["mcp-kit import <file>", "Import shared setup (prompts for redacted secrets)"],
35
+ ["mcp-kit reset", "Remove all configured MCPs and start fresh"]
36
+ ];
37
+
38
+ function render(): void {
39
+ if (process.env.CI || process.env.MCP_KIT_POSTINSTALL_SILENT === "1") {
40
+ console.log("✅ @global-packages/mcp-kit installed. Run: mcp-kit init --dev");
41
+ return;
42
+ }
43
+
44
+ console.log(`\n${chalk.bold.magentaBright(ASCII)}`);
45
+
46
+ const topLine = boxen(
47
+ `${chalk.bold.whiteBright("Universal MCP Configuration CLI")}\n${chalk.gray(
48
+ "Auto-detect | Configure | Manage MCP servers - Windows | macOS | Linux"
49
+ )}`,
50
+ {
51
+ padding: { top: 0, bottom: 0, left: 2, right: 2 },
52
+ margin: { top: 0, bottom: 1, left: 2, right: 0 },
53
+ borderColor: "magenta",
54
+ borderStyle: "round",
55
+ textAlignment: "center"
56
+ }
57
+ );
58
+
59
+ console.log(topLine);
60
+ console.log(chalk.bold.yellowBright(" Quickstart commands\n"));
61
+
62
+ const tableData = [
63
+ [chalk.bold.cyanBright("Command"), chalk.bold.cyanBright("Description")],
64
+ ...COMMANDS.map(([cmd, desc]) => [chalk.cyan(cmd), chalk.white(desc)])
65
+ ];
66
+
67
+ const output = table(tableData, {
68
+ border: {
69
+ topBody: chalk.gray("─"),
70
+ topJoin: chalk.gray("┬"),
71
+ topLeft: chalk.gray("┌"),
72
+ topRight: chalk.gray("┐"),
73
+ bottomBody: chalk.gray("─"),
74
+ bottomJoin: chalk.gray("┴"),
75
+ bottomLeft: chalk.gray("└"),
76
+ bottomRight: chalk.gray("┘"),
77
+ bodyLeft: chalk.gray("│"),
78
+ bodyRight: chalk.gray("│"),
79
+ bodyJoin: chalk.gray("│"),
80
+ joinBody: chalk.gray("─"),
81
+ joinLeft: chalk.gray("├"),
82
+ joinRight: chalk.gray("┤"),
83
+ joinJoin: chalk.gray("┼")
84
+ },
85
+ columns: {
86
+ 0: { width: 32, paddingLeft: 1, paddingRight: 1 },
87
+ 1: { width: 58, paddingLeft: 1, paddingRight: 1, wrapWord: true }
88
+ },
89
+ drawHorizontalLine: (lineIndex: number, rowCount: number): boolean =>
90
+ lineIndex === 0 || lineIndex === 1 || lineIndex === rowCount
91
+ });
92
+
93
+ const indented = output
94
+ .split("\n")
95
+ .map((line) => ` ${line}`)
96
+ .join("\n");
97
+ console.log(indented);
98
+
99
+ console.log(
100
+ boxen(
101
+ `${chalk.bold.greenBright("✅ Get started:")} ${chalk.whiteBright("mcp-kit init --dev")}\n${chalk.gray(
102
+ "or"
103
+ )} ${chalk.whiteBright("mcp-kit install")}\n${chalk.underline.blue(
104
+ "https://github.com/global-packages/mcp-kit"
105
+ )}`,
106
+ {
107
+ padding: { top: 0, bottom: 0, left: 1, right: 1 },
108
+ margin: { top: 0, bottom: 1, left: 2, right: 0 },
109
+ borderColor: "green",
110
+ borderStyle: "double",
111
+ textAlignment: "center"
112
+ }
113
+ )
114
+ );
115
+ }
116
+
117
+ try {
118
+ render();
119
+ } catch {
120
+ // Never fail npm install because of postinstall formatting.
121
+ }