@kwonye/mcpx 0.1.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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +150 -0
  3. package/dist/adapters/claude.d.ts +7 -0
  4. package/dist/adapters/claude.js +69 -0
  5. package/dist/adapters/claude.js.map +1 -0
  6. package/dist/adapters/cline.d.ts +7 -0
  7. package/dist/adapters/cline.js +65 -0
  8. package/dist/adapters/cline.js.map +1 -0
  9. package/dist/adapters/codex.d.ts +7 -0
  10. package/dist/adapters/codex.js +52 -0
  11. package/dist/adapters/codex.js.map +1 -0
  12. package/dist/adapters/cursor.d.ts +7 -0
  13. package/dist/adapters/cursor.js +52 -0
  14. package/dist/adapters/cursor.js.map +1 -0
  15. package/dist/adapters/index.d.ts +2 -0
  16. package/dist/adapters/index.js +15 -0
  17. package/dist/adapters/index.js.map +1 -0
  18. package/dist/adapters/utils.d.ts +10 -0
  19. package/dist/adapters/utils.js +69 -0
  20. package/dist/adapters/utils.js.map +1 -0
  21. package/dist/adapters/vscode.d.ts +7 -0
  22. package/dist/adapters/vscode.js +52 -0
  23. package/dist/adapters/vscode.js.map +1 -0
  24. package/dist/cli.d.ts +2 -0
  25. package/dist/cli.js +577 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/core/config.d.ts +4 -0
  28. package/dist/core/config.js +71 -0
  29. package/dist/core/config.js.map +1 -0
  30. package/dist/core/daemon.d.ts +25 -0
  31. package/dist/core/daemon.js +174 -0
  32. package/dist/core/daemon.js.map +1 -0
  33. package/dist/core/managed-index.d.ts +4 -0
  34. package/dist/core/managed-index.js +22 -0
  35. package/dist/core/managed-index.js.map +1 -0
  36. package/dist/core/paths.d.ts +12 -0
  37. package/dist/core/paths.js +46 -0
  38. package/dist/core/paths.js.map +1 -0
  39. package/dist/core/registry.d.ts +7 -0
  40. package/dist/core/registry.js +33 -0
  41. package/dist/core/registry.js.map +1 -0
  42. package/dist/core/secrets.d.ts +16 -0
  43. package/dist/core/secrets.js +108 -0
  44. package/dist/core/secrets.js.map +1 -0
  45. package/dist/core/server-auth.d.ts +19 -0
  46. package/dist/core/server-auth.js +112 -0
  47. package/dist/core/server-auth.js.map +1 -0
  48. package/dist/core/sync.d.ts +9 -0
  49. package/dist/core/sync.js +63 -0
  50. package/dist/core/sync.js.map +1 -0
  51. package/dist/gateway/server.d.ts +9 -0
  52. package/dist/gateway/server.js +960 -0
  53. package/dist/gateway/server.js.map +1 -0
  54. package/dist/types.d.ts +86 -0
  55. package/dist/types.js +2 -0
  56. package/dist/types.js.map +1 -0
  57. package/dist/util/fs.d.ts +4 -0
  58. package/dist/util/fs.js +34 -0
  59. package/dist/util/fs.js.map +1 -0
  60. package/dist/version.d.ts +1 -0
  61. package/dist/version.js +2 -0
  62. package/dist/version.js.map +1 -0
  63. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/adapters/vscode.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export declare function runCli(argv?: string[]): Promise<void>;
