@mcp-z/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/bin/cli.js +5 -0
  4. package/dist/cjs/cli.d.cts +1 -0
  5. package/dist/cjs/cli.d.ts +1 -0
  6. package/dist/cjs/cli.js +576 -0
  7. package/dist/cjs/cli.js.map +1 -0
  8. package/dist/cjs/commands/call-tool.d.cts +26 -0
  9. package/dist/cjs/commands/call-tool.d.ts +26 -0
  10. package/dist/cjs/commands/call-tool.js +362 -0
  11. package/dist/cjs/commands/call-tool.js.map +1 -0
  12. package/dist/cjs/commands/get-prompt.d.cts +26 -0
  13. package/dist/cjs/commands/get-prompt.d.ts +26 -0
  14. package/dist/cjs/commands/get-prompt.js +335 -0
  15. package/dist/cjs/commands/get-prompt.js.map +1 -0
  16. package/dist/cjs/commands/inspect.d.cts +35 -0
  17. package/dist/cjs/commands/inspect.d.ts +35 -0
  18. package/dist/cjs/commands/inspect.js +896 -0
  19. package/dist/cjs/commands/inspect.js.map +1 -0
  20. package/dist/cjs/commands/manifest/env-prompting.d.cts +21 -0
  21. package/dist/cjs/commands/manifest/env-prompting.d.ts +21 -0
  22. package/dist/cjs/commands/manifest/env-prompting.js +657 -0
  23. package/dist/cjs/commands/manifest/env-prompting.js.map +1 -0
  24. package/dist/cjs/commands/manifest/generate.d.cts +124 -0
  25. package/dist/cjs/commands/manifest/generate.d.ts +124 -0
  26. package/dist/cjs/commands/manifest/generate.js +2541 -0
  27. package/dist/cjs/commands/manifest/generate.js.map +1 -0
  28. package/dist/cjs/commands/manifest/index.d.cts +2 -0
  29. package/dist/cjs/commands/manifest/index.d.ts +2 -0
  30. package/dist/cjs/commands/manifest/index.js +229 -0
  31. package/dist/cjs/commands/manifest/index.js.map +1 -0
  32. package/dist/cjs/commands/manifest/metadata-reader.d.cts +71 -0
  33. package/dist/cjs/commands/manifest/metadata-reader.d.ts +71 -0
  34. package/dist/cjs/commands/manifest/metadata-reader.js +441 -0
  35. package/dist/cjs/commands/manifest/metadata-reader.js.map +1 -0
  36. package/dist/cjs/commands/manifest/validate.d.cts +1 -0
  37. package/dist/cjs/commands/manifest/validate.d.ts +1 -0
  38. package/dist/cjs/commands/manifest/validate.js +525 -0
  39. package/dist/cjs/commands/manifest/validate.js.map +1 -0
  40. package/dist/cjs/commands/read-resource.d.cts +24 -0
  41. package/dist/cjs/commands/read-resource.d.ts +24 -0
  42. package/dist/cjs/commands/read-resource.js +311 -0
  43. package/dist/cjs/commands/read-resource.js.map +1 -0
  44. package/dist/cjs/commands/search.d.cts +31 -0
  45. package/dist/cjs/commands/search.d.ts +31 -0
  46. package/dist/cjs/commands/search.js +464 -0
  47. package/dist/cjs/commands/search.js.map +1 -0
  48. package/dist/cjs/commands/up.d.cts +49 -0
  49. package/dist/cjs/commands/up.d.ts +49 -0
  50. package/dist/cjs/commands/up.js +235 -0
  51. package/dist/cjs/commands/up.js.map +1 -0
  52. package/dist/cjs/index.d.cts +7 -0
  53. package/dist/cjs/index.d.ts +7 -0
  54. package/dist/cjs/index.js +85 -0
  55. package/dist/cjs/index.js.map +1 -0
  56. package/dist/cjs/lib/find-config.d.cts +14 -0
  57. package/dist/cjs/lib/find-config.d.ts +14 -0
  58. package/dist/cjs/lib/find-config.js +93 -0
  59. package/dist/cjs/lib/find-config.js.map +1 -0
  60. package/dist/cjs/lib/json-schema.d.cts +18 -0
  61. package/dist/cjs/lib/json-schema.d.ts +18 -0
  62. package/dist/cjs/lib/json-schema.js +306 -0
  63. package/dist/cjs/lib/json-schema.js.map +1 -0
  64. package/dist/cjs/lib/resolve-server-config.d.cts +50 -0
  65. package/dist/cjs/lib/resolve-server-config.d.ts +50 -0
  66. package/dist/cjs/lib/resolve-server-config.js +214 -0
  67. package/dist/cjs/lib/resolve-server-config.js.map +1 -0
  68. package/dist/cjs/package.json +1 -0
  69. package/dist/cjs/types.d.cts +21 -0
  70. package/dist/cjs/types.d.ts +21 -0
  71. package/dist/cjs/types.js +32 -0
  72. package/dist/cjs/types.js.map +1 -0
  73. package/dist/esm/cli.d.ts +1 -0
  74. package/dist/esm/cli.js +129 -0
  75. package/dist/esm/cli.js.map +1 -0
  76. package/dist/esm/commands/call-tool.d.ts +26 -0
  77. package/dist/esm/commands/call-tool.js +151 -0
  78. package/dist/esm/commands/call-tool.js.map +1 -0
  79. package/dist/esm/commands/get-prompt.d.ts +26 -0
  80. package/dist/esm/commands/get-prompt.js +118 -0
  81. package/dist/esm/commands/get-prompt.js.map +1 -0
  82. package/dist/esm/commands/inspect.d.ts +35 -0
  83. package/dist/esm/commands/inspect.js +438 -0
  84. package/dist/esm/commands/inspect.js.map +1 -0
  85. package/dist/esm/commands/manifest/env-prompting.d.ts +21 -0
  86. package/dist/esm/commands/manifest/env-prompting.js +213 -0
  87. package/dist/esm/commands/manifest/env-prompting.js.map +1 -0
  88. package/dist/esm/commands/manifest/generate.d.ts +124 -0
  89. package/dist/esm/commands/manifest/generate.js +1087 -0
  90. package/dist/esm/commands/manifest/generate.js.map +1 -0
  91. package/dist/esm/commands/manifest/index.d.ts +2 -0
  92. package/dist/esm/commands/manifest/index.js +23 -0
  93. package/dist/esm/commands/manifest/index.js.map +1 -0
  94. package/dist/esm/commands/manifest/metadata-reader.d.ts +71 -0
  95. package/dist/esm/commands/manifest/metadata-reader.js +143 -0
  96. package/dist/esm/commands/manifest/metadata-reader.js.map +1 -0
  97. package/dist/esm/commands/manifest/validate.d.ts +1 -0
  98. package/dist/esm/commands/manifest/validate.js +167 -0
  99. package/dist/esm/commands/manifest/validate.js.map +1 -0
  100. package/dist/esm/commands/read-resource.d.ts +24 -0
  101. package/dist/esm/commands/read-resource.js +95 -0
  102. package/dist/esm/commands/read-resource.js.map +1 -0
  103. package/dist/esm/commands/search.d.ts +31 -0
  104. package/dist/esm/commands/search.js +145 -0
  105. package/dist/esm/commands/search.js.map +1 -0
  106. package/dist/esm/commands/up.d.ts +49 -0
  107. package/dist/esm/commands/up.js +74 -0
  108. package/dist/esm/commands/up.js.map +1 -0
  109. package/dist/esm/index.d.ts +7 -0
  110. package/dist/esm/index.js +11 -0
  111. package/dist/esm/index.js.map +1 -0
  112. package/dist/esm/lib/find-config.d.ts +14 -0
  113. package/dist/esm/lib/find-config.js +42 -0
  114. package/dist/esm/lib/find-config.js.map +1 -0
  115. package/dist/esm/lib/json-schema.d.ts +18 -0
  116. package/dist/esm/lib/json-schema.js +66 -0
  117. package/dist/esm/lib/json-schema.js.map +1 -0
  118. package/dist/esm/lib/resolve-server-config.d.ts +50 -0
  119. package/dist/esm/lib/resolve-server-config.js +154 -0
  120. package/dist/esm/lib/resolve-server-config.js.map +1 -0
  121. package/dist/esm/package.json +1 -0
  122. package/dist/esm/types.d.ts +21 -0
  123. package/dist/esm/types.js +11 -0
  124. package/dist/esm/types.js.map +1 -0
  125. package/package.json +99 -0
  126. package/schemas/server.schema.json +489 -0
