@kwonye/mcpx 0.1.67 → 0.1.73

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 (144) hide show
  1. package/dist/adapters/claude-desktop.d.ts +1 -0
  2. package/dist/adapters/claude-desktop.d.ts.map +1 -0
  3. package/dist/adapters/claude.d.ts +1 -0
  4. package/dist/adapters/claude.d.ts.map +1 -0
  5. package/dist/adapters/cline.d.ts +1 -0
  6. package/dist/adapters/cline.d.ts.map +1 -0
  7. package/dist/adapters/codex.d.ts +1 -0
  8. package/dist/adapters/codex.d.ts.map +1 -0
  9. package/dist/adapters/cursor.d.ts +1 -0
  10. package/dist/adapters/cursor.d.ts.map +1 -0
  11. package/dist/adapters/index.d.ts +1 -0
  12. package/dist/adapters/index.d.ts.map +1 -0
  13. package/dist/adapters/kiro.d.ts +1 -0
  14. package/dist/adapters/kiro.d.ts.map +1 -0
  15. package/dist/adapters/opencode.d.ts +1 -0
  16. package/dist/adapters/opencode.d.ts.map +1 -0
  17. package/dist/adapters/qwen.d.ts +1 -0
  18. package/dist/adapters/qwen.d.ts.map +1 -0
  19. package/dist/adapters/utils/index.d.ts +2 -0
  20. package/dist/adapters/utils/index.d.ts.map +1 -0
  21. package/dist/adapters/vscode.d.ts +1 -0
  22. package/dist/adapters/vscode.d.ts.map +1 -0
  23. package/dist/cli-7rggq938.js +3292 -0
  24. package/dist/cli-ezvj44tr.js +3292 -0
  25. package/dist/cli-q8de7zb0.js +12 -0
  26. package/dist/cli.d.ts +1 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +1880 -1131
  29. package/dist/compat/claude.d.ts +1 -0
  30. package/dist/compat/claude.d.ts.map +1 -0
  31. package/dist/compat/codex.d.ts +1 -0
  32. package/dist/compat/codex.d.ts.map +1 -0
  33. package/dist/compat/index.d.ts +1 -0
  34. package/dist/compat/index.d.ts.map +1 -0
  35. package/dist/compat/qwen.d.ts +1 -0
  36. package/dist/compat/qwen.d.ts.map +1 -0
  37. package/dist/compat/unsupported.d.ts +1 -0
  38. package/dist/compat/unsupported.d.ts.map +1 -0
  39. package/dist/compat/vscode.d.ts +1 -0
  40. package/dist/compat/vscode.d.ts.map +1 -0
  41. package/dist/core/auth-probe.d.ts +1 -0
  42. package/dist/core/auth-probe.d.ts.map +1 -0
  43. package/dist/core/config.d.ts +1 -0
  44. package/dist/core/config.d.ts.map +1 -0
  45. package/dist/core/daemon.d.ts +1 -0
  46. package/dist/core/daemon.d.ts.map +1 -0
  47. package/dist/core/index.d.ts +1 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +81 -24
  50. package/dist/core/managed-index.d.ts +1 -0
  51. package/dist/core/managed-index.d.ts.map +1 -0
  52. package/dist/core/paths.d.ts +2 -0
  53. package/dist/core/paths.d.ts.map +1 -0
  54. package/dist/core/registry.d.ts +1 -0
  55. package/dist/core/registry.d.ts.map +1 -0
  56. package/dist/core/secrets.d.ts +1 -0
  57. package/dist/core/secrets.d.ts.map +1 -0
  58. package/dist/core/server-auth.d.ts +1 -0
  59. package/dist/core/server-auth.d.ts.map +1 -0
  60. package/dist/core/status.d.ts +1 -0
  61. package/dist/core/status.d.ts.map +1 -0
  62. package/dist/core/sync.d.ts +1 -0
  63. package/dist/core/sync.d.ts.map +1 -0
  64. package/dist/core/update-manager.d.ts +1 -0
  65. package/dist/core/update-manager.d.ts.map +1 -0
  66. package/dist/core/update.d.ts +1 -0
  67. package/dist/core/update.d.ts.map +1 -0
  68. package/dist/gateway/server.d.ts +1 -0
  69. package/dist/gateway/server.d.ts.map +1 -0
  70. package/dist/types.d.ts +1 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +8 -10
  73. package/dist/util/fs.d.ts +1 -0
  74. package/dist/util/fs.d.ts.map +1 -0
  75. package/dist/version.d.ts +2 -1
  76. package/dist/version.d.ts.map +1 -0
  77. package/package.json +10 -11
  78. package/dist/adapters/claude-desktop.js +0 -115
  79. package/dist/adapters/claude-desktop.js.map +0 -1
  80. package/dist/adapters/claude.js +0 -131
  81. package/dist/adapters/claude.js.map +0 -1
  82. package/dist/adapters/cline.js +0 -135
  83. package/dist/adapters/cline.js.map +0 -1
  84. package/dist/adapters/codex.js +0 -125
  85. package/dist/adapters/codex.js.map +0 -1
  86. package/dist/adapters/cursor.js +0 -122
  87. package/dist/adapters/cursor.js.map +0 -1
  88. package/dist/adapters/index.js +0 -23
  89. package/dist/adapters/index.js.map +0 -1
  90. package/dist/adapters/kiro.js +0 -120
  91. package/dist/adapters/kiro.js.map +0 -1
  92. package/dist/adapters/opencode.js +0 -122
  93. package/dist/adapters/opencode.js.map +0 -1
  94. package/dist/adapters/qwen.js +0 -113
  95. package/dist/adapters/qwen.js.map +0 -1
  96. package/dist/adapters/utils/index.js +0 -134
  97. package/dist/adapters/utils/index.js.map +0 -1
  98. package/dist/adapters/vscode.js +0 -122
  99. package/dist/adapters/vscode.js.map +0 -1
  100. package/dist/cli.js.map +0 -1
  101. package/dist/compat/claude.js +0 -252
  102. package/dist/compat/claude.js.map +0 -1
  103. package/dist/compat/codex.js +0 -179
  104. package/dist/compat/codex.js.map +0 -1
  105. package/dist/compat/index.js +0 -108
  106. package/dist/compat/index.js.map +0 -1
  107. package/dist/compat/qwen.js +0 -316
  108. package/dist/compat/qwen.js.map +0 -1
  109. package/dist/compat/unsupported.js +0 -47
  110. package/dist/compat/unsupported.js.map +0 -1
  111. package/dist/compat/vscode.js +0 -164
  112. package/dist/compat/vscode.js.map +0 -1
  113. package/dist/core/auth-probe.js +0 -54
  114. package/dist/core/auth-probe.js.map +0 -1
  115. package/dist/core/config.js +0 -76
  116. package/dist/core/config.js.map +0 -1
  117. package/dist/core/daemon.js +0 -176
  118. package/dist/core/daemon.js.map +0 -1
  119. package/dist/core/index.js.map +0 -1
  120. package/dist/core/managed-index.js +0 -22
  121. package/dist/core/managed-index.js.map +0 -1
  122. package/dist/core/paths.js +0 -55
  123. package/dist/core/paths.js.map +0 -1
  124. package/dist/core/registry.js +0 -51
  125. package/dist/core/registry.js.map +0 -1
  126. package/dist/core/secrets.js +0 -108
  127. package/dist/core/secrets.js.map +0 -1
  128. package/dist/core/server-auth.js +0 -112
  129. package/dist/core/server-auth.js.map +0 -1
  130. package/dist/core/status.js +0 -65
  131. package/dist/core/status.js.map +0 -1
  132. package/dist/core/sync.js +0 -128
  133. package/dist/core/sync.js.map +0 -1
  134. package/dist/core/update-manager.js +0 -170
  135. package/dist/core/update-manager.js.map +0 -1
  136. package/dist/core/update.js +0 -111
  137. package/dist/core/update.js.map +0 -1
  138. package/dist/gateway/server.js +0 -995
  139. package/dist/gateway/server.js.map +0 -1
  140. package/dist/types.js.map +0 -1
  141. package/dist/util/fs.js +0 -34
  142. package/dist/util/fs.js.map +0 -1
  143. package/dist/version.js +0 -2
  144. package/dist/version.js.map +0 -1