package/dist/cli.js ADDED
@@ -0,0 +1,577 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import fs from "node:fs";
4
+ import { execFileSync } from "node:child_process";
5
+ import { loadConfig, saveConfig } from "./core/config.js";
6
+ import { addServer, removeServer } from "./core/registry.js";
7
+ import { SecretsManager, readSecretValueFromStdin } from "./core/secrets.js";
8
+ import { syncAllClients } from "./core/sync.js";
9
+ import { applyAuthReference, defaultAuthSecretName, listAuthBindings, maybePrefixBearer, removeAuthReference, resolveAuthTarget, secretRefName, toSecretRef } from "./core/server-auth.js";
10
+ import { getAdapters } from "./adapters/index.js";
11
+ import { getDaemonStatus, readDaemonLogs, restartDaemon, runDaemonForeground, startDaemon, stopDaemon } from "./core/daemon.js";
12
+ import { getConfigPath, getManagedIndexPath } from "./core/paths.js";
13
+ import { APP_VERSION } from "./version.js";
14
+ const VALID_CLIENTS = ["claude", "codex", "cursor", "cline", "vscode"];
15
+ function parseKeyValueFlag(value, label) {
16
+ const split = value.indexOf("=");
17
+ if (split <= 0 || split >= value.length - 1) {
18
+ throw new Error(`Invalid ${label} format: ${value}. Use KEY=VALUE.`);
19
+ }
20
+ return [value.slice(0, split), value.slice(split + 1)];
21
+ }
22
+ function parseHeader(header) {
23
+ return parseKeyValueFlag(header, "header");
24
+ }
25
+ function parseEnvVar(envVar) {
26
+ return parseKeyValueFlag(envVar, "env");
27
+ }
28
+ function isHttpUrl(value) {
29
+ try {
30
+ const parsed = new URL(value);
31
+ return parsed.protocol === "http:" || parsed.protocol === "https:";
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ function normalizeTransport(transport) {
38
+ const normalized = transport?.trim().toLowerCase() || "auto";
39
+ if (normalized !== "auto" && normalized !== "http" && normalized !== "stdio") {
40
+ throw new Error("Invalid --transport value. Supported: auto, http, stdio.");
41
+ }
42
+ return normalized;
43
+ }
44
+ function parseAddServerSpec(values, options) {
45
+ if (values.length < 2) {
46
+ throw new Error("Usage: mcpx add [--transport auto|http|stdio] <name> <url|command> [args...]");
47
+ }
48
+ const name = values[0] ?? "";
49
+ const target = values[1] ?? "";
50
+ const trailing = values.slice(2);
51
+ const requestedTransport = normalizeTransport(options.transport);
52
+ const transport = requestedTransport === "auto"
53
+ ? (isHttpUrl(target) && trailing.length === 0 ? "http" : "stdio")
54
+ : requestedTransport;
55
+ if (transport === "http") {
56
+ if (values.length !== 2) {
57
+ throw new Error("HTTP upstream usage: mcpx add <name> --transport http <url>");
58
+ }
59
+ if (!isHttpUrl(target)) {
60
+ throw new Error(`Invalid HTTP URL: ${target}`);
61
+ }
62
+ if ((options.env ?? []).length > 0 || options.cwd) {
63
+ throw new Error("--env/--cwd are only valid for stdio transport.");
64
+ }
65
+ const headers = {};
66
+ for (const item of options.header ?? []) {
67
+ const [key, value] = parseHeader(item);
68
+ headers[key] = value;
69
+ }
70
+ const spec = {
71
+ transport: "http",
72
+ url: target,
73
+ headers: Object.keys(headers).length > 0 ? headers : undefined
74
+ };
75
+ return { name, spec };
76
+ }
77
+ if ((options.header ?? []).length > 0) {
78
+ throw new Error("--header is only valid for HTTP transport.");
79
+ }
80
+ const env = {};
81
+ for (const item of options.env ?? []) {
82
+ const [key, value] = parseEnvVar(item);
83
+ env[key] = value;
84
+ }
85
+ const spec = {
86
+ transport: "stdio",
87
+ command: target,
88
+ args: trailing.length > 0 ? trailing : undefined,
89
+ env: Object.keys(env).length > 0 ? env : undefined,
90
+ cwd: options.cwd?.trim() || undefined
91
+ };
92
+ return { name, spec };
93
+ }
94
+ function getServerSpecOrThrow(config, serverName) {
95
+ const spec = config.servers[serverName];
96
+ if (!spec) {
97
+ throw new Error(`Server "${serverName}" does not exist.`);
98
+ }
99
+ return spec;
100
+ }
101
+ function redactAuthValue(value) {
102
+ if (value.startsWith("secret://")) {
103
+ return value;
104
+ }
105
+ return "<inline>";
106
+ }
107
+ function parseClientList(values) {
108
+ if (!values || values.length === 0) {
109
+ return undefined;
110
+ }
111
+ const normalized = values.flatMap((value) => value.split(",")).map((value) => value.trim()).filter(Boolean);
112
+ const unique = Array.from(new Set(normalized));
113
+ for (const client of unique) {
114
+ if (!VALID_CLIENTS.includes(client)) {
115
+ throw new Error(`Unknown client: ${client}. Valid clients: ${VALID_CLIENTS.join(", ")}`);
116
+ }
117
+ }
118
+ return unique;
119
+ }
120
+ function ensureExitCodeForSyncFailures(hasErrors) {
121
+ if (hasErrors) {
122
+ process.exitCode = 2;
123
+ }
124
+ }
125
+ function printSyncSummary(summary, asJson = false) {
126
+ if (asJson) {
127
+ process.stdout.write(`${JSON.stringify(summary, null, 2)}\n`);
128
+ return;
129
+ }
130
+ process.stdout.write(`Gateway: ${summary.gatewayUrl}\n`);
131
+ for (const result of summary.results) {
132
+ process.stdout.write(`- ${result.clientId}: ${result.status}`);
133
+ if (result.configPath) {
134
+ process.stdout.write(` (${result.configPath})`);
135
+ }
136
+ if (result.message) {
137
+ process.stdout.write(` - ${result.message}`);
138
+ }
139
+ process.stdout.write("\n");
140
+ }
141
+ }
142
+ async function ensureDaemonIfEnabled(cliPath, secrets) {
143
+ if (process.env.MCPX_SKIP_DAEMON_AUTOSTART === "1") {
144
+ return;
145
+ }
146
+ const config = loadConfig();
147
+ if (!config.gateway.autoStart) {
148
+ return;
149
+ }
150
+ await startDaemon(config, cliPath, secrets);
151
+ }
152
+ async function autoSyncManagedEntries(config) {
153
+ const secrets = new SecretsManager();
154
+ await ensureDaemonIfEnabled(process.argv[1] ?? "", secrets);
155
+ const summary = syncAllClients(config, secrets);
156
+ printSyncSummary(summary, false);
157
+ ensureExitCodeForSyncFailures(summary.hasErrors);
158
+ }
159
+ function registerAddCommand(parent) {
160
+ parent
161
+ .command("add [values...]")
162
+ .allowUnknownOption(true)
163
+ .option("--transport <transport>", "MCP transport (auto|http|stdio)", "auto")
164
+ .option("--header <header>", "Header entry in KEY=VALUE form", (value, previous = []) => [...previous, value], [])
165
+ .option("--env <env>", "Env entry in KEY=VALUE form for stdio upstreams", (value, previous = []) => [...previous, value], [])
166
+ .option("--cwd <cwd>", "Working directory for stdio upstream")
167
+ .option("--force", "Overwrite existing server with same name")
168
+ .description("Add an upstream MCP server")
169
+ .action(async (values, options) => {
170
+ const config = loadConfig();
171
+ const parsed = parseAddServerSpec(values ?? [], options);
172
+ addServer(config, parsed.name, parsed.spec, options.force ?? false);
173
+ saveConfig(config);
174
+ process.stdout.write(`Added server: ${parsed.name} (${parsed.spec.transport})\n`);
175
+ process.stdout.write("Auto-syncing managed gateway entries across all supported clients...\n");
176
+ await autoSyncManagedEntries(config);
177
+ });
178
+ }
179
+ function registerRemoveCommand(parent) {
180
+ parent
181
+ .command("remove <name>")
182
+ .option("--force", "Do not error if server does not exist")
183
+ .description("Remove an upstream MCP server")
184
+ .action(async (name, options) => {
185
+ const config = loadConfig();
186
+ removeServer(config, name, options.force ?? false);
187
+ saveConfig(config);
188
+ process.stdout.write(`Removed server: ${name}\n`);
189
+ process.stdout.write("Auto-syncing managed gateway entries across all supported clients...\n");
190
+ await autoSyncManagedEntries(config);
191
+ });
192
+ }
193
+ function registerListCommand(parent) {
194
+ parent
195
+ .command("list")
196
+ .option("--json", "Output JSON")
197
+ .description("List configured upstream MCP servers")
198
+ .action((options) => {
199
+ const config = loadConfig();
200
+ const servers = Object.entries(config.servers).map(([name, spec]) => ({ name, ...spec }));
201
+ if (options.json) {
202
+ process.stdout.write(`${JSON.stringify({ servers }, null, 2)}\n`);
203
+ return;
204
+ }
205
+ if (servers.length === 0) {
206
+ process.stdout.write("No upstream servers configured.\n");
207
+ return;
208
+ }
209
+ for (const server of servers) {
210
+ if (server.transport === "http") {
211
+ process.stdout.write(`- ${server.name} (http) ${server.url}\n`);
212
+ }
213
+ else {
214
+ const args = (server.args ?? []).join(" ");
215
+ process.stdout.write(`- ${server.name} (stdio) ${server.command}${args ? ` ${args}` : ""}\n`);
216
+ }
217
+ }
218
+ });
219
+ }
220
+ function registerSyncCommand(program) {
221
+ program
222
+ .command("sync [clients...]")
223
+ .option("--client <id>", "Limit sync to specific client(s), comma-separated or repeated", (value, prev = []) => [...prev, value], [])
224
+ .option("--json", "Output JSON")
225
+ .description("Sync gateway configuration to supported clients (e.g. `mcpx sync claude`)")
226
+ .action(async (clients, options) => {
227
+ const config = loadConfig();
228
+ const targetClients = parseClientList([...(clients ?? []), ...(options.client ?? [])]);
229
+ const secrets = new SecretsManager();
230
+ await ensureDaemonIfEnabled(process.argv[1] ?? "", secrets);
231
+ const summary = syncAllClients(config, secrets, targetClients);
232
+ printSyncSummary(summary, options.json ?? false);
233
+ ensureExitCodeForSyncFailures(summary.hasErrors);
234
+ });
235
+ }
236
+ function registerStatusCommand(program) {
237
+ program
238
+ .command("status")
239
+ .option("--json", "Output JSON")
240
+ .description("Show gateway, daemon, and client sync status")
241
+ .action((options) => {
242
+ const config = loadConfig();
243
+ const daemon = getDaemonStatus(config);
244
+ const statusPayload = {
245
+ gatewayUrl: `http://127.0.0.1:${config.gateway.port}/mcp`,
246
+ daemon,
247
+ clients: config.clients,
248
+ upstreamCount: Object.keys(config.servers).length
249
+ };
250
+ if (options.json) {
251
+ process.stdout.write(`${JSON.stringify(statusPayload, null, 2)}\n`);
252
+ return;
253
+ }
254
+ process.stdout.write(`Gateway URL: ${statusPayload.gatewayUrl}\n`);
255
+ process.stdout.write(`Daemon: ${daemon.running ? `running (pid ${daemon.pid})` : "stopped"}\n`);
256
+ process.stdout.write(`Upstream servers: ${statusPayload.upstreamCount}\n`);
257
+ for (const client of VALID_CLIENTS) {
258
+ const state = config.clients[client];
259
+ if (!state) {
260
+ process.stdout.write(`- ${client}: SKIPPED\n`);
261
+ }
262
+ else {
263
+ process.stdout.write(`- ${client}: ${state.status}${state.message ? ` - ${state.message}` : ""}\n`);
264
+ }
265
+ }
266
+ });
267
+ }
268
+ function registerDoctorCommand(program) {
269
+ program
270
+ .command("doctor")
271
+ .option("--json", "Output JSON")
272
+ .description("Run local health checks")
273
+ .action((options) => {
274
+ const config = loadConfig();
275
+ const adapters = getAdapters();
276
+ const checks = [];
277
+ checks.push({
278
+ check: "config_path",
279
+ status: fs.existsSync(getConfigPath()) ? "ok" : "warn",
280
+ details: getConfigPath()
281
+ });
282
+ checks.push({
283
+ check: "managed_index_path",
284
+ status: fs.existsSync(getManagedIndexPath()) ? "ok" : "warn",
285
+ details: getManagedIndexPath()
286
+ });
287
+ if (process.platform === "darwin") {
288
+ try {
289
+ execFileSync("security", ["help"], { stdio: "ignore" });
290
+ checks.push({ check: "macos_keychain", status: "ok", details: "security CLI available" });
291
+ }
292
+ catch {
293
+ checks.push({ check: "macos_keychain", status: "fail", details: "security CLI unavailable" });
294
+ }
295
+ }
296
+ else {
297
+ checks.push({ check: "macos_keychain", status: "warn", details: "Non-macOS platform; keychain integration unavailable" });
298
+ }
299
+ const daemon = getDaemonStatus(config);
300
+ checks.push({
301
+ check: "daemon",
302
+ status: daemon.running ? "ok" : "warn",
303
+ details: daemon.running ? `pid ${daemon.pid}` : "not running"
304
+ });
305
+ for (const adapter of adapters) {
306
+ const configPath = adapter.detectConfigPath();
307
+ if (!configPath) {
308
+ checks.push({
309
+ check: `client_${adapter.id}`,
310
+ status: "warn",
311
+ details: "no known config path"
312
+ });
313
+ continue;
314
+ }
315
+ checks.push({
316
+ check: `client_${adapter.id}`,
317
+ status: adapter.supportsHttp() ? "ok" : "warn",
318
+ details: `${configPath}${adapter.supportsHttp() ? "" : " (HTTP unsupported)"}`
319
+ });
320
+ }
321
+ if (options.json) {
322
+ process.stdout.write(`${JSON.stringify({ checks }, null, 2)}\n`);
323
+ return;
324
+ }
325
+ for (const item of checks) {
326
+ process.stdout.write(`[${item.status.toUpperCase()}] ${item.check}: ${item.details}\n`);
327
+ }
328
+ if (checks.some((item) => item.status === "fail")) {
329
+ process.exitCode = 1;
330
+ }
331
+ });
332
+ }
333
+ function registerDaemonCommands(program) {
334
+ const daemon = program.command("daemon").description("Manage mcpx local gateway daemon");
335
+ daemon
336
+ .command("start")
337
+ .description("Start background daemon")
338
+ .action(async () => {
339
+ const config = loadConfig();
340
+ const result = await startDaemon(config, process.argv[1] ?? "", new SecretsManager());
341
+ process.stdout.write(`${result.message} pid=${result.pid} port=${result.port}\n`);
342
+ });
343
+ daemon
344
+ .command("stop")
345
+ .description("Stop background daemon")
346
+ .action(() => {
347
+ const result = stopDaemon();
348
+ process.stdout.write(`${result.message}\n`);
349
+ });
350
+ daemon
351
+ .command("restart")
352
+ .description("Restart background daemon")
353
+ .action(async () => {
354
+ const config = loadConfig();
355
+ const result = await restartDaemon(config, process.argv[1] ?? "", new SecretsManager());
356
+ process.stdout.write(`mcpx daemon restarted. pid=${result.pid} port=${result.port}\n`);
357
+ });
358
+ daemon
359
+ .command("status")
360
+ .description("Show daemon status")
361
+ .action(() => {
362
+ const status = getDaemonStatus(loadConfig());
363
+ if (status.running) {
364
+ process.stdout.write(`running pid=${status.pid} port=${status.port}\n`);
365
+ }
366
+ else {
367
+ process.stdout.write("stopped\n");
368
+ }
369
+ });
370
+ daemon
371
+ .command("logs")
372
+ .option("--lines <n>", "Number of lines", "200")
373
+ .description("Show recent daemon logs")
374
+ .action((options) => {
375
+ const lines = Number(options.lines);
376
+ process.stdout.write(`${readDaemonLogs(Number.isFinite(lines) ? lines : 200)}\n`);
377
+ });
378
+ daemon
379
+ .command("run")
380
+ .option("--port <port>", "Port override")
381
+ .description("Run gateway in foreground (used by daemon manager)")
382
+ .action(async (options) => {
383
+ const config = loadConfig();
384
+ const port = options.port ? Number(options.port) : config.gateway.port;
385
+ if (!Number.isFinite(port) || port < 1 || port > 65535) {
386
+ throw new Error(`Invalid port: ${options.port}`);
387
+ }
388
+ process.stdout.write(`Starting mcpx gateway on http://127.0.0.1:${port}/mcp\n`);
389
+ await runDaemonForeground(config, port, new SecretsManager());
390
+ });
391
+ }
392
+ function registerSecretsCommands(program) {
393
+ const secret = program.command("secret").description("Manage keychain-backed secrets");
394
+ secret
395
+ .command("set <name>")
396
+ .option("--value <value>", "Secret value")
397
+ .description("Set secret in OS keychain")
398
+ .action((name, options) => {
399
+ const value = options.value ?? readSecretValueFromStdin();
400
+ new SecretsManager().setSecret(name, value);
401
+ process.stdout.write(`Secret set: ${name}\n`);
402
+ });
403
+ secret
404
+ .command("rm <name>")
405
+ .description("Remove secret from OS keychain")
406
+ .action((name) => {
407
+ new SecretsManager().removeSecret(name);
408
+ process.stdout.write(`Secret removed: ${name}\n`);
409
+ });
410
+ secret
411
+ .command("ls")
412
+ .description("List secret names tracked by mcpx")
413
+ .action(() => {
414
+ const names = new SecretsManager().listSecretNames();
415
+ if (names.length === 0) {
416
+ process.stdout.write("No tracked secrets.\n");
417
+ return;
418
+ }
419
+ for (const name of names) {
420
+ process.stdout.write(`${name}\n`);
421
+ }
422
+ });
423
+ }
424
+ function registerAuthCommands(program) {
425
+ const auth = program.command("auth").description("Auth utilities");
426
+ auth
427
+ .command("set <server>")
428
+ .option("--header <name>", "HTTP header name (default for HTTP servers: Authorization)")
429
+ .option("--env <name>", "Env var name (required for stdio servers)")
430
+ .option("--value <value>", "Auth value/token (if omitted, read from stdin)")
431
+ .option("--secret-name <name>", "Override keychain secret name")
432
+ .option("--raw", "Do not auto-prefix Authorization values with Bearer")
433
+ .description("Store auth in keychain and bind it to an upstream server")
434
+ .action((server, options) => {
435
+ const config = loadConfig();
436
+ const spec = getServerSpecOrThrow(config, server);
437
+ const target = resolveAuthTarget(spec, options.header, options.env);
438
+ const provided = options.value ?? readSecretValueFromStdin();
439
+ const authValue = maybePrefixBearer(target, provided, options.raw ?? false);
440
+ const secretName = options.secretName?.trim() || defaultAuthSecretName(server, target);
441
+ const secrets = new SecretsManager();
442
+ secrets.setSecret(secretName, authValue);
443
+ applyAuthReference(spec, target, toSecretRef(secretName));
444
+ saveConfig(config);
445
+ process.stdout.write(`Configured auth for server "${server}" via ${target.kind} "${target.key}".\n`);
446
+ process.stdout.write(`Stored secret: ${secretName}\n`);
447
+ });
448
+ auth
449
+ .command("rm <server>")
450
+ .option("--header <name>", "HTTP header name (default for HTTP servers: Authorization)")
451
+ .option("--env <name>", "Env var name (required for stdio servers)")
452
+ .option("--delete-secret", "Delete referenced keychain secret when removing binding")
453
+ .description("Remove auth binding from an upstream server")
454
+ .action((server, options) => {
455
+ const config = loadConfig();
456
+ const spec = getServerSpecOrThrow(config, server);
457
+ const target = resolveAuthTarget(spec, options.header, options.env);
458
+ const removedValue = removeAuthReference(spec, target);
459
+ if (!removedValue) {
460
+ process.stdout.write(`No auth binding found for server "${server}" at ${target.kind} "${target.key}".\n`);
461
+ return;
462
+ }
463
+ if (options.deleteSecret) {
464
+ const secretName = secretRefName(removedValue);
465
+ if (secretName) {
466
+ new SecretsManager().removeSecret(secretName);
467
+ process.stdout.write(`Removed binding and deleted secret: ${secretName}\n`);
468
+ }
469
+ else {
470
+ process.stdout.write("Removed binding. Value was inline (no keychain secret deleted).\n");
471
+ }
472
+ }
473
+ else {
474
+ process.stdout.write("Removed binding.\n");
475
+ }
476
+ saveConfig(config);
477
+ });
478
+ auth
479
+ .command("show [server]")
480
+ .option("--json", "Output JSON")
481
+ .description("Show configured upstream auth bindings (secret refs only, values redacted)")
482
+ .action((server, options) => {
483
+ const config = loadConfig();
484
+ const names = server ? [server] : Object.keys(config.servers);
485
+ const output = names.map((name) => {
486
+ const spec = getServerSpecOrThrow(config, name);
487
+ const bindings = listAuthBindings(spec).map((binding) => ({
488
+ kind: binding.kind,
489
+ key: binding.key,
490
+ value: redactAuthValue(binding.value)
491
+ }));
492
+ return {
493
+ server: name,
494
+ transport: spec.transport,
495
+ bindings
496
+ };
497
+ });
498
+ if (options.json) {
499
+ process.stdout.write(`${JSON.stringify({ auth: output }, null, 2)}\n`);
500
+ return;
501
+ }
502
+ if (output.length === 0) {
503
+ process.stdout.write("No upstream servers configured.\n");
504
+ return;
505
+ }
506
+ for (const serverEntry of output) {
507
+ process.stdout.write(`- ${serverEntry.server} (${serverEntry.transport})\n`);
508
+ if (serverEntry.bindings.length === 0) {
509
+ process.stdout.write(" (no auth bindings)\n");
510
+ continue;
511
+ }
512
+ for (const binding of serverEntry.bindings) {
513
+ process.stdout.write(` ${binding.kind}:${binding.key} = ${binding.value}\n`);
514
+ }
515
+ }
516
+ });
517
+ auth
518
+ .command("rotate-local-token")
519
+ .description("Rotate bearer token used for local client->mcpx auth")
520
+ .action(async () => {
521
+ const secrets = new SecretsManager();
522
+ secrets.rotateLocalToken("local_gateway_token");
523
+ const config = loadConfig();
524
+ await restartDaemon(config, process.argv[1] ?? "", secrets);
525
+ process.stdout.write("Rotated local gateway token and restarted daemon.\n");
526
+ process.stdout.write("No client configs were modified.\n");
527
+ process.stdout.write("Run `mcpx sync <client>` (or `mcpx sync`) to update managed `mcpx` entries with the new token.\n");
528
+ });
529
+ }
530
+ function registerClientsCommands(program) {
531
+ const clients = program.command("clients").description("Client adapter utilities");
532
+ clients
533
+ .command("list")
534
+ .option("--json", "Output JSON")
535
+ .description("List supported clients and detected config paths")
536
+ .action((options) => {
537
+ const payload = getAdapters().map((adapter) => ({
538
+ id: adapter.id,
539
+ supportsHttp: adapter.supportsHttp(),
540
+ configPath: adapter.detectConfigPath()
541
+ }));
542
+ if (options.json) {
543
+ process.stdout.write(`${JSON.stringify({ clients: payload }, null, 2)}\n`);
544
+ return;
545
+ }
546
+ for (const client of payload) {
547
+ process.stdout.write(`- ${client.id}: ${client.supportsHttp ? "HTTP" : "NO_HTTP"} ${client.configPath ?? "(unknown path)"}\n`);
548
+ }
549
+ });
550
+ }
551
+ function registerMcpCompat(program) {
552
+ const mcp = program.command("mcp").description("Compatibility namespace for MCP commands");
553
+ registerAddCommand(mcp);
554
+ registerRemoveCommand(mcp);
555
+ registerListCommand(mcp);
556
+ }
557
+ export async function runCli(argv = process.argv) {
558
+ const program = new Command();
559
+ program.name("mcpx").description("HTTP-first MCP gateway and multi-client installer").version(APP_VERSION);
560
+ registerAddCommand(program);
561
+ registerRemoveCommand(program);
562
+ registerListCommand(program);
563
+ registerSyncCommand(program);
564
+ registerStatusCommand(program);
565
+ registerDoctorCommand(program);
566
+ registerDaemonCommands(program);
567
+ registerSecretsCommands(program);
568
+ registerAuthCommands(program);
569
+ registerClientsCommands(program);
570
+ registerMcpCompat(program);
571
+ await program.parseAsync(argv);
572
+ }
573
+ void runCli().catch((error) => {
574
+ process.stderr.write(`${error.message}\n`);
575
+ process.exit(1);
576
+ });
577
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpxConfig } from "../types.js";
2
+ export declare function defaultConfig(): McpxConfig;
3
+ export declare function loadConfig(configPath?: string): McpxConfig;
4
+ export declare function saveConfig(config: McpxConfig, configPath?: string): void;