@kwonye/mcpx 0.1.0 → 0.1.43

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 (79) hide show
  1. package/dist/adapters/claude-desktop.d.ts +8 -0
  2. package/dist/adapters/claude-desktop.js +116 -0
  3. package/dist/adapters/claude-desktop.js.map +1 -0
  4. package/dist/adapters/claude.d.ts +2 -1
  5. package/dist/adapters/claude.js +70 -23
  6. package/dist/adapters/claude.js.map +1 -1
  7. package/dist/adapters/cline.d.ts +2 -1
  8. package/dist/adapters/cline.js +72 -1
  9. package/dist/adapters/cline.js.map +1 -1
  10. package/dist/adapters/codex.d.ts +2 -1
  11. package/dist/adapters/codex.js +77 -2
  12. package/dist/adapters/codex.js.map +1 -1
  13. package/dist/adapters/cursor.d.ts +2 -1
  14. package/dist/adapters/cursor.js +72 -1
  15. package/dist/adapters/cursor.js.map +1 -1
  16. package/dist/adapters/index.js +9 -1
  17. package/dist/adapters/index.js.map +1 -1
  18. package/dist/adapters/kiro.d.ts +8 -0
  19. package/dist/adapters/kiro.js +122 -0
  20. package/dist/adapters/kiro.js.map +1 -0
  21. package/dist/adapters/opencode.d.ts +8 -0
  22. package/dist/adapters/opencode.js +124 -0
  23. package/dist/adapters/opencode.js.map +1 -0
  24. package/dist/adapters/qwen.d.ts +8 -0
  25. package/dist/adapters/qwen.js +114 -0
  26. package/dist/adapters/qwen.js.map +1 -0
  27. package/dist/adapters/{utils.d.ts → utils/index.d.ts} +9 -1
  28. package/dist/adapters/{utils.js → utils/index.js} +59 -2
  29. package/dist/adapters/utils/index.js.map +1 -0
  30. package/dist/adapters/vscode.d.ts +2 -1
  31. package/dist/adapters/vscode.js +72 -1
  32. package/dist/adapters/vscode.js.map +1 -1
  33. package/dist/cli.js +586 -23
  34. package/dist/cli.js.map +1 -1
  35. package/dist/compat/claude.d.ts +28 -0
  36. package/dist/compat/claude.js +252 -0
  37. package/dist/compat/claude.js.map +1 -0
  38. package/dist/compat/codex.d.ts +22 -0
  39. package/dist/compat/codex.js +179 -0
  40. package/dist/compat/codex.js.map +1 -0
  41. package/dist/compat/index.d.ts +28 -0
  42. package/dist/compat/index.js +108 -0
  43. package/dist/compat/index.js.map +1 -0
  44. package/dist/compat/qwen.d.ts +29 -0
  45. package/dist/compat/qwen.js +316 -0
  46. package/dist/compat/qwen.js.map +1 -0
  47. package/dist/compat/unsupported.d.ts +24 -0
  48. package/dist/compat/unsupported.js +47 -0
  49. package/dist/compat/unsupported.js.map +1 -0
  50. package/dist/compat/vscode.d.ts +21 -0
  51. package/dist/compat/vscode.js +164 -0
  52. package/dist/compat/vscode.js.map +1 -0
  53. package/dist/core/auth-probe.d.ts +9 -0
  54. package/dist/core/auth-probe.js +54 -0
  55. package/dist/core/auth-probe.js.map +1 -0
  56. package/dist/core/config.js +1 -1
  57. package/dist/core/config.js.map +1 -1
  58. package/dist/core/index.d.ts +15 -0
  59. package/dist/core/index.js +21 -0
  60. package/dist/core/index.js.map +1 -0
  61. package/dist/core/registry.d.ts +1 -0
  62. package/dist/core/registry.js +7 -0
  63. package/dist/core/registry.js.map +1 -1
  64. package/dist/core/status.d.ts +32 -0
  65. package/dist/core/status.js +63 -0
  66. package/dist/core/status.js.map +1 -0
  67. package/dist/core/sync.d.ts +2 -1
  68. package/dist/core/sync.js +70 -7
  69. package/dist/core/sync.js.map +1 -1
  70. package/dist/gateway/server.js +33 -3
  71. package/dist/gateway/server.js.map +1 -1
  72. package/dist/types.d.ts +54 -1
  73. package/dist/version.d.ts +1 -1
  74. package/dist/version.js +1 -1
  75. package/dist/version.js.map +1 -1
  76. package/package.json +14 -3
  77. package/LICENSE +0 -21
  78. package/README.md +0 -150
  79. package/dist/adapters/utils.js.map +0 -1
