@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,362 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* call-tool.ts
|
|
3
|
+
*
|
|
4
|
+
* Execute MCP tools from the command line.
|
|
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, "callToolCommand", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function() {
|
|
13
|
+
return callToolCommand;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
var _client = require("@mcp-z/client");
|
|
17
|
+
var _resolveserverconfigts = require("../lib/resolve-server-config.js");
|
|
18
|
+
var _typests = require("../types.js");
|
|
19
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
20
|
+
try {
|
|
21
|
+
var info = gen[key](arg);
|
|
22
|
+
var value = info.value;
|
|
23
|
+
} catch (error) {
|
|
24
|
+
reject(error);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (info.done) {
|
|
28
|
+
resolve(value);
|
|
29
|
+
} else {
|
|
30
|
+
Promise.resolve(value).then(_next, _throw);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function _async_to_generator(fn) {
|
|
34
|
+
return function() {
|
|
35
|
+
var self = this, args = arguments;
|
|
36
|
+
return new Promise(function(resolve, reject) {
|
|
37
|
+
var gen = fn.apply(self, args);
|
|
38
|
+
function _next(value) {
|
|
39
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
40
|
+
}
|
|
41
|
+
function _throw(err) {
|
|
42
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
43
|
+
}
|
|
44
|
+
_next(undefined);
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function _define_property(obj, key, value) {
|
|
49
|
+
if (key in obj) {
|
|
50
|
+
Object.defineProperty(obj, key, {
|
|
51
|
+
value: value,
|
|
52
|
+
enumerable: true,
|
|
53
|
+
configurable: true,
|
|
54
|
+
writable: true
|
|
55
|
+
});
|
|
56
|
+
} else {
|
|
57
|
+
obj[key] = value;
|
|
58
|
+
}
|
|
59
|
+
return obj;
|
|
60
|
+
}
|
|
61
|
+
function _instanceof(left, right) {
|
|
62
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
63
|
+
return !!right[Symbol.hasInstance](left);
|
|
64
|
+
} else {
|
|
65
|
+
return left instanceof right;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function _type_of(obj) {
|
|
69
|
+
"@swc/helpers - typeof";
|
|
70
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
71
|
+
}
|
|
72
|
+
function _ts_generator(thisArg, body) {
|
|
73
|
+
var f, y, t, _ = {
|
|
74
|
+
label: 0,
|
|
75
|
+
sent: function() {
|
|
76
|
+
if (t[0] & 1) throw t[1];
|
|
77
|
+
return t[1];
|
|
78
|
+
},
|
|
79
|
+
trys: [],
|
|
80
|
+
ops: []
|
|
81
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
82
|
+
return d(g, "next", {
|
|
83
|
+
value: verb(0)
|
|
84
|
+
}), d(g, "throw", {
|
|
85
|
+
value: verb(1)
|
|
86
|
+
}), d(g, "return", {
|
|
87
|
+
value: verb(2)
|
|
88
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
89
|
+
value: function() {
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
}), g;
|
|
93
|
+
function verb(n) {
|
|
94
|
+
return function(v) {
|
|
95
|
+
return step([
|
|
96
|
+
n,
|
|
97
|
+
v
|
|
98
|
+
]);
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function step(op) {
|
|
102
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
103
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
104
|
+
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;
|
|
105
|
+
if (y = 0, t) op = [
|
|
106
|
+
op[0] & 2,
|
|
107
|
+
t.value
|
|
108
|
+
];
|
|
109
|
+
switch(op[0]){
|
|
110
|
+
case 0:
|
|
111
|
+
case 1:
|
|
112
|
+
t = op;
|
|
113
|
+
break;
|
|
114
|
+
case 4:
|
|
115
|
+
_.label++;
|
|
116
|
+
return {
|
|
117
|
+
value: op[1],
|
|
118
|
+
done: false
|
|
119
|
+
};
|
|
120
|
+
case 5:
|
|
121
|
+
_.label++;
|
|
122
|
+
y = op[1];
|
|
123
|
+
op = [
|
|
124
|
+
0
|
|
125
|
+
];
|
|
126
|
+
continue;
|
|
127
|
+
case 7:
|
|
128
|
+
op = _.ops.pop();
|
|
129
|
+
_.trys.pop();
|
|
130
|
+
continue;
|
|
131
|
+
default:
|
|
132
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
133
|
+
_ = 0;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
137
|
+
_.label = op[1];
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
141
|
+
_.label = t[1];
|
|
142
|
+
t = op;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
if (t && _.label < t[2]) {
|
|
146
|
+
_.label = t[2];
|
|
147
|
+
_.ops.push(op);
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
if (t[2]) _.ops.pop();
|
|
151
|
+
_.trys.pop();
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
op = body.call(thisArg, _);
|
|
155
|
+
} catch (e) {
|
|
156
|
+
op = [
|
|
157
|
+
6,
|
|
158
|
+
e
|
|
159
|
+
];
|
|
160
|
+
y = 0;
|
|
161
|
+
} finally{
|
|
162
|
+
f = t = 0;
|
|
163
|
+
}
|
|
164
|
+
if (op[0] & 5) throw op[1];
|
|
165
|
+
return {
|
|
166
|
+
value: op[0] ? op[1] : void 0,
|
|
167
|
+
done: true
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function callToolCommand(opts) {
|
|
172
|
+
return _async_to_generator(function() {
|
|
173
|
+
var registry, client, _resolveServerConfig, serverName, serverConfig, configDir, start, elapsed, toolArgs, parsed, response, error, parsedResult, error1, _;
|
|
174
|
+
return _ts_generator(this, function(_state) {
|
|
175
|
+
switch(_state.label){
|
|
176
|
+
case 0:
|
|
177
|
+
_state.trys.push([
|
|
178
|
+
0,
|
|
179
|
+
6,
|
|
180
|
+
7,
|
|
181
|
+
12
|
|
182
|
+
]);
|
|
183
|
+
// 1. Resolve server configuration (from config file or inline options)
|
|
184
|
+
_resolveServerConfig = (0, _resolveserverconfigts.resolveServerConfig)(opts), serverName = _resolveServerConfig.serverName, serverConfig = _resolveServerConfig.serverConfig, configDir = _resolveServerConfig.configDir;
|
|
185
|
+
// 2. Create registry and connect
|
|
186
|
+
start = Date.now();
|
|
187
|
+
if ((0, _typests.isHttpServer)(serverConfig)) {
|
|
188
|
+
// HTTP server - no spawning needed
|
|
189
|
+
if (!opts.json) {
|
|
190
|
+
console.log("\uD83D\uDD17 Connecting to ".concat(serverName, "..."));
|
|
191
|
+
}
|
|
192
|
+
} else {
|
|
193
|
+
// Stdio server - will be spawned
|
|
194
|
+
if (!opts.json) {
|
|
195
|
+
console.log("\uD83D\uDE80 Spawning ".concat(serverName, " server..."));
|
|
196
|
+
}
|
|
197
|
+
if (!serverConfig.command) {
|
|
198
|
+
throw new Error("Stdio server ".concat(serverName, ' missing required "command" field'));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Create registry (spawns stdio servers, registers HTTP servers)
|
|
202
|
+
registry = (0, _client.createServerRegistry)(_define_property({}, serverName, serverConfig), {
|
|
203
|
+
cwd: configDir
|
|
204
|
+
});
|
|
205
|
+
return [
|
|
206
|
+
4,
|
|
207
|
+
registry.connect(serverName)
|
|
208
|
+
];
|
|
209
|
+
case 1:
|
|
210
|
+
client = _state.sent();
|
|
211
|
+
if (!(0, _typests.isHttpServer)(serverConfig) && !opts.json) {
|
|
212
|
+
elapsed = ((Date.now() - start) / 1000).toFixed(1);
|
|
213
|
+
console.log("ā Server ready in ".concat(elapsed, "s\n"));
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
parsed = JSON.parse(opts.args);
|
|
217
|
+
if ((typeof parsed === "undefined" ? "undefined" : _type_of(parsed)) !== 'object' || parsed === null) {
|
|
218
|
+
throw new Error('Arguments must be a JSON object');
|
|
219
|
+
}
|
|
220
|
+
toolArgs = parsed;
|
|
221
|
+
} catch (error) {
|
|
222
|
+
throw new Error("Failed to parse tool arguments as JSON: ".concat(_instanceof(error, Error) ? error.message : String(error), "\n\nProvided args: ").concat(opts.args));
|
|
223
|
+
}
|
|
224
|
+
// 6. Execute tool
|
|
225
|
+
if (!opts.json) {
|
|
226
|
+
console.log("\uD83D\uDD27 Calling ".concat(opts.tool, "..."));
|
|
227
|
+
}
|
|
228
|
+
_state.label = 2;
|
|
229
|
+
case 2:
|
|
230
|
+
_state.trys.push([
|
|
231
|
+
2,
|
|
232
|
+
4,
|
|
233
|
+
,
|
|
234
|
+
5
|
|
235
|
+
]);
|
|
236
|
+
return [
|
|
237
|
+
4,
|
|
238
|
+
client.callTool(opts.tool, toolArgs)
|
|
239
|
+
];
|
|
240
|
+
case 3:
|
|
241
|
+
response = _state.sent();
|
|
242
|
+
return [
|
|
243
|
+
3,
|
|
244
|
+
5
|
|
245
|
+
];
|
|
246
|
+
case 4:
|
|
247
|
+
error = _state.sent();
|
|
248
|
+
handleToolError(error, opts);
|
|
249
|
+
throw error;
|
|
250
|
+
case 5:
|
|
251
|
+
parsedResult = parseToolResult(response);
|
|
252
|
+
if (parsedResult !== undefined) {
|
|
253
|
+
// Success case
|
|
254
|
+
if (opts.json) {
|
|
255
|
+
// JSON output mode
|
|
256
|
+
console.log(JSON.stringify(parsedResult, null, 2));
|
|
257
|
+
} else {
|
|
258
|
+
// Human-readable output
|
|
259
|
+
console.log("ā
".concat(opts.tool, " succeeded\n"));
|
|
260
|
+
console.log('Result:');
|
|
261
|
+
if (typeof parsedResult === 'string') {
|
|
262
|
+
console.log(parsedResult);
|
|
263
|
+
} else {
|
|
264
|
+
console.log(JSON.stringify(parsedResult, null, 2));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return [
|
|
269
|
+
3,
|
|
270
|
+
12
|
|
271
|
+
];
|
|
272
|
+
case 6:
|
|
273
|
+
error1 = _state.sent();
|
|
274
|
+
if (opts.json) {
|
|
275
|
+
console.log(JSON.stringify({
|
|
276
|
+
error: _instanceof(error1, Error) ? error1.message : String(error1)
|
|
277
|
+
}, null, 2));
|
|
278
|
+
} else {
|
|
279
|
+
console.error("\nā ".concat(_instanceof(error1, Error) ? error1.message : String(error1)));
|
|
280
|
+
}
|
|
281
|
+
throw error1;
|
|
282
|
+
case 7:
|
|
283
|
+
if (!registry) return [
|
|
284
|
+
3,
|
|
285
|
+
11
|
|
286
|
+
];
|
|
287
|
+
_state.label = 8;
|
|
288
|
+
case 8:
|
|
289
|
+
_state.trys.push([
|
|
290
|
+
8,
|
|
291
|
+
10,
|
|
292
|
+
,
|
|
293
|
+
11
|
|
294
|
+
]);
|
|
295
|
+
return [
|
|
296
|
+
4,
|
|
297
|
+
registry.close()
|
|
298
|
+
];
|
|
299
|
+
case 9:
|
|
300
|
+
_state.sent();
|
|
301
|
+
return [
|
|
302
|
+
3,
|
|
303
|
+
11
|
|
304
|
+
];
|
|
305
|
+
case 10:
|
|
306
|
+
_ = _state.sent();
|
|
307
|
+
return [
|
|
308
|
+
3,
|
|
309
|
+
11
|
|
310
|
+
];
|
|
311
|
+
case 11:
|
|
312
|
+
return [
|
|
313
|
+
7
|
|
314
|
+
];
|
|
315
|
+
case 12:
|
|
316
|
+
return [
|
|
317
|
+
2
|
|
318
|
+
];
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
})();
|
|
322
|
+
}
|
|
323
|
+
function handleToolError(error, opts) {
|
|
324
|
+
if (!_instanceof(error, _client.ToolResponseError)) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
var errorText = extractToolErrorText(error) || error.message;
|
|
328
|
+
if (opts.json) {
|
|
329
|
+
console.log(JSON.stringify({
|
|
330
|
+
error: errorText
|
|
331
|
+
}, null, 2));
|
|
332
|
+
} else {
|
|
333
|
+
console.log("ā ".concat(opts.tool, " failed\n"));
|
|
334
|
+
console.log("Error: ".concat(errorText));
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function extractToolErrorText(error) {
|
|
338
|
+
var content = Array.isArray(error.response.content) ? error.response.content : [];
|
|
339
|
+
var first = content[0];
|
|
340
|
+
if ((first === null || first === void 0 ? void 0 : first.type) === 'text' && typeof first.text === 'string') {
|
|
341
|
+
return first.text;
|
|
342
|
+
}
|
|
343
|
+
return undefined;
|
|
344
|
+
}
|
|
345
|
+
function parseToolResult(response) {
|
|
346
|
+
try {
|
|
347
|
+
return response.json();
|
|
348
|
+
} catch (error) {
|
|
349
|
+
if (_instanceof(error, _client.ToolResponseError)) {
|
|
350
|
+
if ('isError' in error.response && error.response.isError) {
|
|
351
|
+
throw error;
|
|
352
|
+
}
|
|
353
|
+
try {
|
|
354
|
+
return response.text();
|
|
355
|
+
} catch (unused) {
|
|
356
|
+
return undefined;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
throw error;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/* 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/call-tool.ts"],"sourcesContent":["/**\n * call-tool.ts\n *\n * Execute MCP tools from the command line.\n * Supports stdio (spawned) and http (remote) servers per MCP spec.\n */\n\nimport { createServerRegistry, type ManagedClient, type ServerRegistry, type ToolArguments, ToolResponseError, type ToolResponseWrapper } from '@mcp-z/client';\nimport { type InlineConfigOptions, resolveServerConfig } from '../lib/resolve-server-config.ts';\nimport { isHttpServer } from '../types.ts';\n\nexport interface CallToolOptions extends InlineConfigOptions {\n tool: string; // Tool name (positional)\n args: string; // JSON args (positional)\n json?: boolean; // --json\n}\n\n/**\n * Main call-tool command implementation.\n *\n * @param opts - Call tool options from CLI flags\n *\n * @example\n * // Call a tool with JSON args\n * await callToolCommand({\n * server: 'echo',\n * tool: 'echo',\n * args: '{\"message\": \"hello\"}',\n * });\n */\nexport async function callToolCommand(opts: CallToolOptions): Promise<void> {\n let registry: ServerRegistry | undefined;\n let client: ManagedClient | undefined;\n\n try {\n // 1. Resolve server configuration (from config file or inline options)\n const { serverName, serverConfig, configDir } = resolveServerConfig(opts);\n\n // 2. Create registry and connect\n const start = Date.now();\n\n if (isHttpServer(serverConfig)) {\n // HTTP server - no spawning needed\n if (!opts.json) {\n console.log(`š Connecting to ${serverName}...`);\n }\n } else {\n // Stdio server - will be spawned\n if (!opts.json) {\n console.log(`š Spawning ${serverName} server...`);\n }\n\n if (!serverConfig.command) {\n throw new Error(`Stdio server ${serverName} missing required \"command\" field`);\n }\n }\n\n // Create registry (spawns stdio servers, registers HTTP servers)\n registry = createServerRegistry({ [serverName]: serverConfig }, { cwd: configDir });\n client = await registry.connect(serverName);\n\n if (!isHttpServer(serverConfig) && !opts.json) {\n const elapsed = ((Date.now() - start) / 1000).toFixed(1);\n console.log(`ā Server ready in ${elapsed}s\\n`);\n }\n\n // 5. Parse tool arguments\n let toolArgs: ToolArguments;\n try {\n const parsed = JSON.parse(opts.args);\n if (typeof parsed !== 'object' || parsed === null) {\n throw new Error('Arguments must be a JSON object');\n }\n toolArgs = parsed;\n } catch (error) {\n throw new Error(`Failed to parse tool arguments as JSON: ${error instanceof Error ? error.message : String(error)}\\n\\nProvided args: ${opts.args}`);\n }\n\n // 6. Execute tool\n if (!opts.json) {\n console.log(`š§ Calling ${opts.tool}...`);\n }\n\n let response: ToolResponseWrapper;\n try {\n response = await client.callTool(opts.tool, toolArgs);\n } catch (error) {\n handleToolError(error, opts);\n throw error;\n }\n\n const parsedResult = parseToolResult(response);\n\n if (parsedResult !== undefined) {\n // Success case\n if (opts.json) {\n // JSON output mode\n console.log(JSON.stringify(parsedResult, null, 2));\n } else {\n // Human-readable output\n console.log(`ā
${opts.tool} succeeded\\n`);\n console.log('Result:');\n if (typeof parsedResult === 'string') {\n console.log(parsedResult);\n } else {\n console.log(JSON.stringify(parsedResult, null, 2));\n }\n }\n }\n } catch (error) {\n if (opts.json) {\n console.log(JSON.stringify({ error: error instanceof Error ? error.message : String(error) }, null, 2));\n } else {\n console.error(`\\nā ${error instanceof Error ? error.message : String(error)}`);\n }\n throw error;\n } finally {\n // 8. Cleanup - registry.close() handles both client and server close\n if (registry) {\n try {\n await registry.close();\n } catch (_) {\n // Ignore close errors\n }\n }\n }\n}\n\nfunction handleToolError(error: unknown, opts: CallToolOptions): void {\n if (!(error instanceof ToolResponseError)) {\n return;\n }\n\n const errorText = extractToolErrorText(error) || error.message;\n\n if (opts.json) {\n console.log(JSON.stringify({ error: errorText }, null, 2));\n } else {\n console.log(`ā ${opts.tool} failed\\n`);\n console.log(`Error: ${errorText}`);\n }\n}\n\nfunction extractToolErrorText(error: ToolResponseError): string | undefined {\n const content = Array.isArray(error.response.content) ? error.response.content : [];\n const first = content[0] as { type?: string; text?: unknown } | undefined;\n if (first?.type === 'text' && typeof first.text === 'string') {\n return first.text;\n }\n return undefined;\n}\n\nfunction parseToolResult(response: ToolResponseWrapper): unknown | undefined {\n try {\n return response.json();\n } catch (error) {\n if (error instanceof ToolResponseError) {\n if ('isError' in error.response && error.response.isError) {\n throw error;\n }\n try {\n return response.text();\n } catch {\n return undefined;\n }\n }\n throw error;\n }\n}\n"],"names":["callToolCommand","opts","registry","client","resolveServerConfig","serverName","serverConfig","configDir","start","elapsed","toolArgs","parsed","response","error","parsedResult","_","Date","now","isHttpServer","json","console","log","command","Error","createServerRegistry","cwd","connect","toFixed","JSON","parse","args","message","String","tool","callTool","handleToolError","parseToolResult","undefined","stringify","close","ToolResponseError","errorText","extractToolErrorText","content","Array","isArray","first","type","text","isError"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get-prompt.ts
|
|
3
|
+
*
|
|
4
|
+
* Get MCP prompts from the command line.
|
|
5
|
+
* Supports stdio (spawned) and http (remote) servers per MCP spec.
|
|
6
|
+
*/
|
|
7
|
+
import { type InlineConfigOptions } from '../lib/resolve-server-config.js';
|
|
8
|
+
export interface GetPromptOptions extends InlineConfigOptions {
|
|
9
|
+
name: string;
|
|
10
|
+
args: string;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Main get-prompt command implementation.
|
|
15
|
+
*
|
|
16
|
+
* @param opts - Get prompt options from CLI flags
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Get a prompt with JSON args
|
|
20
|
+
* await getPromptCommand({
|
|
21
|
+
* server: 'assistant',
|
|
22
|
+
* name: 'compose-email',
|
|
23
|
+
* args: '{"tone": "formal"}',
|
|
24
|
+
* });
|
|
25
|
+
*/
|
|
26
|
+
export declare function getPromptCommand(opts: GetPromptOptions): Promise<void>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get-prompt.ts
|
|
3
|
+
*
|
|
4
|
+
* Get MCP prompts from the command line.
|
|
5
|
+
* Supports stdio (spawned) and http (remote) servers per MCP spec.
|
|
6
|
+
*/
|
|
7
|
+
import { type InlineConfigOptions } from '../lib/resolve-server-config.js';
|
|
8
|
+
export interface GetPromptOptions extends InlineConfigOptions {
|
|
9
|
+
name: string;
|
|
10
|
+
args: string;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Main get-prompt command implementation.
|
|
15
|
+
*
|
|
16
|
+
* @param opts - Get prompt options from CLI flags
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Get a prompt with JSON args
|
|
20
|
+
* await getPromptCommand({
|
|
21
|
+
* server: 'assistant',
|
|
22
|
+
* name: 'compose-email',
|
|
23
|
+
* args: '{"tone": "formal"}',
|
|
24
|
+
* });
|
|
25
|
+
*/
|
|
26
|
+
export declare function getPromptCommand(opts: GetPromptOptions): Promise<void>;
|