@@ -1,108 +0,0 @@
1
- /**
2
- * Client-native compatibility layer for mcpx CLI.
3
- *
4
- * This module detects client-native argv patterns before Commander parses
5
- * and normalizes them to canonical `mcpx add` format.
6
- */
7
- import { parseClaudeArgs } from "./claude.js";
8
- import { parseCodexArgs } from "./codex.js";
9
- import { parseVSCodeArgs } from "./vscode.js";
10
- import { parseQwenArgs } from "./qwen.js";
11
- import { detectUnsupportedClient } from "./unsupported.js";
12
- /**
13
- * Detects client-native argv patterns and normalizes them to canonical mcpx add format.
14
- *
15
- * @param argv - The command-line arguments (typically process.argv.slice(2))
16
- * @returns Compatibility result with normalized args or error
17
- */
18
- export function parseCompatibilityArgs(argv) {
19
- // Check for unsupported client patterns first (before valid patterns)
20
- const unsupported = detectUnsupportedClient(argv);
21
- if (unsupported) {
22
- return {
23
- client: unsupported.client,
24
- normalizedArgs: null,
25
- error: unsupported.error
26
- };
27
- }
28
- // Check for Claude: mcpx claude mcp add ...
29
- if (argv[0] === "claude" && argv[1] === "mcp" && argv[2] === "add") {
30
- const claudeArgs = argv.slice(3);
31
- const result = parseClaudeArgs(claudeArgs);
32
- if (result.error) {
33
- return {
34
- client: "claude",
35
- normalizedArgs: null,
36
- error: result.error
37
- };
38
- }
39
- return {
40
- client: "claude",
41
- normalizedArgs: result.normalizedArgs
42
- };
43
- }
44
- // Check for Codex: mcpx codex mcp add ...
45
- if (argv[0] === "codex" && argv[1] === "mcp" && argv[2] === "add") {
46
- const codexArgs = argv.slice(3);
47
- const result = parseCodexArgs(codexArgs);
48
- if (result.error) {
49
- return {
50
- client: "codex",
51
- normalizedArgs: null,
52
- error: result.error
53
- };
54
- }
55
- return {
56
- client: "codex",
57
- normalizedArgs: result.normalizedArgs
58
- };
59
- }
60
- // Check for VS Code: mcpx code --add-mcp '<json>'
61
- if (argv[0] === "code" && argv[1] === "--add-mcp") {
62
- const jsonPayload = argv[2];
63
- const result = parseVSCodeArgs(jsonPayload);
64
- if (result.error) {
65
- return {
66
- client: "vscode",
67
- normalizedArgs: null,
68
- error: result.error
69
- };
70
- }
71
- return {
72
- client: "vscode",
73
- normalizedArgs: result.normalizedArgs
74
- };
75
- }
76
- // Check for Qwen: mcpx qwen mcp add ...
77
- if (argv[0] === "qwen" && argv[1] === "mcp" && argv[2] === "add") {
78
- const qwenArgs = argv.slice(3);
79
- const result = parseQwenArgs(qwenArgs);
80
- if (result.error) {
81
- return {
82
- client: "qwen",
83
- normalizedArgs: null,
84
- error: result.error
85
- };
86
- }
87
- return {
88
- client: "qwen",
89
- normalizedArgs: result.normalizedArgs
90
- };
91
- }
92
- // Not a client-native compatibility command
93
- return {
94
- client: null,
95
- normalizedArgs: null
96
- };
97
- }
98
- /**
99
- * Checks if argv matches any client-native pattern.
100
- *
101
- * @param argv - The command-line arguments
102
- * @returns True if argv matches a client-native pattern
103
- */
104
- export function isClientNativeCommand(argv) {
105
- const result = parseCompatibilityArgs(argv);
106
- return result.client !== null;
107
- }
108
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compat/index.ts"],"names":[],"mappings":"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"}
@@ -1,316 +0,0 @@
1
- /**
2
- * Qwen CLI MCP compatibility layer.
3
- *
4
- * Supports:
5
- * - stdio add: qwen mcp add <name> <command> [args...] [--env KEY=VALUE]...
6
- * - HTTP add: qwen mcp add --transport http <name> <url> [--header "Name: Value"]...
7
- * - SSE add: qwen mcp add --transport sse <name> <url>
8
- *
9
- * Rejects:
10
- * - --scope (user/project scope not supported in mcpx)
11
- * - --trust (trust bypass not supported)
12
- * - --include-tools / --exclude-tools (tool filtering not supported)
13
- * - --timeout (timeout config not supported in mcpx add)
14
- */
15
- /**
16
- * Parses Qwen-style flags from argv, handling permissive option ordering.
17
- */
18
- function parseQwenFlags(argv) {
19
- const headers = [];
20
- const envVars = [];
21
- let transport;
22
- let timeout;
23
- let trust = false;
24
- const includeTools = [];
25
- const excludeTools = [];
26
- let description;
27
- let hasScope = false;
28
- // Find the `--` separator position (if any)
29
- const separatorIndex = argv.indexOf("--");
30
- const flagRegion = separatorIndex === -1 ? argv : argv.slice(0, separatorIndex);
31
- for (let i = 0; i < flagRegion.length; i++) {
32
- const arg = flagRegion[i];
33
- if (arg === "--header" || arg === "-H") {
34
- const value = flagRegion[i + 1];
35
- if (value && !value.startsWith("-")) {
36
- headers.push(value);
37
- i++;
38
- }
39
- }
40
- else if (arg === "--env" || arg === "-e") {
41
- const value = flagRegion[i + 1];
42
- if (value && !value.startsWith("-")) {
43
- envVars.push(value);
44
- i++;
45
- }
46
- }
47
- else if (arg === "--transport" || arg === "-t") {
48
- const value = flagRegion[i + 1];
49
- if (value && (value === "stdio" || value === "http" || value === "sse")) {
50
- transport = value;
51
- }
52
- i++;
53
- }
54
- else if (arg === "--scope" || arg === "-s") {
55
- hasScope = true;
56
- i++; // Skip scope value
57
- }
58
- else if (arg === "--timeout") {
59
- timeout = flagRegion[i + 1];
60
- i++;
61
- }
62
- else if (arg === "--trust") {
63
- trust = true;
64
- }
65
- else if (arg === "--include-tools") {
66
- const value = flagRegion[i + 1];
67
- if (value) {
68
- includeTools.push(...value.split(",").map((t) => t.trim()));
69
- i++;
70
- }
71
- }
72
- else if (arg === "--exclude-tools") {
73
- const value = flagRegion[i + 1];
74
- if (value) {
75
- excludeTools.push(...value.split(",").map((t) => t.trim()));
76
- i++;
77
- }
78
- }
79
- else if (arg === "--description") {
80
- description = flagRegion[i + 1];
81
- i++;
82
- }
83
- }
84
- return {
85
- headers,
86
- envVars,
87
- transport,
88
- timeout,
89
- trust,
90
- includeTools,
91
- excludeTools,
92
- description,
93
- hasScope
94
- };
95
- }
96
- /**
97
- * Extracts positional arguments (name, command/url, args) from Qwen argv.
98
- *
99
- * Qwen format: <name> [flags] <command> [command args...]
100
- * Flags like --env, --header, --transport come before the command.
101
- * Everything after the first non-flag positional (after name) is treated as command+args.
102
- */
103
- function extractPositionalArgs(argv) {
104
- const separatorIndex = argv.indexOf("--");
105
- if (separatorIndex === -1) {
106
- const positional = [];
107
- let skipNext = false;
108
- let foundCommand = false;
109
- for (let i = 0; i < argv.length; i++) {
110
- if (skipNext) {
111
- skipNext = false;
112
- continue;
113
- }
114
- const arg = argv[i];
115
- // Skip known flags and their values
116
- if (arg === "--header" ||
117
- arg === "-H" ||
118
- arg === "--env" ||
119
- arg === "-e" ||
120
- arg === "--transport" ||
121
- arg === "-t" ||
122
- arg === "--scope" ||
123
- arg === "-s" ||
124
- arg === "--timeout" ||
125
- arg === "--trust" ||
126
- arg === "--include-tools" ||
127
- arg === "--exclude-tools" ||
128
- arg === "--description") {
129
- skipNext = true;
130
- continue;
131
- }
132
- // Before finding the command, skip other long flags
133
- if (!foundCommand && arg.startsWith("--") && !arg.includes("=")) {
134
- continue;
135
- }
136
- // First non-flag positional after name is the command
137
- // After that, include everything (including short flags like -m, -y)
138
- if (!foundCommand && positional.length === 1) {
139
- // This is the command
140
- foundCommand = true;
141
- }
142
- positional.push(arg);
143
- }
144
- return positional;
145
- }
146
- else {
147
- const beforeSeparator = argv.slice(0, separatorIndex);
148
- const afterSeparator = argv.slice(separatorIndex + 1);
149
- const positional = [];
150
- let skipNext = false;
151
- let foundCommand = false;
152
- for (let i = 0; i < beforeSeparator.length; i++) {
153
- if (skipNext) {
154
- skipNext = false;
155
- continue;
156
- }
157
- const arg = beforeSeparator[i];
158
- if (arg === "--header" ||
159
- arg === "-H" ||
160
- arg === "--env" ||
161
- arg === "-e" ||
162
- arg === "--transport" ||
163
- arg === "-t" ||
164
- arg === "--scope" ||
165
- arg === "-s" ||
166
- arg === "--timeout" ||
167
- arg === "--trust" ||
168
- arg === "--include-tools" ||
169
- arg === "--exclude-tools" ||
170
- arg === "--description") {
171
- skipNext = true;
172
- continue;
173
- }
174
- // Skip other long flags before command
175
- if (!foundCommand && arg.startsWith("--") && !arg.includes("=")) {
176
- continue;
177
- }
178
- // First non-flag positional after name is the command
179
- if (!foundCommand && positional.length === 1) {
180
- foundCommand = true;
181
- }
182
- positional.push(arg);
183
- }
184
- return [...positional, "--", ...afterSeparator];
185
- }
186
- }
187
- /**
188
- * Validates Qwen arguments and rejects unsupported features.
189
- */
190
- function validateQwenArgs(flags) {
191
- if (flags.hasScope) {
192
- return "Qwen --scope is not supported. Use global `mcpx add` for project-wide servers.";
193
- }
194
- if (flags.trust) {
195
- return "Qwen --trust is not supported. Use `mcpx auth` to configure auth after adding the server.";
196
- }
197
- if (flags.includeTools.length > 0 || flags.excludeTools.length > 0) {
198
- return "Qwen --include-tools/--exclude-tools are not supported. Use `mcpx add` directly for advanced configuration.";
199
- }
200
- if (flags.timeout) {
201
- return "Qwen --timeout is not supported. Configure timeouts in the server config after adding.";
202
- }
203
- if (flags.transport === "sse") {
204
- return "Qwen --transport sse is not supported. Use `mcpx add <name> <url>` for HTTP/SSE servers.";
205
- }
206
- return null;
207
- }
208
- /**
209
- * Normalizes Qwen args to canonical mcpx add format.
210
- *
211
- * Qwen stdio: qwen mcp add <name> <command> [args...] [--env KEY=VALUE]...
212
- * -> mcpx add <name> <command> [args...] --env KEY=VALUE...
213
- *
214
- * Qwen HTTP: qwen mcp add --transport http <name> <url> [--header "Name: Value"]...
215
- * -> mcpx add <name> <url> --transport http --header "Name=Value"...
216
- */
217
- export function parseQwenArgs(argv) {
218
- if (argv.length === 0) {
219
- return {
220
- normalizedArgs: [],
221
- error: "Usage: mcpx qwen mcp add <name> <commandOrUrl> [options...]"
222
- };
223
- }
224
- // Parse flags
225
- const flags = parseQwenFlags(argv);
226
- // Validate - reject unsupported features
227
- const validationError = validateQwenArgs(flags);
228
- if (validationError) {
229
- return {
230
- normalizedArgs: [],
231
- error: validationError
232
- };
233
- }
234
- // Convert Qwen-style headers (Name: Value) to mcpx format (Name=Value)
235
- const convertedHeaders = flags.headers.map((header) => {
236
- const colonIndex = header.indexOf(":");
237
- if (colonIndex > 0) {
238
- const key = header.slice(0, colonIndex).trim();
239
- const value = header.slice(colonIndex + 1).trim();
240
- return `${key}=${value}`;
241
- }
242
- return header;
243
- });
244
- // Extract positional arguments
245
- const positional = extractPositionalArgs(argv);
246
- // Check for stdio separator
247
- const separatorIndex = positional.indexOf("--");
248
- // Determine transport mode
249
- // HTTP mode requires explicit --transport http OR second positional is a URL
250
- const secondPositional = positional[1];
251
- const isHttpUrl = secondPositional && (secondPositional.startsWith("http://") || secondPositional.startsWith("https://"));
252
- const isHttpMode = flags.transport === "http" || (flags.transport === undefined && isHttpUrl);
253
- if (isHttpMode && separatorIndex === -1) {
254
- // HTTP mode: <name> <url>
255
- if (positional.length < 2) {
256
- return {
257
- normalizedArgs: [],
258
- error: "HTTP mode requires: qwen mcp add <name> <url>"
259
- };
260
- }
261
- const [name, url, ...rest] = positional;
262
- const normalized = [name, url];
263
- // Add headers (converted from Name: Value to Name=Value)
264
- for (const header of convertedHeaders) {
265
- normalized.push("--header", header);
266
- }
267
- // Add transport flag if explicitly HTTP (at the end for consistency)
268
- if (flags.transport === "http") {
269
- normalized.push("--transport", "http");
270
- }
271
- // Add any remaining positionals as args
272
- if (rest.length > 0) {
273
- normalized.push(...rest);
274
- }
275
- return { normalizedArgs: normalized };
276
- }
277
- else {
278
- // stdio mode: <name> <command> [args...]
279
- const beforeSeparator = separatorIndex === -1 ? positional : positional.slice(0, separatorIndex);
280
- const afterSeparator = separatorIndex === -1 ? [] : positional.slice(separatorIndex + 1);
281
- if (beforeSeparator.length < 1) {
282
- return {
283
- normalizedArgs: [],
284
- error: "stdio mode requires: qwen mcp add <name> <command> [args...]"
285
- };
286
- }
287
- const name = beforeSeparator[0];
288
- const command = beforeSeparator[1];
289
- if (!command) {
290
- return {
291
- normalizedArgs: [],
292
- error: "stdio mode requires a command: qwen mcp add <name> <command> [args...]"
293
- };
294
- }
295
- const normalized = [name, command];
296
- // Add command args (before separator, after name and command)
297
- const commandArgs = beforeSeparator.slice(2);
298
- if (commandArgs.length > 0) {
299
- normalized.push(...commandArgs);
300
- }
301
- // Add args after separator
302
- if (afterSeparator.length > 0) {
303
- normalized.push("--", ...afterSeparator);
304
- }
305
- // Add env vars
306
- for (const envVar of flags.envVars) {
307
- normalized.push("--env", envVar);
308
- }
309
- // Add headers (if any - unusual for stdio but allow passthrough, converted)
310
- for (const header of convertedHeaders) {
311
- normalized.push("--header", header);
312
- }
313
- return { normalizedArgs: normalized };
314
- }
315
- }
316
- //# sourceMappingURL=qwen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qwen.js","sourceRoot":"","sources":["../../src/compat/qwen.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Unsupported client detection.
3
- *
4
- * Detects client-native patterns that are not supported in compatibility mode
5
- * and provides helpful guidance to use `mcpx add` instead.
6
- *
7
- * Unsupported clients:
8
- * - cursor-agent (Cursor uses different MCP management)
9
- * - cline (Cline uses config-based setup)
10
- * - kiro (Kiro uses one-click/config-based setup)
11
- * - opencode (OpenCode uses generic mcpx add)
12
- */
13
- /**
14
- * Map of unsupported client names to their guidance messages.
15
- */
16
- const UNSUPPORTED_CLIENTS = {
17
- "cursor-agent": "Cursor MCP management uses a different interface. Use `mcpx add <name> <url|command>` directly to add MCP servers to mcpx.",
18
- "cline": "Cline uses config-based MCP setup. Use `mcpx add <name> <url|command>` to add servers to mcpx, then sync to Cline.",
19
- "kiro": "Kiro uses one-click/config-based MCP setup. Use `mcpx add <name> <url|command>` to add servers to mcpx, then sync to Kiro.",
20
- "opencode": "OpenCode uses generic mcpx integration. Use `mcpx add <name> <url|command>` to add servers directly."
21
- };
22
- /**
23
- * List of unsupported client prefixes to detect.
24
- */
25
- const UNSUPPORTED_PREFIXES = Object.keys(UNSUPPORTED_CLIENTS);
26
- /**
27
- * Detects if argv matches an unsupported client pattern.
28
- *
29
- * @param argv - The command-line arguments
30
- * @returns Unsupported client info if detected, null otherwise
31
- */
32
- export function detectUnsupportedClient(argv) {
33
- if (argv.length === 0) {
34
- return null;
35
- }
36
- const firstArg = argv[0];
37
- for (const prefix of UNSUPPORTED_PREFIXES) {
38
- if (firstArg === prefix || firstArg.startsWith(`${prefix}-`) || firstArg.startsWith(`${prefix}_`)) {
39
- return {
40
- client: firstArg,
41
- error: `${UNSUPPORTED_CLIENTS[prefix]}\n\nExample: mcpx add my-server https://example.com/mcp`
42
- };
43
- }
44
- }
45
- return null;
46
- }
47
- //# sourceMappingURL=unsupported.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unsupported.js","sourceRoot":"","sources":["../../src/compat/unsupported.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH;;GAEG;AACH,MAAM,mBAAmB,GAA2B;IAClD,cAAc,EAAE,4HAA4H;IAC5I,OAAO,EAAE,oHAAoH;IAC7H,MAAM,EAAE,4HAA4H;IACpI,UAAU,EAAE,sGAAsG;CACnH,CAAC;AAEF;;GAEG;AACH,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAc;IACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,KAAK,MAAM,MAAM,IAAI,oBAAoB,EAAE,CAAC;QAC1C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;YAClG,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,yDAAyD;aAC/F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,164 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/compat/vscode.ts"],"names":[],"mappings":"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"}