@modeltoolsprotocol/mtpcli 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +305 -288
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -27,6 +27,7 @@ var __export = (target, all) => {
|
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
29
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
30
|
+
var __promiseAll = (args) => Promise.all(args);
|
|
30
31
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
31
32
|
|
|
32
33
|
// node_modules/commander/lib/error.js
|
|
@@ -2122,6 +2123,25 @@ var require_commander = __commonJS((exports) => {
|
|
|
2122
2123
|
exports.InvalidOptionArgumentError = InvalidArgumentError;
|
|
2123
2124
|
});
|
|
2124
2125
|
|
|
2126
|
+
// node_modules/commander/esm.mjs
|
|
2127
|
+
var import__, program, createCommand, createArgument, createOption, CommanderError, InvalidArgumentError, InvalidOptionArgumentError, Command, Argument, Option, Help;
|
|
2128
|
+
var init_esm = __esm(() => {
|
|
2129
|
+
import__ = __toESM(require_commander(), 1);
|
|
2130
|
+
({
|
|
2131
|
+
program,
|
|
2132
|
+
createCommand,
|
|
2133
|
+
createArgument,
|
|
2134
|
+
createOption,
|
|
2135
|
+
CommanderError,
|
|
2136
|
+
InvalidArgumentError,
|
|
2137
|
+
InvalidOptionArgumentError,
|
|
2138
|
+
Command,
|
|
2139
|
+
Argument,
|
|
2140
|
+
Option,
|
|
2141
|
+
Help
|
|
2142
|
+
} = import__.default);
|
|
2143
|
+
});
|
|
2144
|
+
|
|
2125
2145
|
// node_modules/zod/v3/helpers/util.js
|
|
2126
2146
|
var util, objectUtil, ZodParsedType, getParsedType = (data) => {
|
|
2127
2147
|
const t = typeof data;
|
|
@@ -6088,6 +6108,119 @@ var init_zod = __esm(() => {
|
|
|
6088
6108
|
init_external();
|
|
6089
6109
|
});
|
|
6090
6110
|
|
|
6111
|
+
// src/models.ts
|
|
6112
|
+
function cleanJson(obj) {
|
|
6113
|
+
if (obj === null || obj === undefined)
|
|
6114
|
+
return;
|
|
6115
|
+
if (Array.isArray(obj)) {
|
|
6116
|
+
return obj.map(cleanJson);
|
|
6117
|
+
}
|
|
6118
|
+
if (typeof obj === "object") {
|
|
6119
|
+
const out = {};
|
|
6120
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
6121
|
+
if (v === undefined)
|
|
6122
|
+
continue;
|
|
6123
|
+
if (Array.isArray(v) && v.length === 0)
|
|
6124
|
+
continue;
|
|
6125
|
+
const cleaned = cleanJson(v);
|
|
6126
|
+
if (cleaned !== undefined) {
|
|
6127
|
+
out[k] = cleaned;
|
|
6128
|
+
}
|
|
6129
|
+
}
|
|
6130
|
+
return out;
|
|
6131
|
+
}
|
|
6132
|
+
return obj;
|
|
6133
|
+
}
|
|
6134
|
+
var ExampleSchema, ArgSchema, IoDescriptorSchema, CommandAuthSchema, CommandSchema, AuthProviderSchema, AuthConfigSchema, ToolSchemaSchema, StoredTokenSchema, JsonRpcErrorSchema, JsonRpcRequestSchema, JsonRpcResponseSchema, McpToolDefSchema;
|
|
6135
|
+
var init_models = __esm(() => {
|
|
6136
|
+
init_zod();
|
|
6137
|
+
ExampleSchema = exports_external.object({
|
|
6138
|
+
description: exports_external.string().optional(),
|
|
6139
|
+
command: exports_external.string(),
|
|
6140
|
+
output: exports_external.string().optional()
|
|
6141
|
+
});
|
|
6142
|
+
ArgSchema = exports_external.object({
|
|
6143
|
+
name: exports_external.string(),
|
|
6144
|
+
type: exports_external.string(),
|
|
6145
|
+
description: exports_external.string().optional(),
|
|
6146
|
+
required: exports_external.boolean().default(false),
|
|
6147
|
+
default: exports_external.any().optional(),
|
|
6148
|
+
values: exports_external.array(exports_external.string()).optional()
|
|
6149
|
+
});
|
|
6150
|
+
IoDescriptorSchema = exports_external.object({
|
|
6151
|
+
contentType: exports_external.string().optional(),
|
|
6152
|
+
description: exports_external.string().optional(),
|
|
6153
|
+
schema: exports_external.any().optional()
|
|
6154
|
+
});
|
|
6155
|
+
CommandAuthSchema = exports_external.object({
|
|
6156
|
+
required: exports_external.boolean().default(false),
|
|
6157
|
+
scopes: exports_external.array(exports_external.string()).optional()
|
|
6158
|
+
});
|
|
6159
|
+
CommandSchema = exports_external.object({
|
|
6160
|
+
name: exports_external.string(),
|
|
6161
|
+
description: exports_external.string(),
|
|
6162
|
+
args: exports_external.array(ArgSchema).default([]),
|
|
6163
|
+
stdin: IoDescriptorSchema.optional(),
|
|
6164
|
+
stdout: IoDescriptorSchema.optional(),
|
|
6165
|
+
examples: exports_external.array(ExampleSchema).default([]),
|
|
6166
|
+
auth: CommandAuthSchema.optional()
|
|
6167
|
+
});
|
|
6168
|
+
AuthProviderSchema = exports_external.object({
|
|
6169
|
+
id: exports_external.string(),
|
|
6170
|
+
type: exports_external.string(),
|
|
6171
|
+
displayName: exports_external.string().optional(),
|
|
6172
|
+
authorizationUrl: exports_external.string().optional(),
|
|
6173
|
+
tokenUrl: exports_external.string().optional(),
|
|
6174
|
+
scopes: exports_external.array(exports_external.string()).optional(),
|
|
6175
|
+
clientId: exports_external.string().optional(),
|
|
6176
|
+
registrationUrl: exports_external.string().optional(),
|
|
6177
|
+
instructions: exports_external.string().optional()
|
|
6178
|
+
});
|
|
6179
|
+
AuthConfigSchema = exports_external.object({
|
|
6180
|
+
required: exports_external.boolean().default(false),
|
|
6181
|
+
envVar: exports_external.string(),
|
|
6182
|
+
providers: exports_external.array(AuthProviderSchema)
|
|
6183
|
+
});
|
|
6184
|
+
ToolSchemaSchema = exports_external.object({
|
|
6185
|
+
name: exports_external.string(),
|
|
6186
|
+
version: exports_external.string(),
|
|
6187
|
+
description: exports_external.string(),
|
|
6188
|
+
auth: AuthConfigSchema.optional(),
|
|
6189
|
+
commands: exports_external.array(CommandSchema)
|
|
6190
|
+
});
|
|
6191
|
+
StoredTokenSchema = exports_external.object({
|
|
6192
|
+
access_token: exports_external.string(),
|
|
6193
|
+
token_type: exports_external.string().optional(),
|
|
6194
|
+
refresh_token: exports_external.string().optional(),
|
|
6195
|
+
expires_at: exports_external.string().optional(),
|
|
6196
|
+
scopes: exports_external.array(exports_external.string()).optional(),
|
|
6197
|
+
provider_id: exports_external.string(),
|
|
6198
|
+
created_at: exports_external.string()
|
|
6199
|
+
});
|
|
6200
|
+
JsonRpcErrorSchema = exports_external.object({
|
|
6201
|
+
code: exports_external.number(),
|
|
6202
|
+
message: exports_external.string(),
|
|
6203
|
+
data: exports_external.any().optional()
|
|
6204
|
+
});
|
|
6205
|
+
JsonRpcRequestSchema = exports_external.object({
|
|
6206
|
+
jsonrpc: exports_external.string(),
|
|
6207
|
+
id: exports_external.any().optional(),
|
|
6208
|
+
method: exports_external.string(),
|
|
6209
|
+
params: exports_external.any().default({})
|
|
6210
|
+
});
|
|
6211
|
+
JsonRpcResponseSchema = exports_external.object({
|
|
6212
|
+
jsonrpc: exports_external.string(),
|
|
6213
|
+
id: exports_external.any().optional(),
|
|
6214
|
+
result: exports_external.any().optional(),
|
|
6215
|
+
error: JsonRpcErrorSchema.optional()
|
|
6216
|
+
});
|
|
6217
|
+
McpToolDefSchema = exports_external.object({
|
|
6218
|
+
name: exports_external.string(),
|
|
6219
|
+
description: exports_external.string(),
|
|
6220
|
+
inputSchema: exports_external.any()
|
|
6221
|
+
});
|
|
6222
|
+
});
|
|
6223
|
+
|
|
6091
6224
|
// node_modules/jaro-winkler/index.js
|
|
6092
6225
|
var require_jaro_winkler = __commonJS((exports, module) => {
|
|
6093
6226
|
(function(root) {
|
|
@@ -6429,7 +6562,7 @@ function jsonRpcError(id, code, message) {
|
|
|
6429
6562
|
return { jsonrpc: "2.0", id, error: { code, message } };
|
|
6430
6563
|
}
|
|
6431
6564
|
var ExampleSchema2, ArgSchema2, IoDescriptorSchema2, CommandAuthSchema2, CommandSchema2, AuthProviderSchema2, AuthConfigSchema2, ToolSchemaSchema2, StoredTokenSchema2, JsonRpcErrorSchema2, JsonRpcRequestSchema2, JsonRpcResponseSchema2, McpToolDefSchema2;
|
|
6432
|
-
var
|
|
6565
|
+
var init_models2 = __esm(() => {
|
|
6433
6566
|
init_zod();
|
|
6434
6567
|
ExampleSchema2 = exports_external.object({
|
|
6435
6568
|
description: exports_external.string().optional(),
|
|
@@ -6678,7 +6811,7 @@ async function loadSchemas(toolNames) {
|
|
|
6678
6811
|
}
|
|
6679
6812
|
var import_jaro_winkler, import_which, execFileAsync;
|
|
6680
6813
|
var init_search = __esm(() => {
|
|
6681
|
-
|
|
6814
|
+
init_models2();
|
|
6682
6815
|
import_jaro_winkler = __toESM(require_jaro_winkler(), 1);
|
|
6683
6816
|
import_which = __toESM(require_lib(), 1);
|
|
6684
6817
|
execFileAsync = promisify(execFile);
|
|
@@ -7334,7 +7467,7 @@ async function getToolSchema2(toolName) {
|
|
|
7334
7467
|
}
|
|
7335
7468
|
var import_jaro_winkler2, import_which2, execFileAsync6;
|
|
7336
7469
|
var init_search2 = __esm(() => {
|
|
7337
|
-
|
|
7470
|
+
init_models2();
|
|
7338
7471
|
import_jaro_winkler2 = __toESM(require_jaro_winkler(), 1);
|
|
7339
7472
|
import_which2 = __toESM(require_lib(), 1);
|
|
7340
7473
|
execFileAsync6 = promisify8(execFile8);
|
|
@@ -8692,7 +8825,7 @@ function readResponse(rl) {
|
|
|
8692
8825
|
});
|
|
8693
8826
|
}
|
|
8694
8827
|
var init_mcp = __esm(() => {
|
|
8695
|
-
|
|
8828
|
+
init_models2();
|
|
8696
8829
|
});
|
|
8697
8830
|
|
|
8698
8831
|
// src/serve.ts
|
|
@@ -8976,12 +9109,13 @@ async function run(toolNames) {
|
|
|
8976
9109
|
}
|
|
8977
9110
|
}
|
|
8978
9111
|
}
|
|
8979
|
-
var execFileAsync7,
|
|
8980
|
-
var init_serve = __esm(() => {
|
|
9112
|
+
var execFileAsync7, TOOL_TIMEOUT_MS = 60000, MAX_OUTPUT_BYTES;
|
|
9113
|
+
var init_serve = __esm(async () => {
|
|
8981
9114
|
init_auth();
|
|
8982
9115
|
init_mcp();
|
|
8983
|
-
|
|
9116
|
+
init_models2();
|
|
8984
9117
|
init_search2();
|
|
9118
|
+
await init_src();
|
|
8985
9119
|
execFileAsync7 = promisify9(execFile9);
|
|
8986
9120
|
MAX_OUTPUT_BYTES = 1024 * 1024 * 1024;
|
|
8987
9121
|
});
|
|
@@ -9550,7 +9684,7 @@ class McpClient {
|
|
|
9550
9684
|
client.sendRequest("initialize", {
|
|
9551
9685
|
protocolVersion: "2024-11-05",
|
|
9552
9686
|
capabilities: {},
|
|
9553
|
-
clientInfo: { name: "mtpcli-wrap", version:
|
|
9687
|
+
clientInfo: { name: "mtpcli-wrap", version: VERSION }
|
|
9554
9688
|
});
|
|
9555
9689
|
await client.readResponse();
|
|
9556
9690
|
client.sendNotification("notifications/initialized", {});
|
|
@@ -9611,7 +9745,7 @@ class HttpMcpClient {
|
|
|
9611
9745
|
const initResult = await client.sendRequest("initialize", {
|
|
9612
9746
|
protocolVersion: "2025-11-25",
|
|
9613
9747
|
capabilities: {},
|
|
9614
|
-
clientInfo: { name: "mtpcli-wrap", version:
|
|
9748
|
+
clientInfo: { name: "mtpcli-wrap", version: VERSION }
|
|
9615
9749
|
});
|
|
9616
9750
|
client.protocolVersion = initResult.protocolVersion ?? "2025-11-25";
|
|
9617
9751
|
await client.sendNotification("notifications/initialized", {});
|
|
@@ -9853,9 +9987,9 @@ async function run2(serverCmd, serverUrl, describeMode, toolName, toolArgs = [],
|
|
|
9853
9987
|
client.stop();
|
|
9854
9988
|
}
|
|
9855
9989
|
}
|
|
9856
|
-
var
|
|
9857
|
-
var init_wrap = __esm(() => {
|
|
9990
|
+
var init_wrap = __esm(async () => {
|
|
9858
9991
|
init_mcp();
|
|
9992
|
+
await init_src();
|
|
9859
9993
|
});
|
|
9860
9994
|
|
|
9861
9995
|
// src/validate.ts
|
|
@@ -10079,7 +10213,7 @@ function printHuman(result) {
|
|
|
10079
10213
|
}
|
|
10080
10214
|
var import_which3, execFileAsync8, VALID_ARG_TYPES;
|
|
10081
10215
|
var init_validate = __esm(() => {
|
|
10082
|
-
|
|
10216
|
+
init_models2();
|
|
10083
10217
|
import_which3 = __toESM(require_lib(), 1);
|
|
10084
10218
|
execFileAsync8 = promisify10(execFile10);
|
|
10085
10219
|
VALID_ARG_TYPES = new Set([
|
|
@@ -10466,138 +10600,11 @@ var init_completions = __esm(() => {
|
|
|
10466
10600
|
init_search2();
|
|
10467
10601
|
});
|
|
10468
10602
|
|
|
10469
|
-
// node_modules/commander/esm.mjs
|
|
10470
|
-
var import__ = __toESM(require_commander(), 1);
|
|
10471
|
-
var {
|
|
10472
|
-
program,
|
|
10473
|
-
createCommand,
|
|
10474
|
-
createArgument,
|
|
10475
|
-
createOption,
|
|
10476
|
-
CommanderError,
|
|
10477
|
-
InvalidArgumentError,
|
|
10478
|
-
InvalidOptionArgumentError,
|
|
10479
|
-
Command,
|
|
10480
|
-
Argument,
|
|
10481
|
-
Option,
|
|
10482
|
-
Help
|
|
10483
|
-
} = import__.default;
|
|
10484
|
-
|
|
10485
|
-
// src/models.ts
|
|
10486
|
-
init_zod();
|
|
10487
|
-
var ExampleSchema = exports_external.object({
|
|
10488
|
-
description: exports_external.string().optional(),
|
|
10489
|
-
command: exports_external.string(),
|
|
10490
|
-
output: exports_external.string().optional()
|
|
10491
|
-
});
|
|
10492
|
-
var ArgSchema = exports_external.object({
|
|
10493
|
-
name: exports_external.string(),
|
|
10494
|
-
type: exports_external.string(),
|
|
10495
|
-
description: exports_external.string().optional(),
|
|
10496
|
-
required: exports_external.boolean().default(false),
|
|
10497
|
-
default: exports_external.any().optional(),
|
|
10498
|
-
values: exports_external.array(exports_external.string()).optional()
|
|
10499
|
-
});
|
|
10500
|
-
var IoDescriptorSchema = exports_external.object({
|
|
10501
|
-
contentType: exports_external.string().optional(),
|
|
10502
|
-
description: exports_external.string().optional(),
|
|
10503
|
-
schema: exports_external.any().optional()
|
|
10504
|
-
});
|
|
10505
|
-
var CommandAuthSchema = exports_external.object({
|
|
10506
|
-
required: exports_external.boolean().default(false),
|
|
10507
|
-
scopes: exports_external.array(exports_external.string()).optional()
|
|
10508
|
-
});
|
|
10509
|
-
var CommandSchema = exports_external.object({
|
|
10510
|
-
name: exports_external.string(),
|
|
10511
|
-
description: exports_external.string(),
|
|
10512
|
-
args: exports_external.array(ArgSchema).default([]),
|
|
10513
|
-
stdin: IoDescriptorSchema.optional(),
|
|
10514
|
-
stdout: IoDescriptorSchema.optional(),
|
|
10515
|
-
examples: exports_external.array(ExampleSchema).default([]),
|
|
10516
|
-
auth: CommandAuthSchema.optional()
|
|
10517
|
-
});
|
|
10518
|
-
var AuthProviderSchema = exports_external.object({
|
|
10519
|
-
id: exports_external.string(),
|
|
10520
|
-
type: exports_external.string(),
|
|
10521
|
-
displayName: exports_external.string().optional(),
|
|
10522
|
-
authorizationUrl: exports_external.string().optional(),
|
|
10523
|
-
tokenUrl: exports_external.string().optional(),
|
|
10524
|
-
scopes: exports_external.array(exports_external.string()).optional(),
|
|
10525
|
-
clientId: exports_external.string().optional(),
|
|
10526
|
-
registrationUrl: exports_external.string().optional(),
|
|
10527
|
-
instructions: exports_external.string().optional()
|
|
10528
|
-
});
|
|
10529
|
-
var AuthConfigSchema = exports_external.object({
|
|
10530
|
-
required: exports_external.boolean().default(false),
|
|
10531
|
-
envVar: exports_external.string(),
|
|
10532
|
-
providers: exports_external.array(AuthProviderSchema)
|
|
10533
|
-
});
|
|
10534
|
-
var ToolSchemaSchema = exports_external.object({
|
|
10535
|
-
name: exports_external.string(),
|
|
10536
|
-
version: exports_external.string(),
|
|
10537
|
-
description: exports_external.string(),
|
|
10538
|
-
auth: AuthConfigSchema.optional(),
|
|
10539
|
-
commands: exports_external.array(CommandSchema)
|
|
10540
|
-
});
|
|
10541
|
-
var StoredTokenSchema = exports_external.object({
|
|
10542
|
-
access_token: exports_external.string(),
|
|
10543
|
-
token_type: exports_external.string().optional(),
|
|
10544
|
-
refresh_token: exports_external.string().optional(),
|
|
10545
|
-
expires_at: exports_external.string().optional(),
|
|
10546
|
-
scopes: exports_external.array(exports_external.string()).optional(),
|
|
10547
|
-
provider_id: exports_external.string(),
|
|
10548
|
-
created_at: exports_external.string()
|
|
10549
|
-
});
|
|
10550
|
-
var JsonRpcErrorSchema = exports_external.object({
|
|
10551
|
-
code: exports_external.number(),
|
|
10552
|
-
message: exports_external.string(),
|
|
10553
|
-
data: exports_external.any().optional()
|
|
10554
|
-
});
|
|
10555
|
-
var JsonRpcRequestSchema = exports_external.object({
|
|
10556
|
-
jsonrpc: exports_external.string(),
|
|
10557
|
-
id: exports_external.any().optional(),
|
|
10558
|
-
method: exports_external.string(),
|
|
10559
|
-
params: exports_external.any().default({})
|
|
10560
|
-
});
|
|
10561
|
-
var JsonRpcResponseSchema = exports_external.object({
|
|
10562
|
-
jsonrpc: exports_external.string(),
|
|
10563
|
-
id: exports_external.any().optional(),
|
|
10564
|
-
result: exports_external.any().optional(),
|
|
10565
|
-
error: JsonRpcErrorSchema.optional()
|
|
10566
|
-
});
|
|
10567
|
-
var McpToolDefSchema = exports_external.object({
|
|
10568
|
-
name: exports_external.string(),
|
|
10569
|
-
description: exports_external.string(),
|
|
10570
|
-
inputSchema: exports_external.any()
|
|
10571
|
-
});
|
|
10572
|
-
function cleanJson(obj) {
|
|
10573
|
-
if (obj === null || obj === undefined)
|
|
10574
|
-
return;
|
|
10575
|
-
if (Array.isArray(obj)) {
|
|
10576
|
-
return obj.map(cleanJson);
|
|
10577
|
-
}
|
|
10578
|
-
if (typeof obj === "object") {
|
|
10579
|
-
const out = {};
|
|
10580
|
-
for (const [k, v] of Object.entries(obj)) {
|
|
10581
|
-
if (v === undefined)
|
|
10582
|
-
continue;
|
|
10583
|
-
if (Array.isArray(v) && v.length === 0)
|
|
10584
|
-
continue;
|
|
10585
|
-
const cleaned = cleanJson(v);
|
|
10586
|
-
if (cleaned !== undefined) {
|
|
10587
|
-
out[k] = cleaned;
|
|
10588
|
-
}
|
|
10589
|
-
}
|
|
10590
|
-
return out;
|
|
10591
|
-
}
|
|
10592
|
-
return obj;
|
|
10593
|
-
}
|
|
10594
|
-
|
|
10595
10603
|
// src/index.ts
|
|
10596
|
-
var VERSION3 = "0.3.2";
|
|
10597
10604
|
function selfDescribe() {
|
|
10598
10605
|
const schema = {
|
|
10599
10606
|
name: "mtpcli",
|
|
10600
|
-
version:
|
|
10607
|
+
version: VERSION,
|
|
10601
10608
|
description: "Unified CLI for discovering, authenticating, and bridging --describe-compatible tools",
|
|
10602
10609
|
commands: [
|
|
10603
10610
|
{
|
|
@@ -10947,122 +10954,126 @@ function selfDescribe() {
|
|
|
10947
10954
|
};
|
|
10948
10955
|
console.log(JSON.stringify(cleanJson(schema), null, 2));
|
|
10949
10956
|
}
|
|
10950
|
-
var
|
|
10951
|
-
|
|
10952
|
-
|
|
10953
|
-
|
|
10954
|
-
|
|
10955
|
-
|
|
10956
|
-
|
|
10957
|
-
|
|
10958
|
-
|
|
10959
|
-
|
|
10960
|
-
|
|
10961
|
-
|
|
10957
|
+
var VERSION = "0.3.3", program2, authCmd;
|
|
10958
|
+
var init_src = __esm(async () => {
|
|
10959
|
+
init_esm();
|
|
10960
|
+
init_models();
|
|
10961
|
+
program2 = new Command().name("mtpcli").version(VERSION).description("Unified CLI for discovering, authenticating, and bridging --describe-compatible tools").option("--describe", "Print self-describing JSON (mtpcli spec)").action(async (opts) => {
|
|
10962
|
+
if (opts.describe) {
|
|
10963
|
+
selfDescribe();
|
|
10964
|
+
return;
|
|
10965
|
+
}
|
|
10966
|
+
program2.help();
|
|
10967
|
+
});
|
|
10968
|
+
program2.command("search").description("Search across --describe-compatible tools").argument("<query>", "Search query").option("--json", "Output as JSON", false).option("--scan-path", "Scan PATH for --describe-compatible tools", false).option("--jobs <n>", "Number of parallel jobs for --scan-path", "16").argument("[tools...]", "Tool names to search (after --)").action(async (query, tools, opts) => {
|
|
10969
|
+
const { search: search2, loadSchemas: loadSchemas2, scanPath: scanPath2 } = await Promise.resolve().then(() => (init_search(), exports_search));
|
|
10970
|
+
const schemas = opts.scanPath ? await scanPath2(parseInt(opts.jobs, 10)) : await loadSchemas2(tools);
|
|
10971
|
+
if (schemas.length === 0) {
|
|
10972
|
+
process.stderr.write(`no tools found. Try: mtpcli search --scan-path "query"
|
|
10962
10973
|
`);
|
|
10963
|
-
|
|
10964
|
-
|
|
10965
|
-
|
|
10966
|
-
|
|
10967
|
-
|
|
10974
|
+
return;
|
|
10975
|
+
}
|
|
10976
|
+
const results = search2(query, schemas);
|
|
10977
|
+
if (results.length === 0) {
|
|
10978
|
+
process.stderr.write(`no results for "${query}"
|
|
10968
10979
|
`);
|
|
10969
|
-
|
|
10970
|
-
}
|
|
10971
|
-
if (opts.json) {
|
|
10972
|
-
console.log(JSON.stringify(results, null, 2));
|
|
10973
|
-
} else {
|
|
10974
|
-
for (const r of results) {
|
|
10975
|
-
console.log(`${r.score.toFixed(1).padStart(6)} ${r.tool} ${r.command} ${r.description}`);
|
|
10980
|
+
return;
|
|
10976
10981
|
}
|
|
10977
|
-
|
|
10978
|
-
|
|
10979
|
-
|
|
10980
|
-
|
|
10981
|
-
|
|
10982
|
-
|
|
10983
|
-
|
|
10984
|
-
|
|
10985
|
-
|
|
10986
|
-
|
|
10987
|
-
|
|
10982
|
+
if (opts.json) {
|
|
10983
|
+
console.log(JSON.stringify(results, null, 2));
|
|
10984
|
+
} else {
|
|
10985
|
+
for (const r of results) {
|
|
10986
|
+
console.log(`${r.score.toFixed(1).padStart(6)} ${r.tool} ${r.command} ${r.description}`);
|
|
10987
|
+
}
|
|
10988
|
+
}
|
|
10989
|
+
});
|
|
10990
|
+
authCmd = program2.command("auth").description("Manage authentication for tools");
|
|
10991
|
+
authCmd.command("login").description("Log in to a tool").argument("[tool]", "Tool name").option("--provider <id>", "Specific provider ID").option("--token <value>", "API key / bearer token (skip OAuth flow)").option("--url <url>", "HTTP MCP server URL (triggers OAuth discovery)").option("--client-id <id>", "Pre-registered OAuth client ID (for --url)").action(async (tool, opts) => {
|
|
10992
|
+
if (opts.url) {
|
|
10993
|
+
const { mcpOAuthFlow: mcpOAuthFlow3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
|
|
10994
|
+
await mcpOAuthFlow3(opts.url, "", opts.clientId);
|
|
10995
|
+
return;
|
|
10996
|
+
}
|
|
10997
|
+
if (!tool) {
|
|
10998
|
+
process.stderr.write(`error: tool name is required (or use --url)
|
|
10988
10999
|
`);
|
|
10989
|
-
|
|
10990
|
-
|
|
10991
|
-
|
|
10992
|
-
|
|
10993
|
-
});
|
|
10994
|
-
authCmd.command("logout").description("Log out from a tool").argument("[tool]", "Tool name").option("--url <url>", "HTTP MCP server URL").action(async (tool, opts) => {
|
|
10995
|
-
|
|
10996
|
-
|
|
10997
|
-
|
|
10998
|
-
|
|
10999
|
-
|
|
11000
|
+
process.exit(1);
|
|
11001
|
+
}
|
|
11002
|
+
const { runLogin: runLogin3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
|
|
11003
|
+
await runLogin3(tool, opts.provider, opts.token);
|
|
11004
|
+
});
|
|
11005
|
+
authCmd.command("logout").description("Log out from a tool").argument("[tool]", "Tool name").option("--url <url>", "HTTP MCP server URL").action(async (tool, opts) => {
|
|
11006
|
+
if (opts.url) {
|
|
11007
|
+
const { mcpAuthLogout: mcpAuthLogout3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
|
|
11008
|
+
const deleted = mcpAuthLogout3(opts.url);
|
|
11009
|
+
if (deleted) {
|
|
11010
|
+
process.stderr.write(`Logged out from ${opts.url}
|
|
11000
11011
|
`);
|
|
11001
|
-
|
|
11002
|
-
|
|
11012
|
+
} else {
|
|
11013
|
+
process.stderr.write(`No tokens found for ${opts.url}
|
|
11003
11014
|
`);
|
|
11015
|
+
}
|
|
11016
|
+
return;
|
|
11004
11017
|
}
|
|
11005
|
-
|
|
11006
|
-
|
|
11007
|
-
if (!tool) {
|
|
11008
|
-
process.stderr.write(`error: tool name is required (or use --url)
|
|
11018
|
+
if (!tool) {
|
|
11019
|
+
process.stderr.write(`error: tool name is required (or use --url)
|
|
11009
11020
|
`);
|
|
11010
|
-
|
|
11011
|
-
|
|
11012
|
-
|
|
11013
|
-
|
|
11014
|
-
});
|
|
11015
|
-
authCmd.command("status").description("Show auth status for a tool").argument("[tool]", "Tool name").option("--url <url>", "HTTP MCP server URL").action(async (tool, opts) => {
|
|
11016
|
-
|
|
11017
|
-
|
|
11018
|
-
|
|
11019
|
-
|
|
11020
|
-
|
|
11021
|
-
|
|
11022
|
-
|
|
11021
|
+
process.exit(1);
|
|
11022
|
+
}
|
|
11023
|
+
const { runLogout: runLogout3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
|
|
11024
|
+
await runLogout3(tool);
|
|
11025
|
+
});
|
|
11026
|
+
authCmd.command("status").description("Show auth status for a tool").argument("[tool]", "Tool name").option("--url <url>", "HTTP MCP server URL").action(async (tool, opts) => {
|
|
11027
|
+
if (opts.url) {
|
|
11028
|
+
const { mcpAuthStatus: mcpAuthStatus3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
|
|
11029
|
+
console.log(JSON.stringify(mcpAuthStatus3(opts.url), null, 2));
|
|
11030
|
+
return;
|
|
11031
|
+
}
|
|
11032
|
+
if (!tool) {
|
|
11033
|
+
process.stderr.write(`error: tool name is required (or use --url)
|
|
11023
11034
|
`);
|
|
11024
|
-
|
|
11025
|
-
|
|
11026
|
-
|
|
11027
|
-
|
|
11028
|
-
});
|
|
11029
|
-
authCmd.command("token").description("Print the access token for a tool").argument("[tool]", "Tool name").option("--url <url>", "HTTP MCP server URL").action(async (tool, opts) => {
|
|
11030
|
-
|
|
11031
|
-
|
|
11032
|
-
|
|
11033
|
-
|
|
11034
|
-
|
|
11035
|
-
|
|
11036
|
-
|
|
11037
|
-
|
|
11038
|
-
|
|
11039
|
-
|
|
11040
|
-
|
|
11035
|
+
process.exit(1);
|
|
11036
|
+
}
|
|
11037
|
+
const { runStatus: runStatus3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
|
|
11038
|
+
await runStatus3(tool);
|
|
11039
|
+
});
|
|
11040
|
+
authCmd.command("token").description("Print the access token for a tool").argument("[tool]", "Tool name").option("--url <url>", "HTTP MCP server URL").action(async (tool, opts) => {
|
|
11041
|
+
if (opts.url) {
|
|
11042
|
+
const { mcpAuthToken: mcpAuthToken3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
|
|
11043
|
+
const t = await mcpAuthToken3(opts.url);
|
|
11044
|
+
if (!t) {
|
|
11045
|
+
throw new Error(`no valid token for '${opts.url}'. Run: mtpcli auth login --url ${opts.url}`);
|
|
11046
|
+
}
|
|
11047
|
+
console.log(t);
|
|
11048
|
+
return;
|
|
11049
|
+
}
|
|
11050
|
+
if (!tool) {
|
|
11051
|
+
process.stderr.write(`error: tool name is required (or use --url)
|
|
11041
11052
|
`);
|
|
11042
|
-
|
|
11043
|
-
|
|
11044
|
-
|
|
11045
|
-
|
|
11046
|
-
});
|
|
11047
|
-
authCmd.command("env").description("Print shell export statement for eval").argument("<tool>", "Tool name").action(async (tool) => {
|
|
11048
|
-
|
|
11049
|
-
|
|
11050
|
-
});
|
|
11051
|
-
authCmd.command("refresh").description("Force-refresh the stored OAuth token for a tool").argument("[tool]", "Tool name").option("--url <url>", "HTTP MCP server URL").action(async (tool, opts) => {
|
|
11052
|
-
|
|
11053
|
-
|
|
11054
|
-
|
|
11055
|
-
|
|
11056
|
-
|
|
11057
|
-
|
|
11058
|
-
|
|
11053
|
+
process.exit(1);
|
|
11054
|
+
}
|
|
11055
|
+
const { runToken: runToken3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
|
|
11056
|
+
await runToken3(tool);
|
|
11057
|
+
});
|
|
11058
|
+
authCmd.command("env").description("Print shell export statement for eval").argument("<tool>", "Tool name").action(async (tool) => {
|
|
11059
|
+
const { runEnv: runEnv3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
|
|
11060
|
+
await runEnv3(tool);
|
|
11061
|
+
});
|
|
11062
|
+
authCmd.command("refresh").description("Force-refresh the stored OAuth token for a tool").argument("[tool]", "Tool name").option("--url <url>", "HTTP MCP server URL").action(async (tool, opts) => {
|
|
11063
|
+
if (opts.url) {
|
|
11064
|
+
const { mcpAuthRefresh: mcpAuthRefresh3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
|
|
11065
|
+
await mcpAuthRefresh3(opts.url);
|
|
11066
|
+
return;
|
|
11067
|
+
}
|
|
11068
|
+
if (!tool) {
|
|
11069
|
+
process.stderr.write(`error: tool name is required (or use --url)
|
|
11059
11070
|
`);
|
|
11060
|
-
|
|
11061
|
-
|
|
11062
|
-
|
|
11063
|
-
|
|
11064
|
-
});
|
|
11065
|
-
program2.command("serve").description("Serve CLI tools as an MCP server (cli2mcp bridge)").requiredOption("--tool <names...>", "Tool(s) to serve").addHelpText("after", `
|
|
11071
|
+
process.exit(1);
|
|
11072
|
+
}
|
|
11073
|
+
const { runRefresh: runRefresh3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
|
|
11074
|
+
await runRefresh3(tool);
|
|
11075
|
+
});
|
|
11076
|
+
program2.command("serve").description("Serve CLI tools as an MCP server (cli2mcp bridge)").requiredOption("--tool <names...>", "Tool(s) to serve").addHelpText("after", `
|
|
11066
11077
|
This command is meant to be used as an MCP server, not run directly.
|
|
11067
11078
|
Add it to your MCP client config (e.g. ~/.claude.json):
|
|
11068
11079
|
|
|
@@ -11080,8 +11091,8 @@ Any CLI tool on your PATH that supports --describe can be served.
|
|
|
11080
11091
|
Multiple tools can be combined into a single MCP server:
|
|
11081
11092
|
|
|
11082
11093
|
mtpcli serve --tool tool1 --tool tool2`).action(async (opts) => {
|
|
11083
|
-
|
|
11084
|
-
|
|
11094
|
+
if (process.stdin.isTTY) {
|
|
11095
|
+
process.stderr.write(`Error: 'mtpcli serve' is an MCP server and should not be run directly.
|
|
11085
11096
|
` + `Add it to your MCP client config instead. For example, in ~/.claude.json:
|
|
11086
11097
|
|
|
11087
11098
|
` + ` {
|
|
@@ -11096,51 +11107,57 @@ Multiple tools can be combined into a single MCP server:
|
|
|
11096
11107
|
|
|
11097
11108
|
` + `Run 'mtpcli serve --help' for more details.
|
|
11098
11109
|
`);
|
|
11099
|
-
|
|
11100
|
-
|
|
11101
|
-
|
|
11102
|
-
|
|
11103
|
-
});
|
|
11104
|
-
program2.command("wrap").description("Wrap an MCP server as a CLI tool (mcp2cli bridge)").option("--server <cmd>", "MCP server command to run (stdio transport)").option("--url <url>", "MCP server URL (Streamable HTTP / SSE transport)").option("-H, --header <header...>", "HTTP header(s) for --url (e.g. 'Authorization: Bearer tok')").option("--client-id <id>", "Pre-registered OAuth client ID (for --url)").option("--describe", "Output --describe JSON instead of invoking", false).argument("[tool_name]", "Tool name to invoke").argument("[args...]", "Arguments for the tool (after --)").action(async (toolName, args, opts) => {
|
|
11105
|
-
|
|
11106
|
-
|
|
11110
|
+
process.exit(1);
|
|
11111
|
+
}
|
|
11112
|
+
const { run: run5 } = await init_serve().then(() => exports_serve);
|
|
11113
|
+
await run5(opts.tool);
|
|
11114
|
+
});
|
|
11115
|
+
program2.command("wrap").description("Wrap an MCP server as a CLI tool (mcp2cli bridge)").option("--server <cmd>", "MCP server command to run (stdio transport)").option("--url <url>", "MCP server URL (Streamable HTTP / SSE transport)").option("-H, --header <header...>", "HTTP header(s) for --url (e.g. 'Authorization: Bearer tok')").option("--client-id <id>", "Pre-registered OAuth client ID (for --url)").option("--describe", "Output --describe JSON instead of invoking", false).argument("[tool_name]", "Tool name to invoke").argument("[args...]", "Arguments for the tool (after --)").action(async (toolName, args, opts) => {
|
|
11116
|
+
if (opts.server && opts.url) {
|
|
11117
|
+
process.stderr.write(`error: --server and --url are mutually exclusive
|
|
11107
11118
|
`);
|
|
11108
|
-
|
|
11109
|
-
|
|
11110
|
-
|
|
11111
|
-
|
|
11119
|
+
process.exit(1);
|
|
11120
|
+
}
|
|
11121
|
+
if (!opts.server && !opts.url) {
|
|
11122
|
+
process.stderr.write(`error: one of --server or --url is required
|
|
11112
11123
|
`);
|
|
11113
|
-
|
|
11114
|
-
|
|
11115
|
-
|
|
11116
|
-
|
|
11124
|
+
process.exit(1);
|
|
11125
|
+
}
|
|
11126
|
+
if (opts.header && !opts.url) {
|
|
11127
|
+
process.stderr.write(`error: --header requires --url
|
|
11117
11128
|
`);
|
|
11118
|
-
|
|
11119
|
-
|
|
11120
|
-
|
|
11121
|
-
|
|
11129
|
+
process.exit(1);
|
|
11130
|
+
}
|
|
11131
|
+
if (opts.clientId && !opts.url) {
|
|
11132
|
+
process.stderr.write(`error: --client-id requires --url
|
|
11133
|
+
`);
|
|
11134
|
+
process.exit(1);
|
|
11135
|
+
}
|
|
11136
|
+
const { run: run5 } = await init_wrap().then(() => exports_wrap);
|
|
11137
|
+
await run5(opts.server, opts.url, opts.describe, toolName, args, opts.header ?? [], opts.clientId);
|
|
11138
|
+
});
|
|
11139
|
+
program2.command("validate").description("Validate a tool's --describe output against the MTP spec").argument("[tool]", "Tool name to validate").option("--json", "Output as JSON", false).option("--stdin", "Read JSON from stdin", false).option("--skip-help", "Skip --help cross-reference", false).action(async (tool, opts) => {
|
|
11140
|
+
const { run: run5 } = await Promise.resolve().then(() => (init_validate(), exports_validate));
|
|
11141
|
+
await run5(tool, {
|
|
11142
|
+
json: opts.json,
|
|
11143
|
+
stdin: opts.stdin,
|
|
11144
|
+
skipHelp: opts.skipHelp
|
|
11145
|
+
});
|
|
11146
|
+
});
|
|
11147
|
+
program2.command("completions").description("Generate shell completions from --describe output").argument("<shell>", "Shell type (bash, zsh, fish)").argument("<tool>", "Tool name").action(async (shell, tool) => {
|
|
11148
|
+
const { run: run5 } = await Promise.resolve().then(() => (init_completions(), exports_completions));
|
|
11149
|
+
await run5(shell, tool);
|
|
11150
|
+
});
|
|
11151
|
+
try {
|
|
11152
|
+
await program2.parseAsync(process.argv);
|
|
11153
|
+
} catch (e) {
|
|
11154
|
+
process.stderr.write(`error: ${e instanceof Error ? e.message : e}
|
|
11122
11155
|
`);
|
|
11123
11156
|
process.exit(1);
|
|
11124
11157
|
}
|
|
11125
|
-
const { run: run5 } = await Promise.resolve().then(() => (init_wrap(), exports_wrap));
|
|
11126
|
-
await run5(opts.server, opts.url, opts.describe, toolName, args, opts.header ?? [], opts.clientId);
|
|
11127
11158
|
});
|
|
11128
|
-
|
|
11129
|
-
|
|
11130
|
-
|
|
11131
|
-
|
|
11132
|
-
|
|
11133
|
-
skipHelp: opts.skipHelp
|
|
11134
|
-
});
|
|
11135
|
-
});
|
|
11136
|
-
program2.command("completions").description("Generate shell completions from --describe output").argument("<shell>", "Shell type (bash, zsh, fish)").argument("<tool>", "Tool name").action(async (shell, tool) => {
|
|
11137
|
-
const { run: run5 } = await Promise.resolve().then(() => (init_completions(), exports_completions));
|
|
11138
|
-
await run5(shell, tool);
|
|
11139
|
-
});
|
|
11140
|
-
try {
|
|
11141
|
-
await program2.parseAsync(process.argv);
|
|
11142
|
-
} catch (e) {
|
|
11143
|
-
process.stderr.write(`error: ${e instanceof Error ? e.message : e}
|
|
11144
|
-
`);
|
|
11145
|
-
process.exit(1);
|
|
11146
|
-
}
|
|
11159
|
+
await init_src();
|
|
11160
|
+
|
|
11161
|
+
export {
|
|
11162
|
+
VERSION
|
|
11163
|
+
};
|