@@ -0,0 +1,164 @@
1
+ /**
2
+ * VS Code MCP compatibility layer.
3
+ *
4
+ * Supports:
5
+ * - code --add-mcp '<json>' with single-server JSON
6
+ * - Fields: name, type, url, command, args, env, headers
7
+ *
8
+ * Rejects:
9
+ * - VS Code-only fields: sandbox, scope, container-specific config
10
+ * - Multi-server JSON arrays
11
+ * - Invalid JSON
12
+ */
13
+ /**
14
+ * VS Code-only fields that cannot be mapped to mcpx.
15
+ */
16
+ const VS_CODE_ONLY_FIELDS = [
17
+ "sandbox",
18
+ "scope",
19
+ "container",
20
+ "containerId",
21
+ "workspaceFolder",
22
+ "lifecycle",
23
+ "alwaysAllow",
24
+ "disabled"
25
+ ];
26
+ /**
27
+ * Validates VS Code server config and rejects unsupported fields.
28
+ */
29
+ function validateVSCodeConfig(config) {
30
+ // Check for VS Code-only fields
31
+ for (const field of VS_CODE_ONLY_FIELDS) {
32
+ if (config[field] !== undefined) {
33
+ return `VS Code field "${field}" is not supported. Use global \`mcpx add\` for advanced configuration.`;
34
+ }
35
+ }
36
+ // Validate required fields
37
+ if (!config.name) {
38
+ return "VS Code config must include 'name' field.";
39
+ }
40
+ // Must have either url (HTTP) or command (stdio)
41
+ if (!config.url && !config.command) {
42
+ return "VS Code config must include either 'url' (HTTP) or 'command' (stdio) field.";
43
+ }
44
+ // Cannot have both url and command
45
+ if (config.url && config.command) {
46
+ return "VS Code config cannot have both 'url' and 'command'. Specify one transport type.";
47
+ }
48
+ // Validate type field if present
49
+ if (config.type !== undefined && config.type !== "http" && config.type !== "stdio") {
50
+ return `Invalid 'type' value: ${config.type}. Must be 'http' or 'stdio'.`;
51
+ }
52
+ // Validate env is a simple string map
53
+ if (config.env !== undefined) {
54
+ if (typeof config.env !== "object" || config.env === null || Array.isArray(config.env)) {
55
+ return "'env' must be a key-value object.";
56
+ }
57
+ for (const [key, value] of Object.entries(config.env)) {
58
+ if (typeof value !== "string") {
59
+ return `'env["${key}"]' must be a string value.`;
60
+ }
61
+ }
62
+ }
63
+ // Validate headers is a simple string map
64
+ if (config.headers !== undefined) {
65
+ if (typeof config.headers !== "object" || config.headers === null || Array.isArray(config.headers)) {
66
+ return "'headers' must be a key-value object.";
67
+ }
68
+ for (const [key, value] of Object.entries(config.headers)) {
69
+ if (typeof value !== "string") {
70
+ return `'headers["${key}"]' must be a string value.`;
71
+ }
72
+ }
73
+ }
74
+ // Validate args is an array of strings
75
+ if (config.args !== undefined) {
76
+ if (!Array.isArray(config.args)) {
77
+ return "'args' must be an array.";
78
+ }
79
+ for (let i = 0; i < config.args.length; i++) {
80
+ if (typeof config.args[i] !== "string") {
81
+ return `'args[${i}]' must be a string.`;
82
+ }
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+ /**
88
+ * Normalizes VS Code JSON config to canonical mcpx add format.
89
+ *
90
+ * VS Code HTTP: { name, url, headers? }
91
+ * -> mcpx add <name> <url> --header "Key=Value"...
92
+ *
93
+ * VS Code stdio: { name, command, args?, env? }
94
+ * -> mcpx add <name> <command> [args...] --env KEY=VALUE...
95
+ */
96
+ function normalizeVSCodeConfig(config) {
97
+ const normalized = [config.name];
98
+ if (config.url) {
99
+ // HTTP mode
100
+ normalized.push(config.url);
101
+ // Add headers
102
+ if (config.headers) {
103
+ for (const [key, value] of Object.entries(config.headers)) {
104
+ normalized.push("--header", `${key}=${value}`);
105
+ }
106
+ }
107
+ }
108
+ else if (config.command) {
109
+ // stdio mode
110
+ normalized.push(config.command);
111
+ // Add args
112
+ if (config.args && config.args.length > 0) {
113
+ normalized.push(...config.args);
114
+ }
115
+ // Add env vars
116
+ if (config.env) {
117
+ for (const [key, value] of Object.entries(config.env)) {
118
+ normalized.push("--env", `${key}=${value}`);
119
+ }
120
+ }
121
+ }
122
+ return normalized;
123
+ }
124
+ /**
125
+ * Parses VS Code --add-mcp JSON payload and normalizes to mcpx add format.
126
+ */
127
+ export function parseVSCodeArgs(jsonPayload) {
128
+ if (!jsonPayload) {
129
+ return {
130
+ normalizedArgs: [],
131
+ error: "Usage: mcpx code --add-mcp '<json>'"
132
+ };
133
+ }
134
+ // Parse JSON
135
+ let config;
136
+ try {
137
+ config = JSON.parse(jsonPayload);
138
+ }
139
+ catch (parseError) {
140
+ return {
141
+ normalizedArgs: [],
142
+ error: `Invalid JSON: ${parseError.message}`
143
+ };
144
+ }
145
+ // Reject arrays - we only support single-server config
146
+ if (Array.isArray(config)) {
147
+ return {
148
+ normalizedArgs: [],
149
+ error: "Array of servers not supported. Use `mcpx add` for each server individually."
150
+ };
151
+ }
152
+ // Validate config
153
+ const validationError = validateVSCodeConfig(config);
154
+ if (validationError) {
155
+ return {
156
+ normalizedArgs: [],
157
+ error: validationError
158
+ };
159
+ }
160
+ // Normalize to mcpx add format
161
+ const normalized = normalizeVSCodeConfig(config);
162
+ return { normalizedArgs: normalized };
163
+ }
164
+ //# sourceMappingURL=vscode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/compat/vscode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { HttpServerSpec } from "../types.js";
2
+ import { SecretsManager } from "./secrets.js";
3
+ export interface HttpAuthProbeResult {
4
+ authRequired: boolean;
5
+ status?: number;
6
+ wwwAuthenticate?: string;
7
+ error?: string;
8
+ }
9
+ export declare function probeHttpAuthRequirement(spec: HttpServerSpec, secrets: SecretsManager, timeoutMs?: number): Promise<HttpAuthProbeResult>;
@@ -0,0 +1,54 @@
1
+ const JSON_RPC_VERSION = "2.0";
2
+ const DEFAULT_AUTH_PROBE_TIMEOUT_MS = 8000;
3
+ function resolveHeaders(spec, secrets) {
4
+ const headers = {
5
+ "content-type": "application/json",
6
+ accept: "application/json, text/event-stream"
7
+ };
8
+ for (const [key, value] of Object.entries(spec.headers ?? {})) {
9
+ headers[key] = secrets.resolveMaybeSecret(value);
10
+ }
11
+ return headers;
12
+ }
13
+ export async function probeHttpAuthRequirement(spec, secrets, timeoutMs = DEFAULT_AUTH_PROBE_TIMEOUT_MS) {
14
+ const timeoutController = new AbortController();
15
+ const timeoutHandle = setTimeout(() => timeoutController.abort(), timeoutMs);
16
+ try {
17
+ const headers = resolveHeaders(spec, secrets);
18
+ const response = await fetch(spec.url, {
19
+ method: "POST",
20
+ headers,
21
+ body: JSON.stringify({
22
+ jsonrpc: JSON_RPC_VERSION,
23
+ id: "mcpx-auth-probe",
24
+ method: "tools/list",
25
+ params: {}
26
+ }),
27
+ signal: timeoutController.signal
28
+ });
29
+ if (response.status === 401 || response.status === 403) {
30
+ return {
31
+ authRequired: true,
32
+ status: response.status,
33
+ wwwAuthenticate: response.headers.get("www-authenticate") ?? undefined
34
+ };
35
+ }
36
+ return {
37
+ authRequired: false,
38
+ status: response.status
39
+ };
40
+ }
41
+ catch (error) {
42
+ const isAbort = error.name === "AbortError";
43
+ return {
44
+ authRequired: false,
45
+ error: isAbort
46
+ ? `Auth probe timed out after ${timeoutMs}ms.`
47
+ : error.message
48
+ };
49
+ }
50
+ finally {
51
+ clearTimeout(timeoutHandle);
52
+ }
53
+ }
54
+ //# sourceMappingURL=auth-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-probe.js","sourceRoot":"","sources":["../../src/core/auth-probe.ts"],"names":[],"mappings":"AAGA,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAS3C,SAAS,cAAc,CAAC,IAAoB,EAAE,OAAuB;IACnE,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,MAAM,EAAE,qCAAqC;KAC9C,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAoB,EACpB,OAAuB,EACvB,SAAS,GAAG,6BAA6B;IAEzC,MAAM,iBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAE7E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,gBAAgB;gBACzB,EAAE,EAAE,iBAAiB;gBACrB,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,EAAE;aACX,CAAC;YACF,MAAM,EAAE,iBAAiB,CAAC,MAAM;SACjC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,OAAO;gBACL,YAAY,EAAE,IAAI;gBAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,SAAS;aACvE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAI,KAA2B,CAAC,IAAI,KAAK,YAAY,CAAC;QACnE,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,OAAO;gBACZ,CAAC,CAAC,8BAA8B,SAAS,KAAK;gBAC9C,CAAC,CAAE,KAAe,CAAC,OAAO;SAC7B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -54,7 +54,7 @@ export function loadConfig(configPath = getConfigPath()) {
54
54
  }
55
55
  const clientEntries = {};
56
56
  for (const [key, value] of Object.entries(parsed.data.clients)) {
57
- if (["claude", "codex", "cursor", "cline", "vscode"].includes(key)) {
57
+ if (["claude", "codex", "cursor", "cline", "opencode", "kiro", "vscode", "qwen"].includes(key)) {
58
58
  clientEntries[key] = value;
59
59
  }
60
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export { loadConfig, saveConfig, defaultConfig } from "./config.js";
2
+ export { getDaemonStatus, startDaemon, stopDaemon, restartDaemon, readDaemonLogs, runDaemonForeground } from "./daemon.js";
3
+ export type { DaemonStatus, DaemonStartResult } from "./daemon.js";
4
+ export { syncAllClients, getGatewayUrl } from "./sync.js";
5
+ export type { SyncSummary } from "./sync.js";
6
+ export { addServer, removeServer, updateServer } from "./registry.js";
7
+ export { SecretsManager } from "./secrets.js";
8
+ export { applyAuthReference, removeAuthReference, listAuthBindings, resolveAuthTarget, defaultAuthSecretName, maybePrefixBearer, secretRefName, toSecretRef } from "./server-auth.js";
9
+ export { buildStatusReport, STATUS_CLIENTS } from "./status.js";
10
+ export type { StatusReport, StatusServerEntry, StatusClientMapping, StatusAuthBinding } from "./status.js";
11
+ export { probeHttpAuthRequirement } from "./auth-probe.js";
12
+ export type { HttpAuthProbeResult } from "./auth-probe.js";
13
+ export { loadManagedIndex } from "./managed-index.js";
14
+ export { getConfigPath, getManagedIndexPath } from "./paths.js";
15
+ export type { McpxConfig, ClientId, ClientStatus, UpstreamServerSpec, HttpServerSpec, StdioServerSpec, GatewayConfig, ClientSyncState, ManagedIndex, ManagedEntry, ManagedClientState, ClientImportCandidate, ClientImportScanResult, ClientImportSkippedEntry, SyncImportReport, SyncImportedEntry, SyncDuplicateImportEntry, SyncImportConflictEntry, SyncImportErrorEntry, SyncResult, ManagedGatewayEntry } from "../types.js";
@@ -0,0 +1,21 @@
1
+ // Config
2
+ export { loadConfig, saveConfig, defaultConfig } from "./config.js";
3
+ // Daemon
4
+ export { getDaemonStatus, startDaemon, stopDaemon, restartDaemon, readDaemonLogs, runDaemonForeground } from "./daemon.js";
5
+ // Sync
6
+ export { syncAllClients, getGatewayUrl } from "./sync.js";
7
+ // Registry (server add/remove)
8
+ export { addServer, removeServer, updateServer } from "./registry.js";
9
+ // Secrets
10
+ export { SecretsManager } from "./secrets.js";
11
+ // Server Auth
12
+ export { applyAuthReference, removeAuthReference, listAuthBindings, resolveAuthTarget, defaultAuthSecretName, maybePrefixBearer, secretRefName, toSecretRef } from "./server-auth.js";
13
+ // Status
14
+ export { buildStatusReport, STATUS_CLIENTS } from "./status.js";
15
+ // Auth Probe
16
+ export { probeHttpAuthRequirement } from "./auth-probe.js";
17
+ // Managed Index
18
+ export { loadManagedIndex } from "./managed-index.js";
19
+ // Paths
20
+ export { getConfigPath, getManagedIndexPath } from "./paths.js";
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpE,SAAS;AACT,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAGrB,OAAO;AACP,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1D,+BAA+B;AAC/B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEtE,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,cAAc;AACd,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhE,aAAa;AACb,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -3,5 +3,6 @@ import { SecretsManager } from "./secrets.js";
3
3
  export declare function validateServerName(name: string): void;
4
4
  export declare function addServer(config: McpxConfig, name: string, spec: UpstreamServerSpec, force?: boolean): void;
5
5
  export declare function removeServer(config: McpxConfig, name: string, force?: boolean): void;
6
+ export declare function updateServer(config: McpxConfig, name: string, spec: UpstreamServerSpec): void;
6
7
  export declare function getGatewayTokenSecretName(config: McpxConfig): string;
7
8
  export declare function ensureGatewayToken(config: McpxConfig, secrets: SecretsManager): string;
@@ -16,6 +16,13 @@ export function removeServer(config, name, force = false) {
16
16
  }
17
17
  delete config.servers[name];
18
18
  }
19
+ export function updateServer(config, name, spec) {
20
+ validateServerName(name);
21
+ if (!config.servers[name]) {
22
+ throw new Error(`Server \"${name}\" does not exist.`);
23
+ }
24
+ config.servers[name] = spec;
25
+ }
19
26
  export function getGatewayTokenSecretName(config) {
20
27
  if (!config.gateway.tokenRef.startsWith("secret://")) {
21
28
  return "local_gateway_token";
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;IACvH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAkB,EAAE,IAAY,EAAE,IAAwB,EAAE,KAAK,GAAG,KAAK;IACjG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,8CAA8C,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,IAAY,EAAE,KAAK,GAAG,KAAK;IAC1E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAkB;IAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACrD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAkB,EAAE,OAAuB;IAC5E,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;IACvH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAkB,EAAE,IAAY,EAAE,IAAwB,EAAE,KAAK,GAAG,KAAK;IACjG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,8CAA8C,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,IAAY,EAAE,KAAK,GAAG,KAAK;IAC1E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,IAAY,EAAE,IAAwB;IACrF,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAkB;IAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACrD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAkB,EAAE,OAAuB;IAC5E,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type DaemonStatus } from "./daemon.js";
2
+ import type { ClientId, ClientStatus, ManagedIndex, McpxConfig, UpstreamServerSpec } from "../types.js";
3
+ export declare const STATUS_CLIENTS: ClientId[];
4
+ export interface StatusAuthBinding {
5
+ kind: "header" | "env";
6
+ key: string;
7
+ value: string;
8
+ secretName?: string;
9
+ }
10
+ export interface StatusClientMapping {
11
+ clientId: ClientId;
12
+ managed: boolean;
13
+ status: ClientStatus;
14
+ configPath?: string;
15
+ message?: string;
16
+ lastSyncAt?: string;
17
+ }
18
+ export interface StatusServerEntry {
19
+ name: string;
20
+ transport: UpstreamServerSpec["transport"];
21
+ target: string;
22
+ authBindings: StatusAuthBinding[];
23
+ clients: StatusClientMapping[];
24
+ }
25
+ export interface StatusReport {
26
+ gatewayUrl: string;
27
+ daemon: DaemonStatus;
28
+ upstreamCount: number;
29
+ servers: StatusServerEntry[];
30
+ clients: McpxConfig["clients"];
31
+ }
32
+ export declare function buildStatusReport(config: McpxConfig, managedIndex: ManagedIndex, daemon?: DaemonStatus): StatusReport;
@@ -0,0 +1,63 @@
1
+ import { getDaemonStatus } from "./daemon.js";
2
+ import { getGatewayUrl } from "./sync.js";
3
+ import { listAuthBindings, secretRefName } from "./server-auth.js";
4
+ export const STATUS_CLIENTS = ["claude", "codex", "cursor", "cline", "opencode", "kiro", "vscode", "qwen"];
5
+ function describeServerTarget(spec) {
6
+ if (spec.transport === "http") {
7
+ return spec.url;
8
+ }
9
+ const args = (spec.args ?? []).join(" ");
10
+ const command = `${spec.command}${args ? ` ${args}` : ""}`;
11
+ return spec.cwd ? `${command} (cwd: ${spec.cwd})` : command;
12
+ }
13
+ function deriveClientStatus(managed, configured) {
14
+ if (configured) {
15
+ return configured;
16
+ }
17
+ return managed ? "SYNCED" : "SKIPPED";
18
+ }
19
+ function buildClientMappings(config, managedIndex, serverName) {
20
+ return STATUS_CLIENTS.map((clientId) => {
21
+ const configState = config.clients[clientId];
22
+ const managedClient = managedIndex.managed[clientId];
23
+ const managedEntry = managedClient?.entries?.[`${serverName} (mcpx)`];
24
+ const managed = Boolean(managedEntry);
25
+ return {
26
+ clientId,
27
+ managed,
28
+ status: deriveClientStatus(managed, configState?.status),
29
+ configPath: managedClient?.configPath ?? configState?.configPath,
30
+ message: configState?.message,
31
+ lastSyncAt: managedEntry?.lastSyncedAt ?? configState?.lastSyncAt
32
+ };
33
+ });
34
+ }
35
+ function buildAuthBindings(spec) {
36
+ return listAuthBindings(spec).map((binding) => ({
37
+ kind: binding.kind,
38
+ key: binding.key,
39
+ value: binding.value,
40
+ secretName: secretRefName(binding.value) ?? undefined
41
+ }));
42
+ }
43
+ export function buildStatusReport(config, managedIndex, daemon = getDaemonStatus(config)) {
44
+ const serverNames = Object.keys(config.servers).sort((left, right) => left.localeCompare(right));
45
+ const servers = serverNames.map((name) => {
46
+ const spec = config.servers[name];
47
+ return {
48
+ name,
49
+ transport: spec.transport,
50
+ target: describeServerTarget(spec),
51
+ authBindings: buildAuthBindings(spec),
52
+ clients: buildClientMappings(config, managedIndex, name)
53
+ };
54
+ });
55
+ return {
56
+ gatewayUrl: getGatewayUrl(config),
57
+ daemon,
58
+ upstreamCount: servers.length,
59
+ servers,
60
+ clients: config.clients
61
+ };
62
+ }
63
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/core/status.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import type { ClientId, McpxConfig, SyncResult } from "../types.js";
1
+ import type { ClientId, McpxConfig, SyncImportReport, SyncResult } from "../types.js";
2
2
  import { SecretsManager } from "./secrets.js";
3
3
  export interface SyncSummary {
4
4
  gatewayUrl: string;
5
+ imports: SyncImportReport;
5
6
  results: SyncResult[];
6
7
  hasErrors: boolean;
7
8
  }
package/dist/core/sync.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { getAdapters } from "../adapters/index.js";
2
+ import { serverSpecsEqual } from "../adapters/utils/index.js";
2
3
  import { loadManagedIndex, saveManagedIndex } from "./managed-index.js";
3
4
  import { getManagedIndexPath } from "./paths.js";
4
5
  import { ensureGatewayToken } from "./registry.js";
@@ -9,10 +10,10 @@ export function getGatewayUrl(config) {
9
10
  function buildManagedEntries(config, gatewayUrl, localToken) {
10
11
  const names = Object.keys(config.servers);
11
12
  return names.map((name) => ({
12
- name,
13
+ name: `${name} (mcpx)`,
13
14
  url: `${gatewayUrl}?upstream=${encodeURIComponent(name)}`,
14
15
  headers: {
15
- "x-mcpx-local-token": localToken
16
+ Authorization: `Bearer ${localToken}`
16
17
  }
17
18
  }));
18
19
  }
@@ -20,12 +21,70 @@ export function syncAllClients(config, secrets, targetClients) {
20
21
  const adapters = getAdapters();
21
22
  const managedIndexPath = getManagedIndexPath();
22
23
  const managedIndex = loadManagedIndex(managedIndexPath);
23
- const localToken = ensureGatewayToken(config, secrets);
24
- const gatewayUrl = getGatewayUrl(config);
25
- const managedEntries = buildManagedEntries(config, gatewayUrl, localToken);
26
24
  const filteredAdapters = targetClients && targetClients.length > 0
27
25
  ? adapters.filter((adapter) => targetClients.includes(adapter.id))
28
26
  : adapters;
27
+ const imports = {
28
+ imported: [],
29
+ duplicates: [],
30
+ skipped: [],
31
+ conflicts: [],
32
+ errors: []
33
+ };
34
+ const sourceEntriesToRemove = new Map();
35
+ for (const adapter of filteredAdapters) {
36
+ try {
37
+ const scan = adapter.scanForImports(config, managedIndex);
38
+ imports.skipped.push(...scan.skipped);
39
+ for (const candidate of scan.candidates) {
40
+ const existing = config.servers[candidate.serverName];
41
+ if (!existing) {
42
+ config.servers[candidate.serverName] = candidate.spec;
43
+ imports.imported.push({
44
+ clientId: candidate.clientId,
45
+ configPath: candidate.configPath,
46
+ sourceEntryName: candidate.sourceEntryName,
47
+ serverName: candidate.serverName
48
+ });
49
+ if (!sourceEntriesToRemove.has(candidate.clientId)) {
50
+ sourceEntriesToRemove.set(candidate.clientId, new Set());
51
+ }
52
+ sourceEntriesToRemove.get(candidate.clientId)?.add(candidate.sourceEntryName);
53
+ continue;
54
+ }
55
+ if (serverSpecsEqual(existing, candidate.spec)) {
56
+ imports.duplicates.push({
57
+ clientId: candidate.clientId,
58
+ configPath: candidate.configPath,
59
+ sourceEntryName: candidate.sourceEntryName,
60
+ serverName: candidate.serverName
61
+ });
62
+ if (!sourceEntriesToRemove.has(candidate.clientId)) {
63
+ sourceEntriesToRemove.set(candidate.clientId, new Set());
64
+ }
65
+ sourceEntriesToRemove.get(candidate.clientId)?.add(candidate.sourceEntryName);
66
+ continue;
67
+ }
68
+ imports.conflicts.push({
69
+ clientId: candidate.clientId,
70
+ configPath: candidate.configPath,
71
+ sourceEntryName: candidate.sourceEntryName,
72
+ serverName: candidate.serverName,
73
+ message: `Server "${candidate.serverName}" already exists in mcpx with a different configuration.`
74
+ });
75
+ }
76
+ }
77
+ catch (error) {
78
+ imports.errors.push({
79
+ clientId: adapter.id,
80
+ configPath: adapter.detectConfigPath() ?? undefined,
81
+ message: error instanceof Error ? error.message : String(error)
82
+ });
83
+ }
84
+ }
85
+ const localToken = ensureGatewayToken(config, secrets);
86
+ const gatewayUrl = getGatewayUrl(config);
87
+ const managedEntries = buildManagedEntries(config, gatewayUrl, localToken);
29
88
  const results = [];
30
89
  for (const adapter of filteredAdapters) {
31
90
  if (!adapter.supportsHttp()) {
@@ -39,7 +98,8 @@ export function syncAllClients(config, secrets, targetClients) {
39
98
  const result = adapter.syncGateway(config, {
40
99
  managedEntries,
41
100
  managedIndex,
42
- managedIndexPath
101
+ managedIndexPath,
102
+ sourceEntriesToRemove: Array.from(sourceEntriesToRemove.get(adapter.id) ?? [])
43
103
  });
44
104
  results.push(result);
45
105
  }
@@ -53,9 +113,12 @@ export function syncAllClients(config, secrets, targetClients) {
53
113
  }
54
114
  saveManagedIndex(managedIndex, managedIndexPath);
55
115
  saveConfig(config);
56
- const hasErrors = results.some((result) => result.status === "ERROR");
116
+ const hasErrors = results.some((result) => result.status === "ERROR")
117
+ || imports.conflicts.length > 0
118
+ || imports.errors.length > 0;
57
119
  return {
58
120
  gatewayUrl,
121
+ imports,
59
122
  results,
60
123
  hasErrors
61
124
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"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"}