@@ -0,0 +1,896 @@
1
+ /**
2
+ * inspect.ts
3
+ *
4
+ * Inspect MCP servers: explore tools, resources, prompts, and health status.
5
+ * Supports stdio (spawned) and http (remote) servers per MCP spec.
6
+ */ "use strict";
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ Object.defineProperty(exports, "inspectCommand", {
11
+ enumerable: true,
12
+ get: function() {
13
+ return inspectCommand;
14
+ }
15
+ });
16
+ var _client = require("@mcp-z/client");
17
+ var _fs = /*#__PURE__*/ _interop_require_wildcard(require("fs"));
18
+ var _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
19
+ var _findconfigts = require("../lib/find-config.js");
20
+ var _typests = require("../types.js");
21
+ function _array_like_to_array(arr, len) {
22
+ if (len == null || len > arr.length) len = arr.length;
23
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
24
+ return arr2;
25
+ }
26
+ function _array_with_holes(arr) {
27
+ if (Array.isArray(arr)) return arr;
28
+ }
29
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
30
+ try {
31
+ var info = gen[key](arg);
32
+ var value = info.value;
33
+ } catch (error) {
34
+ reject(error);
35
+ return;
36
+ }
37
+ if (info.done) {
38
+ resolve(value);
39
+ } else {
40
+ Promise.resolve(value).then(_next, _throw);
41
+ }
42
+ }
43
+ function _async_to_generator(fn) {
44
+ return function() {
45
+ var self = this, args = arguments;
46
+ return new Promise(function(resolve, reject) {
47
+ var gen = fn.apply(self, args);
48
+ function _next(value) {
49
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
50
+ }
51
+ function _throw(err) {
52
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
53
+ }
54
+ _next(undefined);
55
+ });
56
+ };
57
+ }
58
+ function _instanceof(left, right) {
59
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
60
+ return !!right[Symbol.hasInstance](left);
61
+ } else {
62
+ return left instanceof right;
63
+ }
64
+ }
65
+ function _getRequireWildcardCache(nodeInterop) {
66
+ if (typeof WeakMap !== "function") return null;
67
+ var cacheBabelInterop = new WeakMap();
68
+ var cacheNodeInterop = new WeakMap();
69
+ return (_getRequireWildcardCache = function(nodeInterop) {
70
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
71
+ })(nodeInterop);
72
+ }
73
+ function _interop_require_wildcard(obj, nodeInterop) {
74
+ if (!nodeInterop && obj && obj.__esModule) {
75
+ return obj;
76
+ }
77
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
78
+ return {
79
+ default: obj
80
+ };
81
+ }
82
+ var cache = _getRequireWildcardCache(nodeInterop);
83
+ if (cache && cache.has(obj)) {
84
+ return cache.get(obj);
85
+ }
86
+ var newObj = {
87
+ __proto__: null
88
+ };
89
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
90
+ for(var key in obj){
91
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
92
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
93
+ if (desc && (desc.get || desc.set)) {
94
+ Object.defineProperty(newObj, key, desc);
95
+ } else {
96
+ newObj[key] = obj[key];
97
+ }
98
+ }
99
+ }
100
+ newObj.default = obj;
101
+ if (cache) {
102
+ cache.set(obj, newObj);
103
+ }
104
+ return newObj;
105
+ }
106
+ function _iterable_to_array_limit(arr, i) {
107
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
108
+ if (_i == null) return;
109
+ var _arr = [];
110
+ var _n = true;
111
+ var _d = false;
112
+ var _s, _e;
113
+ try {
114
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
115
+ _arr.push(_s.value);
116
+ if (i && _arr.length === i) break;
117
+ }
118
+ } catch (err) {
119
+ _d = true;
120
+ _e = err;
121
+ } finally{
122
+ try {
123
+ if (!_n && _i["return"] != null) _i["return"]();
124
+ } finally{
125
+ if (_d) throw _e;
126
+ }
127
+ }
128
+ return _arr;
129
+ }
130
+ function _non_iterable_rest() {
131
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
132
+ }
133
+ function _sliced_to_array(arr, i) {
134
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
135
+ }
136
+ function _unsupported_iterable_to_array(o, minLen) {
137
+ if (!o) return;
138
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
139
+ var n = Object.prototype.toString.call(o).slice(8, -1);
140
+ if (n === "Object" && o.constructor) n = o.constructor.name;
141
+ if (n === "Map" || n === "Set") return Array.from(n);
142
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
143
+ }
144
+ function _ts_generator(thisArg, body) {
145
+ var f, y, t, _ = {
146
+ label: 0,
147
+ sent: function() {
148
+ if (t[0] & 1) throw t[1];
149
+ return t[1];
150
+ },
151
+ trys: [],
152
+ ops: []
153
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
154
+ return d(g, "next", {
155
+ value: verb(0)
156
+ }), d(g, "throw", {
157
+ value: verb(1)
158
+ }), d(g, "return", {
159
+ value: verb(2)
160
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
161
+ value: function() {
162
+ return this;
163
+ }
164
+ }), g;
165
+ function verb(n) {
166
+ return function(v) {
167
+ return step([
168
+ n,
169
+ v
170
+ ]);
171
+ };
172
+ }
173
+ function step(op) {
174
+ if (f) throw new TypeError("Generator is already executing.");
175
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
176
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
177
+ if (y = 0, t) op = [
178
+ op[0] & 2,
179
+ t.value
180
+ ];
181
+ switch(op[0]){
182
+ case 0:
183
+ case 1:
184
+ t = op;
185
+ break;
186
+ case 4:
187
+ _.label++;
188
+ return {
189
+ value: op[1],
190
+ done: false
191
+ };
192
+ case 5:
193
+ _.label++;
194
+ y = op[1];
195
+ op = [
196
+ 0
197
+ ];
198
+ continue;
199
+ case 7:
200
+ op = _.ops.pop();
201
+ _.trys.pop();
202
+ continue;
203
+ default:
204
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
205
+ _ = 0;
206
+ continue;
207
+ }
208
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
209
+ _.label = op[1];
210
+ break;
211
+ }
212
+ if (op[0] === 6 && _.label < t[1]) {
213
+ _.label = t[1];
214
+ t = op;
215
+ break;
216
+ }
217
+ if (t && _.label < t[2]) {
218
+ _.label = t[2];
219
+ _.ops.push(op);
220
+ break;
221
+ }
222
+ if (t[2]) _.ops.pop();
223
+ _.trys.pop();
224
+ continue;
225
+ }
226
+ op = body.call(thisArg, _);
227
+ } catch (e) {
228
+ op = [
229
+ 6,
230
+ e
231
+ ];
232
+ y = 0;
233
+ } finally{
234
+ f = t = 0;
235
+ }
236
+ if (op[0] & 5) throw op[1];
237
+ return {
238
+ value: op[0] ? op[1] : void 0,
239
+ done: true
240
+ };
241
+ }
242
+ }
243
+ var MAX_DESCRIPTION = 100;
244
+ function inspectCommand() {
245
+ return _async_to_generator(function() {
246
+ var opts, registry, _ref, _raw_mcpServers, configPath, raw, servers, configDir, serverNames, serversToInspect, serverInfos, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, serverName, info, err, _;
247
+ var _arguments = arguments;
248
+ return _ts_generator(this, function(_state) {
249
+ switch(_state.label){
250
+ case 0:
251
+ opts = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {};
252
+ _state.label = 1;
253
+ case 1:
254
+ _state.trys.push([
255
+ 1,
256
+ ,
257
+ 10,
258
+ 15
259
+ ]);
260
+ configPath = (0, _findconfigts.findConfigPath)(opts.config);
261
+ raw = JSON.parse(_fs.readFileSync(configPath, 'utf8'));
262
+ servers = (_ref = (_raw_mcpServers = raw.mcpServers) !== null && _raw_mcpServers !== void 0 ? _raw_mcpServers : raw.servers) !== null && _ref !== void 0 ? _ref : raw;
263
+ configDir = _path.dirname(configPath);
264
+ serverNames = Object.keys(servers || {});
265
+ serversToInspect = filterServers(serverNames, opts.servers);
266
+ // Create registry (spawns stdio servers, registers HTTP servers)
267
+ // In attach mode, don't spawn - just register for connection
268
+ registry = (0, _client.createServerRegistry)(servers, {
269
+ cwd: configDir,
270
+ dialects: opts.attach ? [] : [
271
+ 'servers',
272
+ 'start'
273
+ ]
274
+ });
275
+ serverInfos = [];
276
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
277
+ _state.label = 2;
278
+ case 2:
279
+ _state.trys.push([
280
+ 2,
281
+ 7,
282
+ 8,
283
+ 9
284
+ ]);
285
+ _iterator = serversToInspect[Symbol.iterator]();
286
+ _state.label = 3;
287
+ case 3:
288
+ if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
289
+ 3,
290
+ 6
291
+ ];
292
+ serverName = _step.value;
293
+ return [
294
+ 4,
295
+ inspectServer(serverName, servers, registry, opts)
296
+ ];
297
+ case 4:
298
+ info = _state.sent();
299
+ serverInfos.push(info);
300
+ _state.label = 5;
301
+ case 5:
302
+ _iteratorNormalCompletion = true;
303
+ return [
304
+ 3,
305
+ 3
306
+ ];
307
+ case 6:
308
+ return [
309
+ 3,
310
+ 9
311
+ ];
312
+ case 7:
313
+ err = _state.sent();
314
+ _didIteratorError = true;
315
+ _iteratorError = err;
316
+ return [
317
+ 3,
318
+ 9
319
+ ];
320
+ case 8:
321
+ try {
322
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
323
+ _iterator.return();
324
+ }
325
+ } finally{
326
+ if (_didIteratorError) {
327
+ throw _iteratorError;
328
+ }
329
+ }
330
+ return [
331
+ 7
332
+ ];
333
+ case 9:
334
+ // 5. Output results
335
+ if (opts.json) {
336
+ outputJSON(serverInfos);
337
+ } else {
338
+ outputPretty(serverInfos, opts);
339
+ }
340
+ return [
341
+ 3,
342
+ 15
343
+ ];
344
+ case 10:
345
+ if (!registry) return [
346
+ 3,
347
+ 14
348
+ ];
349
+ _state.label = 11;
350
+ case 11:
351
+ _state.trys.push([
352
+ 11,
353
+ 13,
354
+ ,
355
+ 14
356
+ ]);
357
+ return [
358
+ 4,
359
+ registry.close()
360
+ ];
361
+ case 12:
362
+ _state.sent();
363
+ return [
364
+ 3,
365
+ 14
366
+ ];
367
+ case 13:
368
+ _ = _state.sent();
369
+ return [
370
+ 3,
371
+ 14
372
+ ];
373
+ case 14:
374
+ return [
375
+ 7
376
+ ];
377
+ case 15:
378
+ return [
379
+ 2
380
+ ];
381
+ }
382
+ });
383
+ }).apply(this, arguments);
384
+ }
385
+ /**
386
+ * Filter servers based on --servers flag.
387
+ */ function filterServers(allServers, serversFlag) {
388
+ if (!serversFlag) {
389
+ return allServers;
390
+ }
391
+ var requested = serversFlag.split(',').map(function(s) {
392
+ return s.trim();
393
+ });
394
+ var missing = requested.filter(function(s) {
395
+ return !allServers.includes(s);
396
+ });
397
+ if (missing.length > 0) {
398
+ throw new Error("Server(s) not found in config: ".concat(missing.join(', '), "\n\nAvailable servers: ").concat(allServers.join(', ')));
399
+ }
400
+ return requested;
401
+ }
402
+ /**
403
+ * Inspect a single server: collect tools, resources, prompts, health.
404
+ */ function inspectServer(serverName, servers, registry, opts) {
405
+ return _async_to_generator(function() {
406
+ var start, serverConfig, client, needsTools, needsResources, needsPrompts, _ref, toolsResult, resourcesResult, promptsResult, startupTime, error, errorMessage, cause, serverConfig1, url;
407
+ return _ts_generator(this, function(_state) {
408
+ switch(_state.label){
409
+ case 0:
410
+ start = Date.now();
411
+ _state.label = 1;
412
+ case 1:
413
+ _state.trys.push([
414
+ 1,
415
+ 4,
416
+ ,
417
+ 5
418
+ ]);
419
+ // Connect to server via registry
420
+ serverConfig = servers === null || servers === void 0 ? void 0 : servers[serverName];
421
+ if (!serverConfig) {
422
+ throw new Error("Server ".concat(serverName, " not found in config"));
423
+ }
424
+ if (!(0, _typests.isHttpServer)(serverConfig) && !serverConfig.command) {
425
+ throw new Error("Stdio server ".concat(serverName, ' missing required "command" field'));
426
+ }
427
+ return [
428
+ 4,
429
+ registry.connect(serverName)
430
+ ];
431
+ case 2:
432
+ client = _state.sent();
433
+ // Collect content based on flags
434
+ needsTools = opts.tools || shouldShowSummary(opts);
435
+ needsResources = opts.resources || shouldShowSummary(opts);
436
+ needsPrompts = opts.prompts || shouldShowSummary(opts);
437
+ return [
438
+ 4,
439
+ Promise.all([
440
+ needsTools ? client.listTools().catch(function() {
441
+ return null;
442
+ }) : Promise.resolve(null),
443
+ needsResources ? client.listResources().catch(function() {
444
+ return null;
445
+ }) : Promise.resolve(null),
446
+ needsPrompts ? client.listPrompts().catch(function() {
447
+ return null;
448
+ }) : Promise.resolve(null)
449
+ ])
450
+ ];
451
+ case 3:
452
+ _ref = _sliced_to_array.apply(void 0, [
453
+ _state.sent(),
454
+ 3
455
+ ]), toolsResult = _ref[0], resourcesResult = _ref[1], promptsResult = _ref[2];
456
+ startupTime = Date.now() - start;
457
+ return [
458
+ 2,
459
+ {
460
+ name: serverName,
461
+ status: 'ready',
462
+ startupTime: startupTime,
463
+ error: undefined,
464
+ tools: (toolsResult === null || toolsResult === void 0 ? void 0 : toolsResult.tools) ? toolsResult.tools.map(function(t) {
465
+ return {
466
+ name: t.name,
467
+ description: t.description,
468
+ inputSchema: t.inputSchema
469
+ };
470
+ }) : undefined,
471
+ resources: (resourcesResult === null || resourcesResult === void 0 ? void 0 : resourcesResult.resources) ? resourcesResult.resources.map(function(r) {
472
+ return {
473
+ uri: r.uri,
474
+ name: r.name,
475
+ description: r.description,
476
+ mimeType: r.mimeType
477
+ };
478
+ }) : undefined,
479
+ prompts: (promptsResult === null || promptsResult === void 0 ? void 0 : promptsResult.prompts) ? promptsResult.prompts.map(function(p) {
480
+ return {
481
+ name: p.name,
482
+ description: p.description,
483
+ arguments: p.arguments
484
+ };
485
+ }) : undefined
486
+ }
487
+ ];
488
+ case 4:
489
+ error = _state.sent();
490
+ // Format error message with context
491
+ errorMessage = _instanceof(error, Error) ? error.message : String(error);
492
+ // For fetch errors, dig into the cause for more details
493
+ if (_instanceof(error, Error) && error.message === 'fetch failed' && 'cause' in error) {
494
+ cause = error.cause;
495
+ if ((cause === null || cause === void 0 ? void 0 : cause.code) === 'ECONNREFUSED') {
496
+ serverConfig1 = servers === null || servers === void 0 ? void 0 : servers[serverName];
497
+ url = serverConfig1 && 'url' in serverConfig1 ? serverConfig1.url : undefined;
498
+ errorMessage = url ? "Connection refused (server not running at ".concat(url, ")") : 'Connection refused (server not running)';
499
+ } else if (cause === null || cause === void 0 ? void 0 : cause.message) {
500
+ errorMessage = "".concat(error.message, ": ").concat(cause.message);
501
+ }
502
+ }
503
+ return [
504
+ 2,
505
+ {
506
+ name: serverName,
507
+ status: 'failed',
508
+ startupTime: undefined,
509
+ error: errorMessage,
510
+ tools: undefined,
511
+ resources: undefined,
512
+ prompts: undefined
513
+ }
514
+ ];
515
+ case 5:
516
+ return [
517
+ 2
518
+ ];
519
+ }
520
+ });
521
+ })();
522
+ }
523
+ /**
524
+ * Determine if we should show summary (no specific content flags).
525
+ */ function shouldShowSummary(opts) {
526
+ return !opts.tools && !opts.resources && !opts.prompts && !opts.health;
527
+ }
528
+ /**
529
+ * Truncate description to max length with ellipsis.
530
+ */ function truncateDescription(desc) {
531
+ var _maxLength = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : MAX_DESCRIPTION;
532
+ return desc;
533
+ // if (!desc || desc.length <= maxLength) {
534
+ // return desc;
535
+ // }
536
+ // return `${desc.slice(0, maxLength - 3)}...`;
537
+ }
538
+ /**
539
+ * Render verbose details for a tool (parameters with types and descriptions)
540
+ */ function renderToolVerbose(tool, indent) {
541
+ // Description is already shown inline, so skip it here
542
+ var schema = tool.inputSchema;
543
+ if (!schema || !schema.properties) {
544
+ return;
545
+ }
546
+ var properties = schema.properties;
547
+ var required = schema.required || [];
548
+ // Separate required and optional parameters
549
+ var requiredParams = [];
550
+ var optionalParams = [];
551
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
552
+ try {
553
+ for(var _iterator = Object.entries(properties)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
554
+ var _step_value = _sliced_to_array(_step.value, 2), name = _step_value[0], _prop = _step_value[1];
555
+ if (required.includes(name)) {
556
+ requiredParams.push(name);
557
+ } else {
558
+ optionalParams.push(name);
559
+ }
560
+ }
561
+ } catch (err) {
562
+ _didIteratorError = true;
563
+ _iteratorError = err;
564
+ } finally{
565
+ try {
566
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
567
+ _iterator.return();
568
+ }
569
+ } finally{
570
+ if (_didIteratorError) {
571
+ throw _iteratorError;
572
+ }
573
+ }
574
+ }
575
+ // Show required parameters
576
+ if (requiredParams.length > 0) {
577
+ console.log("".concat(indent, "Required Parameters:"));
578
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
579
+ try {
580
+ for(var _iterator1 = requiredParams[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
581
+ var name1 = _step1.value;
582
+ renderParameter(name1, properties[name1], "".concat(indent, " "));
583
+ }
584
+ } catch (err) {
585
+ _didIteratorError1 = true;
586
+ _iteratorError1 = err;
587
+ } finally{
588
+ try {
589
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
590
+ _iterator1.return();
591
+ }
592
+ } finally{
593
+ if (_didIteratorError1) {
594
+ throw _iteratorError1;
595
+ }
596
+ }
597
+ }
598
+ console.log('');
599
+ }
600
+ // Show optional parameters
601
+ if (optionalParams.length > 0) {
602
+ console.log("".concat(indent, "Optional Parameters:"));
603
+ var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
604
+ try {
605
+ for(var _iterator2 = optionalParams[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
606
+ var name2 = _step2.value;
607
+ renderParameter(name2, properties[name2], "".concat(indent, " "));
608
+ }
609
+ } catch (err) {
610
+ _didIteratorError2 = true;
611
+ _iteratorError2 = err;
612
+ } finally{
613
+ try {
614
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
615
+ _iterator2.return();
616
+ }
617
+ } finally{
618
+ if (_didIteratorError2) {
619
+ throw _iteratorError2;
620
+ }
621
+ }
622
+ }
623
+ console.log('');
624
+ }
625
+ }
626
+ /**
627
+ * Render verbose details for a resource
628
+ */ function renderResourceVerbose(resource, indent) {
629
+ // Description is already shown inline, so only show URI and MIME type
630
+ if (resource.uri) {
631
+ console.log("".concat(indent, "URI: ").concat(resource.uri));
632
+ }
633
+ if (resource.mimeType) {
634
+ console.log("".concat(indent, "MIME Type: ").concat(resource.mimeType));
635
+ }
636
+ if (resource.uri || resource.mimeType) {
637
+ console.log('');
638
+ }
639
+ }
640
+ /**
641
+ * Render verbose details for a prompt
642
+ */ function renderPromptVerbose(prompt, indent) {
643
+ // Description is already shown inline, so only show arguments
644
+ if (prompt.arguments && Array.isArray(prompt.arguments) && prompt.arguments.length > 0) {
645
+ console.log("".concat(indent, "Arguments:"));
646
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
647
+ try {
648
+ for(var _iterator = prompt.arguments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
649
+ var arg = _step.value;
650
+ var argObj = arg;
651
+ var name = argObj.name || 'unknown';
652
+ var description = argObj.description || '';
653
+ var required = argObj.required ? ' (required)' : ' (optional)';
654
+ var desc = description ? " - ".concat(description) : '';
655
+ console.log("".concat(indent, " ").concat(name).concat(required).concat(desc));
656
+ }
657
+ } catch (err) {
658
+ _didIteratorError = true;
659
+ _iteratorError = err;
660
+ } finally{
661
+ try {
662
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
663
+ _iterator.return();
664
+ }
665
+ } finally{
666
+ if (_didIteratorError) {
667
+ throw _iteratorError;
668
+ }
669
+ }
670
+ }
671
+ console.log('');
672
+ }
673
+ }
674
+ /**
675
+ * Render a single parameter with type and description
676
+ */ function renderParameter(name, prop, indent) {
677
+ var p = prop;
678
+ var type = getParameterType(prop);
679
+ var constraints = getParameterConstraints(prop);
680
+ var typeInfo = constraints ? "(".concat(type, ") ").concat(constraints) : "(".concat(type, ")");
681
+ var desc = p.description ? " - ".concat(p.description) : '';
682
+ console.log("".concat(indent).concat(name, " ").concat(typeInfo).concat(desc));
683
+ // Show enum options on separate line if present
684
+ if (p.enum && Array.isArray(p.enum)) {
685
+ console.log("".concat(indent, " Options: ").concat(p.enum.join(', ')));
686
+ }
687
+ }
688
+ /**
689
+ * Get human-readable type from JSON Schema property
690
+ */ function getParameterType(prop) {
691
+ var p = prop;
692
+ if (p.type) {
693
+ if (Array.isArray(p.type)) {
694
+ return p.type.join(' | ');
695
+ }
696
+ if (p.type === 'array' && p.items) {
697
+ var itemType = p.items.type || 'any';
698
+ return "array of ".concat(itemType);
699
+ }
700
+ return p.type;
701
+ }
702
+ if (p.anyOf) {
703
+ return p.anyOf.map(function(s) {
704
+ return s.type || 'any';
705
+ }).join(' | ');
706
+ }
707
+ if (p.enum) {
708
+ return 'enum';
709
+ }
710
+ return 'any';
711
+ }
712
+ /**
713
+ * Get parameter constraints (default, min, max, etc.)
714
+ */ function getParameterConstraints(prop) {
715
+ var p = prop;
716
+ var constraints = [];
717
+ if (p.default !== undefined) {
718
+ var defaultValue = typeof p.default === 'string' ? '"'.concat(p.default, '"') : String(p.default);
719
+ constraints.push("default: ".concat(defaultValue));
720
+ }
721
+ if (p.minimum !== undefined) {
722
+ constraints.push("min: ".concat(p.minimum));
723
+ }
724
+ if (p.maximum !== undefined) {
725
+ constraints.push("max: ".concat(p.maximum));
726
+ }
727
+ if (p.minLength !== undefined) {
728
+ constraints.push("minLength: ".concat(p.minLength));
729
+ }
730
+ if (p.maxLength !== undefined) {
731
+ constraints.push("maxLength: ".concat(p.maxLength));
732
+ }
733
+ if (p.minItems !== undefined) {
734
+ constraints.push("minItems: ".concat(p.minItems));
735
+ }
736
+ if (p.maxItems !== undefined) {
737
+ constraints.push("maxItems: ".concat(p.maxItems));
738
+ }
739
+ return constraints.length > 0 ? "[".concat(constraints.join(', '), "]") : '';
740
+ }
741
+ /**
742
+ * Output results as JSON.
743
+ */ function outputJSON(serverInfos) {
744
+ var output = {
745
+ servers: serverInfos.reduce(function(acc, info) {
746
+ acc[info.name] = {
747
+ status: info.status,
748
+ startupTime: info.startupTime ? "".concat((info.startupTime / 1000).toFixed(1), "s") : undefined,
749
+ error: info.error,
750
+ tools: info.tools,
751
+ resources: info.resources,
752
+ prompts: info.prompts
753
+ };
754
+ return acc;
755
+ }, {})
756
+ };
757
+ console.log(JSON.stringify(output, null, 2));
758
+ }
759
+ /**
760
+ * Output results in human-readable format.
761
+ */ function outputPretty(serverInfos, opts) {
762
+ var showSummary = shouldShowSummary(opts);
763
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
764
+ try {
765
+ for(var _iterator = serverInfos[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
766
+ var info = _step.value;
767
+ // Summary mode
768
+ if (showSummary) {
769
+ if (info.status === 'ready') {
770
+ var _info_tools, _info_resources, _info_prompts;
771
+ var toolCount = ((_info_tools = info.tools) === null || _info_tools === void 0 ? void 0 : _info_tools.length) || 0;
772
+ var resourceCount = ((_info_resources = info.resources) === null || _info_resources === void 0 ? void 0 : _info_resources.length) || 0;
773
+ var promptCount = ((_info_prompts = info.prompts) === null || _info_prompts === void 0 ? void 0 : _info_prompts.length) || 0;
774
+ var time = info.startupTime ? "(".concat((info.startupTime / 1000).toFixed(1), "s)") : '';
775
+ console.log("\uD83D\uDCE6 ".concat(info.name, ": ").concat(time));
776
+ // Show detailed list of tools
777
+ console.log("tools: ".concat(toolCount));
778
+ if (info.tools && info.tools.length > 0) {
779
+ for(var i = 0; i < info.tools.length; i++){
780
+ var tool = info.tools[i];
781
+ if (!tool) continue; // Array indexing can return undefined with noUncheckedIndexedAccess
782
+ var desc = tool.description ? " - ".concat(opts.verbose ? tool.description : truncateDescription(tool.description)) : '';
783
+ console.log("".concat(i + 1, ". ").concat(tool.name).concat(desc));
784
+ if (opts.verbose) {
785
+ renderToolVerbose(tool, ' ');
786
+ }
787
+ }
788
+ }
789
+ // Show detailed list of resources
790
+ console.log("resources: ".concat(resourceCount));
791
+ if (info.resources && info.resources.length > 0) {
792
+ for(var i1 = 0; i1 < info.resources.length; i1++){
793
+ var resource = info.resources[i1];
794
+ if (!resource) continue; // Array indexing can return undefined with noUncheckedIndexedAccess
795
+ var desc1 = resource.description ? " - ".concat(opts.verbose ? resource.description : truncateDescription(resource.description)) : '';
796
+ console.log("".concat(i1 + 1, ". ").concat(resource.name).concat(desc1));
797
+ if (opts.verbose) {
798
+ renderResourceVerbose(resource, ' ');
799
+ }
800
+ }
801
+ }
802
+ // Show detailed list of prompts
803
+ console.log("prompts: ".concat(promptCount));
804
+ if (info.prompts && info.prompts.length > 0) {
805
+ for(var i2 = 0; i2 < info.prompts.length; i2++){
806
+ var prompt = info.prompts[i2];
807
+ if (!prompt) continue; // Array indexing can return undefined with noUncheckedIndexedAccess
808
+ var desc2 = prompt.description ? " - ".concat(opts.verbose ? prompt.description : truncateDescription(prompt.description)) : '';
809
+ console.log("".concat(i2 + 1, ". ").concat(prompt.name).concat(desc2));
810
+ if (opts.verbose) {
811
+ renderPromptVerbose(prompt, ' ');
812
+ }
813
+ }
814
+ }
815
+ } else {
816
+ console.log("\uD83D\uDCE6 ".concat(info.name, ": ✗ failed - ").concat(info.error));
817
+ }
818
+ continue;
819
+ }
820
+ // Health mode
821
+ if (opts.health) {
822
+ if (info.status === 'ready') {
823
+ var time1 = info.startupTime ? "(".concat((info.startupTime / 1000).toFixed(1), "s)") : '';
824
+ console.log("✓ ".concat(info.name, " - ready ").concat(time1));
825
+ } else {
826
+ console.log("✗ ".concat(info.name, " - failed"));
827
+ console.log(" Error: ".concat(info.error));
828
+ }
829
+ continue;
830
+ }
831
+ // Tools mode
832
+ if (opts.tools) {
833
+ var _info_tools1;
834
+ console.log("\n\uD83D\uDCE6 ".concat(info.name, " (").concat(((_info_tools1 = info.tools) === null || _info_tools1 === void 0 ? void 0 : _info_tools1.length) || 0, " tools)"));
835
+ if (info.tools && info.tools.length > 0) {
836
+ for(var i3 = 0; i3 < info.tools.length; i3++){
837
+ var tool1 = info.tools[i3];
838
+ if (!tool1) continue; // Array indexing can return undefined with noUncheckedIndexedAccess
839
+ var desc3 = tool1.description ? " - ".concat(opts.verbose ? tool1.description : truncateDescription(tool1.description)) : '';
840
+ console.log(" ".concat(i3 + 1, ". ").concat(tool1.name).concat(desc3));
841
+ if (opts.verbose) {
842
+ renderToolVerbose(tool1, ' ');
843
+ }
844
+ }
845
+ }
846
+ }
847
+ // Resources mode
848
+ if (opts.resources) {
849
+ var _info_resources1;
850
+ console.log("\n\uD83D\uDCE6 ".concat(info.name, " (").concat(((_info_resources1 = info.resources) === null || _info_resources1 === void 0 ? void 0 : _info_resources1.length) || 0, " resources)"));
851
+ if (info.resources && info.resources.length > 0) {
852
+ for(var i4 = 0; i4 < info.resources.length; i4++){
853
+ var resource1 = info.resources[i4];
854
+ if (!resource1) continue; // Array indexing can return undefined with noUncheckedIndexedAccess
855
+ var desc4 = resource1.description ? " - ".concat(opts.verbose ? resource1.description : truncateDescription(resource1.description)) : '';
856
+ console.log(" ".concat(i4 + 1, ". ").concat(resource1.name).concat(desc4));
857
+ if (opts.verbose) {
858
+ renderResourceVerbose(resource1, ' ');
859
+ }
860
+ }
861
+ }
862
+ }
863
+ // Prompts mode
864
+ if (opts.prompts) {
865
+ var _info_prompts1;
866
+ console.log("\n\uD83D\uDCE6 ".concat(info.name, " (").concat(((_info_prompts1 = info.prompts) === null || _info_prompts1 === void 0 ? void 0 : _info_prompts1.length) || 0, " prompts)"));
867
+ if (info.prompts && info.prompts.length > 0) {
868
+ for(var i5 = 0; i5 < info.prompts.length; i5++){
869
+ var prompt1 = info.prompts[i5];
870
+ if (!prompt1) continue; // Array indexing can return undefined with noUncheckedIndexedAccess
871
+ var desc5 = prompt1.description ? " - ".concat(opts.verbose ? prompt1.description : truncateDescription(prompt1.description)) : '';
872
+ console.log(" ".concat(i5 + 1, ". ").concat(prompt1.name).concat(desc5));
873
+ if (opts.verbose) {
874
+ renderPromptVerbose(prompt1, ' ');
875
+ }
876
+ }
877
+ }
878
+ }
879
+ }
880
+ } catch (err) {
881
+ _didIteratorError = true;
882
+ _iteratorError = err;
883
+ } finally{
884
+ try {
885
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
886
+ _iterator.return();
887
+ }
888
+ } finally{
889
+ if (_didIteratorError) {
890
+ throw _iteratorError;
891
+ }
892
+ }
893
+ }
894
+ console.log('');
895
+ }
896
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }