@modeltoolsprotocol/mtpcli 0.3.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +305 -288
  2. 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 init_models = __esm(() => {
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
- init_models();
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
- init_models();
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
- init_models();
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, VERSION = "0.1.0", TOOL_TIMEOUT_MS = 60000, MAX_OUTPUT_BYTES;
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
- init_models();
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: VERSION2 }
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: VERSION2 }
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 VERSION2 = "0.1.0";
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
- init_models();
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: VERSION3,
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 program2 = new Command().name("mtpcli").version(VERSION3).description("Unified CLI for discovering, authenticating, and bridging --describe-compatible tools").option("--describe", "Print self-describing JSON (mtpcli spec)").action(async (opts) => {
10951
- if (opts.describe) {
10952
- selfDescribe();
10953
- return;
10954
- }
10955
- program2.help();
10956
- });
10957
- 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) => {
10958
- const { search: search2, loadSchemas: loadSchemas2, scanPath: scanPath2 } = await Promise.resolve().then(() => (init_search(), exports_search));
10959
- const schemas = opts.scanPath ? await scanPath2(parseInt(opts.jobs, 10)) : await loadSchemas2(tools);
10960
- if (schemas.length === 0) {
10961
- process.stderr.write(`no tools found. Try: mtpcli search --scan-path "query"
10957
+ var VERSION = "1.0.0", 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
- return;
10964
- }
10965
- const results = search2(query, schemas);
10966
- if (results.length === 0) {
10967
- process.stderr.write(`no results for "${query}"
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
- return;
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
- var authCmd = program2.command("auth").description("Manage authentication for tools");
10980
- 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) => {
10981
- if (opts.url) {
10982
- const { mcpOAuthFlow: mcpOAuthFlow3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
10983
- await mcpOAuthFlow3(opts.url, "", opts.clientId);
10984
- return;
10985
- }
10986
- if (!tool) {
10987
- process.stderr.write(`error: tool name is required (or use --url)
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
- process.exit(1);
10990
- }
10991
- const { runLogin: runLogin3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
10992
- await runLogin3(tool, opts.provider, opts.token);
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
- if (opts.url) {
10996
- const { mcpAuthLogout: mcpAuthLogout3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
10997
- const deleted = mcpAuthLogout3(opts.url);
10998
- if (deleted) {
10999
- process.stderr.write(`Logged out from ${opts.url}
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
- } else {
11002
- process.stderr.write(`No tokens found for ${opts.url}
11012
+ } else {
11013
+ process.stderr.write(`No tokens found for ${opts.url}
11003
11014
  `);
11015
+ }
11016
+ return;
11004
11017
  }
11005
- return;
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
- process.exit(1);
11011
- }
11012
- const { runLogout: runLogout3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
11013
- await runLogout3(tool);
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
- if (opts.url) {
11017
- const { mcpAuthStatus: mcpAuthStatus3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
11018
- console.log(JSON.stringify(mcpAuthStatus3(opts.url), null, 2));
11019
- return;
11020
- }
11021
- if (!tool) {
11022
- process.stderr.write(`error: tool name is required (or use --url)
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
- process.exit(1);
11025
- }
11026
- const { runStatus: runStatus3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
11027
- await runStatus3(tool);
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
- if (opts.url) {
11031
- const { mcpAuthToken: mcpAuthToken3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
11032
- const t = await mcpAuthToken3(opts.url);
11033
- if (!t) {
11034
- throw new Error(`no valid token for '${opts.url}'. Run: mtpcli auth login --url ${opts.url}`);
11035
- }
11036
- console.log(t);
11037
- return;
11038
- }
11039
- if (!tool) {
11040
- process.stderr.write(`error: tool name is required (or use --url)
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
- process.exit(1);
11043
- }
11044
- const { runToken: runToken3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
11045
- await runToken3(tool);
11046
- });
11047
- authCmd.command("env").description("Print shell export statement for eval").argument("<tool>", "Tool name").action(async (tool) => {
11048
- const { runEnv: runEnv3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
11049
- await runEnv3(tool);
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
- if (opts.url) {
11053
- const { mcpAuthRefresh: mcpAuthRefresh3 } = await Promise.resolve().then(() => (init_mcp_oauth(), exports_mcp_oauth));
11054
- await mcpAuthRefresh3(opts.url);
11055
- return;
11056
- }
11057
- if (!tool) {
11058
- process.stderr.write(`error: tool name is required (or use --url)
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
- process.exit(1);
11061
- }
11062
- const { runRefresh: runRefresh3 } = await Promise.resolve().then(() => (init_auth2(), exports_auth2));
11063
- await runRefresh3(tool);
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
- if (process.stdin.isTTY) {
11084
- process.stderr.write(`Error: 'mtpcli serve' is an MCP server and should not be run directly.
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
- process.exit(1);
11100
- }
11101
- const { run: run5 } = await Promise.resolve().then(() => (init_serve(), exports_serve));
11102
- await run5(opts.tool);
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
- if (opts.server && opts.url) {
11106
- process.stderr.write(`error: --server and --url are mutually exclusive
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
- process.exit(1);
11109
- }
11110
- if (!opts.server && !opts.url) {
11111
- process.stderr.write(`error: one of --server or --url is required
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
- process.exit(1);
11114
- }
11115
- if (opts.header && !opts.url) {
11116
- process.stderr.write(`error: --header requires --url
11124
+ process.exit(1);
11125
+ }
11126
+ if (opts.header && !opts.url) {
11127
+ process.stderr.write(`error: --header requires --url
11117
11128
  `);
11118
- process.exit(1);
11119
- }
11120
- if (opts.clientId && !opts.url) {
11121
- process.stderr.write(`error: --client-id requires --url
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
- 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) => {
11129
- const { run: run5 } = await Promise.resolve().then(() => (init_validate(), exports_validate));
11130
- await run5(tool, {
11131
- json: opts.json,
11132
- stdin: opts.stdin,
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
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modeltoolsprotocol/mtpcli",
3
- "version": "0.3.2",
3
+ "version": "1.0.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "bin": {