@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.
- package/LICENSE +21 -0
- package/README.md +150 -0
- package/dist/adapters/claude.d.ts +7 -0
- package/dist/adapters/claude.js +69 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/cline.d.ts +7 -0
- package/dist/adapters/cline.js +65 -0
- package/dist/adapters/cline.js.map +1 -0
- package/dist/adapters/codex.d.ts +7 -0
- package/dist/adapters/codex.js +52 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/cursor.d.ts +7 -0
- package/dist/adapters/cursor.js +52 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.js +15 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/utils.d.ts +10 -0
- package/dist/adapters/utils.js +69 -0
- package/dist/adapters/utils.js.map +1 -0
- package/dist/adapters/vscode.d.ts +7 -0
- package/dist/adapters/vscode.js +52 -0
- package/dist/adapters/vscode.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +577 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/config.d.ts +4 -0
- package/dist/core/config.js +71 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/daemon.d.ts +25 -0
- package/dist/core/daemon.js +174 -0
- package/dist/core/daemon.js.map +1 -0
- package/dist/core/managed-index.d.ts +4 -0
- package/dist/core/managed-index.js +22 -0
- package/dist/core/managed-index.js.map +1 -0
- package/dist/core/paths.d.ts +12 -0
- package/dist/core/paths.js +46 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/registry.d.ts +7 -0
- package/dist/core/registry.js +33 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/secrets.d.ts +16 -0
- package/dist/core/secrets.js +108 -0
- package/dist/core/secrets.js.map +1 -0
- package/dist/core/server-auth.d.ts +19 -0
- package/dist/core/server-auth.js +112 -0
- package/dist/core/server-auth.js.map +1 -0
- package/dist/core/sync.d.ts +9 -0
- package/dist/core/sync.js +63 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/gateway/server.d.ts +9 -0
- package/dist/gateway/server.js +960 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/types.d.ts +86 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/util/fs.d.ts +4 -0
- package/dist/util/fs.js +34 -0
- package/dist/util/fs.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- 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
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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|