@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.
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/bin/cli.js +5 -0
- package/dist/cjs/cli.d.cts +1 -0
- package/dist/cjs/cli.d.ts +1 -0
- package/dist/cjs/cli.js +576 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/commands/call-tool.d.cts +26 -0
- package/dist/cjs/commands/call-tool.d.ts +26 -0
- package/dist/cjs/commands/call-tool.js +362 -0
- package/dist/cjs/commands/call-tool.js.map +1 -0
- package/dist/cjs/commands/get-prompt.d.cts +26 -0
- package/dist/cjs/commands/get-prompt.d.ts +26 -0
- package/dist/cjs/commands/get-prompt.js +335 -0
- package/dist/cjs/commands/get-prompt.js.map +1 -0
- package/dist/cjs/commands/inspect.d.cts +35 -0
- package/dist/cjs/commands/inspect.d.ts +35 -0
- package/dist/cjs/commands/inspect.js +896 -0
- package/dist/cjs/commands/inspect.js.map +1 -0
- package/dist/cjs/commands/manifest/env-prompting.d.cts +21 -0
- package/dist/cjs/commands/manifest/env-prompting.d.ts +21 -0
- package/dist/cjs/commands/manifest/env-prompting.js +657 -0
- package/dist/cjs/commands/manifest/env-prompting.js.map +1 -0
- package/dist/cjs/commands/manifest/generate.d.cts +124 -0
- package/dist/cjs/commands/manifest/generate.d.ts +124 -0
- package/dist/cjs/commands/manifest/generate.js +2541 -0
- package/dist/cjs/commands/manifest/generate.js.map +1 -0
- package/dist/cjs/commands/manifest/index.d.cts +2 -0
- package/dist/cjs/commands/manifest/index.d.ts +2 -0
- package/dist/cjs/commands/manifest/index.js +229 -0
- package/dist/cjs/commands/manifest/index.js.map +1 -0
- package/dist/cjs/commands/manifest/metadata-reader.d.cts +71 -0
- package/dist/cjs/commands/manifest/metadata-reader.d.ts +71 -0
- package/dist/cjs/commands/manifest/metadata-reader.js +441 -0
- package/dist/cjs/commands/manifest/metadata-reader.js.map +1 -0
- package/dist/cjs/commands/manifest/validate.d.cts +1 -0
- package/dist/cjs/commands/manifest/validate.d.ts +1 -0
- package/dist/cjs/commands/manifest/validate.js +525 -0
- package/dist/cjs/commands/manifest/validate.js.map +1 -0
- package/dist/cjs/commands/read-resource.d.cts +24 -0
- package/dist/cjs/commands/read-resource.d.ts +24 -0
- package/dist/cjs/commands/read-resource.js +311 -0
- package/dist/cjs/commands/read-resource.js.map +1 -0
- package/dist/cjs/commands/search.d.cts +31 -0
- package/dist/cjs/commands/search.d.ts +31 -0
- package/dist/cjs/commands/search.js +464 -0
- package/dist/cjs/commands/search.js.map +1 -0
- package/dist/cjs/commands/up.d.cts +49 -0
- package/dist/cjs/commands/up.d.ts +49 -0
- package/dist/cjs/commands/up.js +235 -0
- package/dist/cjs/commands/up.js.map +1 -0
- package/dist/cjs/index.d.cts +7 -0
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.js +85 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/find-config.d.cts +14 -0
- package/dist/cjs/lib/find-config.d.ts +14 -0
- package/dist/cjs/lib/find-config.js +93 -0
- package/dist/cjs/lib/find-config.js.map +1 -0
- package/dist/cjs/lib/json-schema.d.cts +18 -0
- package/dist/cjs/lib/json-schema.d.ts +18 -0
- package/dist/cjs/lib/json-schema.js +306 -0
- package/dist/cjs/lib/json-schema.js.map +1 -0
- package/dist/cjs/lib/resolve-server-config.d.cts +50 -0
- package/dist/cjs/lib/resolve-server-config.d.ts +50 -0
- package/dist/cjs/lib/resolve-server-config.js +214 -0
- package/dist/cjs/lib/resolve-server-config.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/types.d.cts +21 -0
- package/dist/cjs/types.d.ts +21 -0
- package/dist/cjs/types.js +32 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/cli.d.ts +1 -0
- package/dist/esm/cli.js +129 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/commands/call-tool.d.ts +26 -0
- package/dist/esm/commands/call-tool.js +151 -0
- package/dist/esm/commands/call-tool.js.map +1 -0
- package/dist/esm/commands/get-prompt.d.ts +26 -0
- package/dist/esm/commands/get-prompt.js +118 -0
- package/dist/esm/commands/get-prompt.js.map +1 -0
- package/dist/esm/commands/inspect.d.ts +35 -0
- package/dist/esm/commands/inspect.js +438 -0
- package/dist/esm/commands/inspect.js.map +1 -0
- package/dist/esm/commands/manifest/env-prompting.d.ts +21 -0
- package/dist/esm/commands/manifest/env-prompting.js +213 -0
- package/dist/esm/commands/manifest/env-prompting.js.map +1 -0
- package/dist/esm/commands/manifest/generate.d.ts +124 -0
- package/dist/esm/commands/manifest/generate.js +1087 -0
- package/dist/esm/commands/manifest/generate.js.map +1 -0
- package/dist/esm/commands/manifest/index.d.ts +2 -0
- package/dist/esm/commands/manifest/index.js +23 -0
- package/dist/esm/commands/manifest/index.js.map +1 -0
- package/dist/esm/commands/manifest/metadata-reader.d.ts +71 -0
- package/dist/esm/commands/manifest/metadata-reader.js +143 -0
- package/dist/esm/commands/manifest/metadata-reader.js.map +1 -0
- package/dist/esm/commands/manifest/validate.d.ts +1 -0
- package/dist/esm/commands/manifest/validate.js +167 -0
- package/dist/esm/commands/manifest/validate.js.map +1 -0
- package/dist/esm/commands/read-resource.d.ts +24 -0
- package/dist/esm/commands/read-resource.js +95 -0
- package/dist/esm/commands/read-resource.js.map +1 -0
- package/dist/esm/commands/search.d.ts +31 -0
- package/dist/esm/commands/search.js +145 -0
- package/dist/esm/commands/search.js.map +1 -0
- package/dist/esm/commands/up.d.ts +49 -0
- package/dist/esm/commands/up.js +74 -0
- package/dist/esm/commands/up.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/find-config.d.ts +14 -0
- package/dist/esm/lib/find-config.js +42 -0
- package/dist/esm/lib/find-config.js.map +1 -0
- package/dist/esm/lib/json-schema.d.ts +18 -0
- package/dist/esm/lib/json-schema.js +66 -0
- package/dist/esm/lib/json-schema.js.map +1 -0
- package/dist/esm/lib/resolve-server-config.d.ts +50 -0
- package/dist/esm/lib/resolve-server-config.js +154 -0
- package/dist/esm/lib/resolve-server-config.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/types.d.ts +21 -0
- package/dist/esm/types.js +11 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +99 -0
- package/schemas/server.schema.json +489 -0
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* search.ts
|
|
3
|
+
*
|
|
4
|
+
* Search MCP server capabilities (tools, prompts, resources) without loading full schemas.
|
|
5
|
+
* Designed for agent discovery workflows.
|
|
6
|
+
*/ "use strict";
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
Object.defineProperty(exports, "searchCommand", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function() {
|
|
13
|
+
return searchCommand;
|
|
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
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
21
|
+
try {
|
|
22
|
+
var info = gen[key](arg);
|
|
23
|
+
var value = info.value;
|
|
24
|
+
} catch (error) {
|
|
25
|
+
reject(error);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (info.done) {
|
|
29
|
+
resolve(value);
|
|
30
|
+
} else {
|
|
31
|
+
Promise.resolve(value).then(_next, _throw);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function _async_to_generator(fn) {
|
|
35
|
+
return function() {
|
|
36
|
+
var self = this, args = arguments;
|
|
37
|
+
return new Promise(function(resolve, reject) {
|
|
38
|
+
var gen = fn.apply(self, args);
|
|
39
|
+
function _next(value) {
|
|
40
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
41
|
+
}
|
|
42
|
+
function _throw(err) {
|
|
43
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
44
|
+
}
|
|
45
|
+
_next(undefined);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function _instanceof(left, right) {
|
|
50
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
51
|
+
return !!right[Symbol.hasInstance](left);
|
|
52
|
+
} else {
|
|
53
|
+
return left instanceof right;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
57
|
+
if (typeof WeakMap !== "function") return null;
|
|
58
|
+
var cacheBabelInterop = new WeakMap();
|
|
59
|
+
var cacheNodeInterop = new WeakMap();
|
|
60
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
61
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
62
|
+
})(nodeInterop);
|
|
63
|
+
}
|
|
64
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
65
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
66
|
+
return obj;
|
|
67
|
+
}
|
|
68
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
69
|
+
return {
|
|
70
|
+
default: obj
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
74
|
+
if (cache && cache.has(obj)) {
|
|
75
|
+
return cache.get(obj);
|
|
76
|
+
}
|
|
77
|
+
var newObj = {
|
|
78
|
+
__proto__: null
|
|
79
|
+
};
|
|
80
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
81
|
+
for(var key in obj){
|
|
82
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
83
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
84
|
+
if (desc && (desc.get || desc.set)) {
|
|
85
|
+
Object.defineProperty(newObj, key, desc);
|
|
86
|
+
} else {
|
|
87
|
+
newObj[key] = obj[key];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
newObj.default = obj;
|
|
92
|
+
if (cache) {
|
|
93
|
+
cache.set(obj, newObj);
|
|
94
|
+
}
|
|
95
|
+
return newObj;
|
|
96
|
+
}
|
|
97
|
+
function _ts_generator(thisArg, body) {
|
|
98
|
+
var f, y, t, _ = {
|
|
99
|
+
label: 0,
|
|
100
|
+
sent: function() {
|
|
101
|
+
if (t[0] & 1) throw t[1];
|
|
102
|
+
return t[1];
|
|
103
|
+
},
|
|
104
|
+
trys: [],
|
|
105
|
+
ops: []
|
|
106
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
107
|
+
return d(g, "next", {
|
|
108
|
+
value: verb(0)
|
|
109
|
+
}), d(g, "throw", {
|
|
110
|
+
value: verb(1)
|
|
111
|
+
}), d(g, "return", {
|
|
112
|
+
value: verb(2)
|
|
113
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
114
|
+
value: function() {
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
117
|
+
}), g;
|
|
118
|
+
function verb(n) {
|
|
119
|
+
return function(v) {
|
|
120
|
+
return step([
|
|
121
|
+
n,
|
|
122
|
+
v
|
|
123
|
+
]);
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function step(op) {
|
|
127
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
128
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
129
|
+
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;
|
|
130
|
+
if (y = 0, t) op = [
|
|
131
|
+
op[0] & 2,
|
|
132
|
+
t.value
|
|
133
|
+
];
|
|
134
|
+
switch(op[0]){
|
|
135
|
+
case 0:
|
|
136
|
+
case 1:
|
|
137
|
+
t = op;
|
|
138
|
+
break;
|
|
139
|
+
case 4:
|
|
140
|
+
_.label++;
|
|
141
|
+
return {
|
|
142
|
+
value: op[1],
|
|
143
|
+
done: false
|
|
144
|
+
};
|
|
145
|
+
case 5:
|
|
146
|
+
_.label++;
|
|
147
|
+
y = op[1];
|
|
148
|
+
op = [
|
|
149
|
+
0
|
|
150
|
+
];
|
|
151
|
+
continue;
|
|
152
|
+
case 7:
|
|
153
|
+
op = _.ops.pop();
|
|
154
|
+
_.trys.pop();
|
|
155
|
+
continue;
|
|
156
|
+
default:
|
|
157
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
158
|
+
_ = 0;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
162
|
+
_.label = op[1];
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
166
|
+
_.label = t[1];
|
|
167
|
+
t = op;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
if (t && _.label < t[2]) {
|
|
171
|
+
_.label = t[2];
|
|
172
|
+
_.ops.push(op);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
if (t[2]) _.ops.pop();
|
|
176
|
+
_.trys.pop();
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
op = body.call(thisArg, _);
|
|
180
|
+
} catch (e) {
|
|
181
|
+
op = [
|
|
182
|
+
6,
|
|
183
|
+
e
|
|
184
|
+
];
|
|
185
|
+
y = 0;
|
|
186
|
+
} finally{
|
|
187
|
+
f = t = 0;
|
|
188
|
+
}
|
|
189
|
+
if (op[0] & 5) throw op[1];
|
|
190
|
+
return {
|
|
191
|
+
value: op[0] ? op[1] : void 0,
|
|
192
|
+
done: true
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function searchCommand(_0) {
|
|
197
|
+
return _async_to_generator(function(query) {
|
|
198
|
+
var opts, registry, _ref, _raw_mcpServers, _opts_limit, _opts_threshold, _searchOptions_servers, configPath, raw, servers, configDir, searchOptions, serverNames, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, serverName, error, err, response, _;
|
|
199
|
+
var _arguments = arguments;
|
|
200
|
+
return _ts_generator(this, function(_state) {
|
|
201
|
+
switch(_state.label){
|
|
202
|
+
case 0:
|
|
203
|
+
opts = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
204
|
+
_state.label = 1;
|
|
205
|
+
case 1:
|
|
206
|
+
_state.trys.push([
|
|
207
|
+
1,
|
|
208
|
+
,
|
|
209
|
+
13,
|
|
210
|
+
18
|
|
211
|
+
]);
|
|
212
|
+
configPath = (0, _findconfigts.findConfigPath)(opts.config);
|
|
213
|
+
raw = JSON.parse(_fs.readFileSync(configPath, 'utf8'));
|
|
214
|
+
servers = (_ref = (_raw_mcpServers = raw.mcpServers) !== null && _raw_mcpServers !== void 0 ? _raw_mcpServers : raw.servers) !== null && _ref !== void 0 ? _ref : raw;
|
|
215
|
+
configDir = _path.dirname(configPath);
|
|
216
|
+
// Parse options
|
|
217
|
+
searchOptions = {
|
|
218
|
+
types: parseTypes(opts.types),
|
|
219
|
+
servers: parseServers(opts.servers),
|
|
220
|
+
searchFields: parseFields(opts.fields),
|
|
221
|
+
limit: (_opts_limit = opts.limit) !== null && _opts_limit !== void 0 ? _opts_limit : 20,
|
|
222
|
+
threshold: (_opts_threshold = opts.threshold) !== null && _opts_threshold !== void 0 ? _opts_threshold : 0
|
|
223
|
+
};
|
|
224
|
+
// Create registry (spawns stdio servers, registers HTTP servers)
|
|
225
|
+
// In attach mode, don't spawn - just register for connection
|
|
226
|
+
registry = (0, _client.createServerRegistry)(servers, {
|
|
227
|
+
cwd: configDir,
|
|
228
|
+
dialects: opts.attach ? [] : [
|
|
229
|
+
'servers',
|
|
230
|
+
'start'
|
|
231
|
+
]
|
|
232
|
+
});
|
|
233
|
+
// Connect to all servers (or filtered subset)
|
|
234
|
+
serverNames = (_searchOptions_servers = searchOptions.servers) !== null && _searchOptions_servers !== void 0 ? _searchOptions_servers : Object.keys(servers || {});
|
|
235
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
236
|
+
_state.label = 2;
|
|
237
|
+
case 2:
|
|
238
|
+
_state.trys.push([
|
|
239
|
+
2,
|
|
240
|
+
9,
|
|
241
|
+
10,
|
|
242
|
+
11
|
|
243
|
+
]);
|
|
244
|
+
_iterator = serverNames[Symbol.iterator]();
|
|
245
|
+
_state.label = 3;
|
|
246
|
+
case 3:
|
|
247
|
+
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
248
|
+
3,
|
|
249
|
+
8
|
|
250
|
+
];
|
|
251
|
+
serverName = _step.value;
|
|
252
|
+
_state.label = 4;
|
|
253
|
+
case 4:
|
|
254
|
+
_state.trys.push([
|
|
255
|
+
4,
|
|
256
|
+
6,
|
|
257
|
+
,
|
|
258
|
+
7
|
|
259
|
+
]);
|
|
260
|
+
return [
|
|
261
|
+
4,
|
|
262
|
+
registry.connect(serverName)
|
|
263
|
+
];
|
|
264
|
+
case 5:
|
|
265
|
+
_state.sent();
|
|
266
|
+
return [
|
|
267
|
+
3,
|
|
268
|
+
7
|
|
269
|
+
];
|
|
270
|
+
case 6:
|
|
271
|
+
error = _state.sent();
|
|
272
|
+
// Log connection errors but continue with other servers
|
|
273
|
+
if (!opts.json) {
|
|
274
|
+
console.error("⚠ Failed to connect to ".concat(serverName, ": ").concat(_instanceof(error, Error) ? error.message : String(error)));
|
|
275
|
+
}
|
|
276
|
+
return [
|
|
277
|
+
3,
|
|
278
|
+
7
|
|
279
|
+
];
|
|
280
|
+
case 7:
|
|
281
|
+
_iteratorNormalCompletion = true;
|
|
282
|
+
return [
|
|
283
|
+
3,
|
|
284
|
+
3
|
|
285
|
+
];
|
|
286
|
+
case 8:
|
|
287
|
+
return [
|
|
288
|
+
3,
|
|
289
|
+
11
|
|
290
|
+
];
|
|
291
|
+
case 9:
|
|
292
|
+
err = _state.sent();
|
|
293
|
+
_didIteratorError = true;
|
|
294
|
+
_iteratorError = err;
|
|
295
|
+
return [
|
|
296
|
+
3,
|
|
297
|
+
11
|
|
298
|
+
];
|
|
299
|
+
case 10:
|
|
300
|
+
try {
|
|
301
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
302
|
+
_iterator.return();
|
|
303
|
+
}
|
|
304
|
+
} finally{
|
|
305
|
+
if (_didIteratorError) {
|
|
306
|
+
throw _iteratorError;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return [
|
|
310
|
+
7
|
|
311
|
+
];
|
|
312
|
+
case 11:
|
|
313
|
+
return [
|
|
314
|
+
4,
|
|
315
|
+
registry.searchCapabilities(query, searchOptions)
|
|
316
|
+
];
|
|
317
|
+
case 12:
|
|
318
|
+
response = _state.sent();
|
|
319
|
+
// Output results
|
|
320
|
+
if (opts.json) {
|
|
321
|
+
outputJSON(response);
|
|
322
|
+
} else {
|
|
323
|
+
outputPretty(response);
|
|
324
|
+
}
|
|
325
|
+
return [
|
|
326
|
+
3,
|
|
327
|
+
18
|
|
328
|
+
];
|
|
329
|
+
case 13:
|
|
330
|
+
if (!registry) return [
|
|
331
|
+
3,
|
|
332
|
+
17
|
|
333
|
+
];
|
|
334
|
+
_state.label = 14;
|
|
335
|
+
case 14:
|
|
336
|
+
_state.trys.push([
|
|
337
|
+
14,
|
|
338
|
+
16,
|
|
339
|
+
,
|
|
340
|
+
17
|
|
341
|
+
]);
|
|
342
|
+
return [
|
|
343
|
+
4,
|
|
344
|
+
registry.close()
|
|
345
|
+
];
|
|
346
|
+
case 15:
|
|
347
|
+
_state.sent();
|
|
348
|
+
return [
|
|
349
|
+
3,
|
|
350
|
+
17
|
|
351
|
+
];
|
|
352
|
+
case 16:
|
|
353
|
+
_ = _state.sent();
|
|
354
|
+
return [
|
|
355
|
+
3,
|
|
356
|
+
17
|
|
357
|
+
];
|
|
358
|
+
case 17:
|
|
359
|
+
return [
|
|
360
|
+
7
|
|
361
|
+
];
|
|
362
|
+
case 18:
|
|
363
|
+
return [
|
|
364
|
+
2
|
|
365
|
+
];
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
}).apply(this, arguments);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Parse comma-separated types into CapabilityType array
|
|
372
|
+
*/ function parseTypes(typesStr) {
|
|
373
|
+
if (!typesStr) return undefined;
|
|
374
|
+
var validTypes = [
|
|
375
|
+
'tool',
|
|
376
|
+
'prompt',
|
|
377
|
+
'resource'
|
|
378
|
+
];
|
|
379
|
+
var parsed = typesStr.split(',').map(function(t) {
|
|
380
|
+
return t.trim().toLowerCase();
|
|
381
|
+
});
|
|
382
|
+
var invalid = parsed.filter(function(t) {
|
|
383
|
+
return !validTypes.includes(t);
|
|
384
|
+
});
|
|
385
|
+
if (invalid.length > 0) {
|
|
386
|
+
throw new Error("Invalid types: ".concat(invalid.join(', '), ". Valid types: ").concat(validTypes.join(', ')));
|
|
387
|
+
}
|
|
388
|
+
return parsed;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Parse comma-separated server names
|
|
392
|
+
*/ function parseServers(serversStr) {
|
|
393
|
+
if (!serversStr) return undefined;
|
|
394
|
+
return serversStr.split(',').map(function(s) {
|
|
395
|
+
return s.trim();
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Parse comma-separated search fields
|
|
400
|
+
*/ function parseFields(fieldsStr) {
|
|
401
|
+
if (!fieldsStr) return undefined;
|
|
402
|
+
var validFields = [
|
|
403
|
+
'name',
|
|
404
|
+
'description',
|
|
405
|
+
'schema',
|
|
406
|
+
'server'
|
|
407
|
+
];
|
|
408
|
+
var parsed = fieldsStr.split(',').map(function(f) {
|
|
409
|
+
return f.trim().toLowerCase();
|
|
410
|
+
});
|
|
411
|
+
var invalid = parsed.filter(function(f) {
|
|
412
|
+
return !validFields.includes(f);
|
|
413
|
+
});
|
|
414
|
+
if (invalid.length > 0) {
|
|
415
|
+
throw new Error("Invalid fields: ".concat(invalid.join(', '), ". Valid fields: ").concat(validFields.join(', ')));
|
|
416
|
+
}
|
|
417
|
+
return parsed;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Output results as JSON
|
|
421
|
+
*/ function outputJSON(response) {
|
|
422
|
+
console.log(JSON.stringify(response, null, 2));
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Output results in human-readable format
|
|
426
|
+
*/ function outputPretty(response) {
|
|
427
|
+
if (response.results.length === 0) {
|
|
428
|
+
console.log('No results found for "'.concat(response.query, '"'));
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
console.log("Found ".concat(response.total, " result").concat(response.total !== 1 ? 's' : '', ' for "').concat(response.query, '"').concat(response.total > response.results.length ? " (showing ".concat(response.results.length, ")") : '', ":\n"));
|
|
432
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
433
|
+
try {
|
|
434
|
+
for(var _iterator = response.results[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
435
|
+
var result = _step.value;
|
|
436
|
+
var typeIcon = result.type === 'tool' ? '🔧' : result.type === 'prompt' ? '💬' : '📄';
|
|
437
|
+
var score = (result.score * 100).toFixed(0);
|
|
438
|
+
console.log("".concat(typeIcon, " ").concat(result.name, " [").concat(result.type, "] (").concat(score, "%)"));
|
|
439
|
+
console.log(" Server: ".concat(result.server));
|
|
440
|
+
if (result.description) {
|
|
441
|
+
var desc = result.description.length > 100 ? "".concat(result.description.slice(0, 97), "...") : result.description;
|
|
442
|
+
console.log(" ".concat(desc));
|
|
443
|
+
}
|
|
444
|
+
if (result.matchedOn.length > 0) {
|
|
445
|
+
console.log(" Matched: ".concat(result.matchedOn.join(', ')));
|
|
446
|
+
}
|
|
447
|
+
console.log('');
|
|
448
|
+
}
|
|
449
|
+
} catch (err) {
|
|
450
|
+
_didIteratorError = true;
|
|
451
|
+
_iteratorError = err;
|
|
452
|
+
} finally{
|
|
453
|
+
try {
|
|
454
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
455
|
+
_iterator.return();
|
|
456
|
+
}
|
|
457
|
+
} finally{
|
|
458
|
+
if (_didIteratorError) {
|
|
459
|
+
throw _iteratorError;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
/* 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; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/cli/src/commands/search.ts"],"sourcesContent":["/**\n * search.ts\n *\n * Search MCP server capabilities (tools, prompts, resources) without loading full schemas.\n * Designed for agent discovery workflows.\n */\n\nimport { type CapabilityType, createServerRegistry, type SearchField, type SearchOptions, type SearchResponse, type ServerRegistry } from '@mcp-z/client';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { findConfigPath } from '../lib/find-config.ts';\n\nexport interface SearchCommandOptions {\n config?: string;\n servers?: string;\n types?: string;\n fields?: string;\n limit?: number;\n threshold?: number;\n json?: boolean;\n attach?: boolean;\n}\n\n/**\n * Main search command implementation.\n *\n * @param query - The search query string\n * @param opts - Search options from CLI flags\n *\n * @example\n * // Search for email-related capabilities\n * await searchCommand('send email', {});\n *\n * @example\n * // Search only tools in specific servers\n * await searchCommand('spreadsheet', { types: 'tool', servers: 'sheets,drive' });\n */\nexport async function searchCommand(query: string, opts: SearchCommandOptions = {}): Promise<void> {\n let registry: ServerRegistry | undefined;\n\n try {\n const configPath = findConfigPath(opts.config);\n const raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));\n const servers = raw.mcpServers ?? raw.servers ?? raw;\n const configDir = path.dirname(configPath);\n\n // Parse options\n const searchOptions: SearchOptions = {\n types: parseTypes(opts.types),\n servers: parseServers(opts.servers),\n searchFields: parseFields(opts.fields),\n limit: opts.limit ?? 20,\n threshold: opts.threshold ?? 0,\n };\n\n // Create registry (spawns stdio servers, registers HTTP servers)\n // In attach mode, don't spawn - just register for connection\n registry = createServerRegistry(servers, {\n cwd: configDir,\n dialects: opts.attach ? [] : ['servers', 'start'], // Empty dialects = no spawning\n });\n\n // Connect to all servers (or filtered subset)\n const serverNames = searchOptions.servers ?? Object.keys(servers || {});\n\n for (const serverName of serverNames) {\n try {\n await registry.connect(serverName);\n } catch (error) {\n // Log connection errors but continue with other servers\n if (!opts.json) {\n console.error(`⚠ Failed to connect to ${serverName}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n\n // Search across connected clients\n const response = await registry.searchCapabilities(query, searchOptions);\n\n // Output results\n if (opts.json) {\n outputJSON(response);\n } else {\n outputPretty(response);\n }\n } finally {\n // Cleanup - registry.close() handles all clients and servers\n if (registry) {\n try {\n await registry.close();\n } catch (_) {\n // Ignore close errors\n }\n }\n }\n}\n\n/**\n * Parse comma-separated types into CapabilityType array\n */\nfunction parseTypes(typesStr?: string): CapabilityType[] | undefined {\n if (!typesStr) return undefined;\n\n const validTypes: CapabilityType[] = ['tool', 'prompt', 'resource'];\n const parsed = typesStr.split(',').map((t) => t.trim().toLowerCase()) as CapabilityType[];\n\n const invalid = parsed.filter((t) => !validTypes.includes(t));\n if (invalid.length > 0) {\n throw new Error(`Invalid types: ${invalid.join(', ')}. Valid types: ${validTypes.join(', ')}`);\n }\n\n return parsed;\n}\n\n/**\n * Parse comma-separated server names\n */\nfunction parseServers(serversStr?: string): string[] | undefined {\n if (!serversStr) return undefined;\n return serversStr.split(',').map((s) => s.trim());\n}\n\n/**\n * Parse comma-separated search fields\n */\nfunction parseFields(fieldsStr?: string): SearchField[] | undefined {\n if (!fieldsStr) return undefined;\n\n const validFields: SearchField[] = ['name', 'description', 'schema', 'server'];\n const parsed = fieldsStr.split(',').map((f) => f.trim().toLowerCase()) as SearchField[];\n\n const invalid = parsed.filter((f) => !validFields.includes(f));\n if (invalid.length > 0) {\n throw new Error(`Invalid fields: ${invalid.join(', ')}. Valid fields: ${validFields.join(', ')}`);\n }\n\n return parsed;\n}\n\n/**\n * Output results as JSON\n */\nfunction outputJSON(response: SearchResponse): void {\n console.log(JSON.stringify(response, null, 2));\n}\n\n/**\n * Output results in human-readable format\n */\nfunction outputPretty(response: SearchResponse): void {\n if (response.results.length === 0) {\n console.log(`No results found for \"${response.query}\"`);\n return;\n }\n\n console.log(`Found ${response.total} result${response.total !== 1 ? 's' : ''} for \"${response.query}\"${response.total > response.results.length ? ` (showing ${response.results.length})` : ''}:\\n`);\n\n for (const result of response.results) {\n const typeIcon = result.type === 'tool' ? '🔧' : result.type === 'prompt' ? '💬' : '📄';\n const score = (result.score * 100).toFixed(0);\n\n console.log(`${typeIcon} ${result.name} [${result.type}] (${score}%)`);\n console.log(` Server: ${result.server}`);\n\n if (result.description) {\n const desc = result.description.length > 100 ? `${result.description.slice(0, 97)}...` : result.description;\n console.log(` ${desc}`);\n }\n\n if (result.matchedOn.length > 0) {\n console.log(` Matched: ${result.matchedOn.join(', ')}`);\n }\n\n console.log('');\n }\n}\n"],"names":["searchCommand","query","opts","registry","raw","searchOptions","configPath","servers","configDir","serverNames","serverName","error","response","_","findConfigPath","config","JSON","parse","fs","readFileSync","mcpServers","path","dirname","types","parseTypes","parseServers","searchFields","parseFields","fields","limit","threshold","createServerRegistry","cwd","dialects","attach","Object","keys","connect","json","console","Error","message","String","searchCapabilities","outputJSON","outputPretty","close","typesStr","undefined","validTypes","parsed","split","map","t","trim","toLowerCase","invalid","filter","includes","length","join","serversStr","s","fieldsStr","validFields","f","log","stringify","results","total","result","typeIcon","type","score","toFixed","name","server","description","desc","slice","matchedOn"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ServerRegistry } from '@mcp-z/client';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration options for the upCommand function
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export interface UpOptions {
|
|
7
|
+
/** Optional path to custom .mcp.json configuration file */
|
|
8
|
+
config?: string;
|
|
9
|
+
/** Start only stdio servers (Claude Code compatible mode) */
|
|
10
|
+
stdioOnly?: boolean;
|
|
11
|
+
/** Start only HTTP servers with start blocks (for Claude Code Desktop) */
|
|
12
|
+
httpOnly?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* MCP server configuration entry per MCP specification.
|
|
16
|
+
*
|
|
17
|
+
* Supports two transport types:
|
|
18
|
+
* - stdio (default if no type): spawned process with stdin/stdout
|
|
19
|
+
* - http: remote HTTP server
|
|
20
|
+
*
|
|
21
|
+
* Transport can be inferred from URL protocol:
|
|
22
|
+
* - http:// or https:// → http
|
|
23
|
+
*
|
|
24
|
+
* @see https://modelcontextprotocol.io/specification/2025-06-18/basic/transports
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Start a cluster of MCP servers from a configuration file or object.
|
|
28
|
+
*
|
|
29
|
+
* @param opts - Configuration options
|
|
30
|
+
* @param opts.config - Optional path to custom .mcp.json file
|
|
31
|
+
* @returns ServerRegistry with servers map, config, connect method, and close function
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Auto-discover .mcp.json in current directory
|
|
35
|
+
* const registry = await upCommand();
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Load from specific config
|
|
39
|
+
* const registry = await upCommand({ config: '/path/to/.mcp.json' });
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* // Use in-memory config
|
|
43
|
+
* const registry = await upCommand({
|
|
44
|
+
* mcpServers: {
|
|
45
|
+
* 'echo-stdio': { command: 'node', args: ['test/lib/servers/echo-stdio.ts'] }
|
|
46
|
+
* }
|
|
47
|
+
* });
|
|
48
|
+
*/
|
|
49
|
+
export declare function upCommand(opts?: UpOptions): Promise<ServerRegistry>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ServerRegistry } from '@mcp-z/client';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration options for the upCommand function
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export interface UpOptions {
|
|
7
|
+
/** Optional path to custom .mcp.json configuration file */
|
|
8
|
+
config?: string;
|
|
9
|
+
/** Start only stdio servers (Claude Code compatible mode) */
|
|
10
|
+
stdioOnly?: boolean;
|
|
11
|
+
/** Start only HTTP servers with start blocks (for Claude Code Desktop) */
|
|
12
|
+
httpOnly?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* MCP server configuration entry per MCP specification.
|
|
16
|
+
*
|
|
17
|
+
* Supports two transport types:
|
|
18
|
+
* - stdio (default if no type): spawned process with stdin/stdout
|
|
19
|
+
* - http: remote HTTP server
|
|
20
|
+
*
|
|
21
|
+
* Transport can be inferred from URL protocol:
|
|
22
|
+
* - http:// or https:// → http
|
|
23
|
+
*
|
|
24
|
+
* @see https://modelcontextprotocol.io/specification/2025-06-18/basic/transports
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Start a cluster of MCP servers from a configuration file or object.
|
|
28
|
+
*
|
|
29
|
+
* @param opts - Configuration options
|
|
30
|
+
* @param opts.config - Optional path to custom .mcp.json file
|
|
31
|
+
* @returns ServerRegistry with servers map, config, connect method, and close function
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Auto-discover .mcp.json in current directory
|
|
35
|
+
* const registry = await upCommand();
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Load from specific config
|
|
39
|
+
* const registry = await upCommand({ config: '/path/to/.mcp.json' });
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* // Use in-memory config
|
|
43
|
+
* const registry = await upCommand({
|
|
44
|
+
* mcpServers: {
|
|
45
|
+
* 'echo-stdio': { command: 'node', args: ['test/lib/servers/echo-stdio.ts'] }
|
|
46
|
+
* }
|
|
47
|
+
* });
|
|
48
|
+
*/
|
|
49
|
+
export declare function upCommand(opts?: UpOptions): Promise<ServerRegistry>;
|