@kwonye/mcpx 0.1.68 → 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.
- package/dist/adapters/claude-desktop.d.ts +1 -0
- package/dist/adapters/claude-desktop.d.ts.map +1 -0
- package/dist/adapters/claude.d.ts +1 -0
- package/dist/adapters/claude.d.ts.map +1 -0
- package/dist/adapters/cline.d.ts +1 -0
- package/dist/adapters/cline.d.ts.map +1 -0
- package/dist/adapters/codex.d.ts +1 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/cursor.d.ts +1 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/index.d.ts +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/kiro.d.ts +1 -0
- package/dist/adapters/kiro.d.ts.map +1 -0
- package/dist/adapters/opencode.d.ts +1 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/qwen.d.ts +1 -0
- package/dist/adapters/qwen.d.ts.map +1 -0
- package/dist/adapters/utils/index.d.ts +1 -0
- package/dist/adapters/utils/index.d.ts.map +1 -0
- package/dist/adapters/vscode.d.ts +1 -0
- package/dist/adapters/vscode.d.ts.map +1 -0
- package/dist/cli-7rggq938.js +3292 -0
- package/dist/cli-ezvj44tr.js +3292 -0
- package/dist/cli-q8de7zb0.js +12 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1880 -1131
- package/dist/compat/claude.d.ts +1 -0
- package/dist/compat/claude.d.ts.map +1 -0
- package/dist/compat/codex.d.ts +1 -0
- package/dist/compat/codex.d.ts.map +1 -0
- package/dist/compat/index.d.ts +1 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/qwen.d.ts +1 -0
- package/dist/compat/qwen.d.ts.map +1 -0
- package/dist/compat/unsupported.d.ts +1 -0
- package/dist/compat/unsupported.d.ts.map +1 -0
- package/dist/compat/vscode.d.ts +1 -0
- package/dist/compat/vscode.d.ts.map +1 -0
- package/dist/core/auth-probe.d.ts +1 -0
- package/dist/core/auth-probe.d.ts.map +1 -0
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/daemon.d.ts +1 -0
- package/dist/core/daemon.d.ts.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +81 -24
- package/dist/core/managed-index.d.ts +1 -0
- package/dist/core/managed-index.d.ts.map +1 -0
- package/dist/core/paths.d.ts +2 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/registry.d.ts +1 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/secrets.d.ts +1 -0
- package/dist/core/secrets.d.ts.map +1 -0
- package/dist/core/server-auth.d.ts +1 -0
- package/dist/core/server-auth.d.ts.map +1 -0
- package/dist/core/status.d.ts +1 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/sync.d.ts +1 -0
- package/dist/core/sync.d.ts.map +1 -0
- package/dist/core/update-manager.d.ts +1 -0
- package/dist/core/update-manager.d.ts.map +1 -0
- package/dist/core/update.d.ts +1 -0
- package/dist/core/update.d.ts.map +1 -0
- package/dist/gateway/server.d.ts +1 -0
- package/dist/gateway/server.d.ts.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -10
- package/dist/util/fs.d.ts +1 -0
- package/dist/util/fs.d.ts.map +1 -0
- package/dist/version.d.ts +2 -1
- package/dist/version.d.ts.map +1 -0
- package/package.json +10 -11
- package/dist/adapters/claude-desktop.js +0 -118
- package/dist/adapters/claude-desktop.js.map +0 -1
- package/dist/adapters/claude.js +0 -131
- package/dist/adapters/claude.js.map +0 -1
- package/dist/adapters/cline.js +0 -135
- package/dist/adapters/cline.js.map +0 -1
- package/dist/adapters/codex.js +0 -125
- package/dist/adapters/codex.js.map +0 -1
- package/dist/adapters/cursor.js +0 -125
- package/dist/adapters/cursor.js.map +0 -1
- package/dist/adapters/index.js +0 -23
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/kiro.js +0 -120
- package/dist/adapters/kiro.js.map +0 -1
- package/dist/adapters/opencode.js +0 -122
- package/dist/adapters/opencode.js.map +0 -1
- package/dist/adapters/qwen.js +0 -117
- package/dist/adapters/qwen.js.map +0 -1
- package/dist/adapters/utils/index.js +0 -144
- package/dist/adapters/utils/index.js.map +0 -1
- package/dist/adapters/vscode.js +0 -125
- package/dist/adapters/vscode.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/compat/claude.js +0 -252
- package/dist/compat/claude.js.map +0 -1
- package/dist/compat/codex.js +0 -179
- package/dist/compat/codex.js.map +0 -1
- package/dist/compat/index.js +0 -108
- package/dist/compat/index.js.map +0 -1
- package/dist/compat/qwen.js +0 -316
- package/dist/compat/qwen.js.map +0 -1
- package/dist/compat/unsupported.js +0 -47
- package/dist/compat/unsupported.js.map +0 -1
- package/dist/compat/vscode.js +0 -164
- package/dist/compat/vscode.js.map +0 -1
- package/dist/core/auth-probe.js +0 -54
- package/dist/core/auth-probe.js.map +0 -1
- package/dist/core/config.js +0 -76
- package/dist/core/config.js.map +0 -1
- package/dist/core/daemon.js +0 -176
- package/dist/core/daemon.js.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/managed-index.js +0 -22
- package/dist/core/managed-index.js.map +0 -1
- package/dist/core/paths.js +0 -55
- package/dist/core/paths.js.map +0 -1
- package/dist/core/registry.js +0 -51
- package/dist/core/registry.js.map +0 -1
- package/dist/core/secrets.js +0 -108
- package/dist/core/secrets.js.map +0 -1
- package/dist/core/server-auth.js +0 -112
- package/dist/core/server-auth.js.map +0 -1
- package/dist/core/status.js +0 -65
- package/dist/core/status.js.map +0 -1
- package/dist/core/sync.js +0 -128
- package/dist/core/sync.js.map +0 -1
- package/dist/core/update-manager.js +0 -170
- package/dist/core/update-manager.js.map +0 -1
- package/dist/core/update.js +0 -111
- package/dist/core/update.js.map +0 -1
- package/dist/gateway/server.js +0 -995
- package/dist/gateway/server.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/util/fs.js +0 -34
- package/dist/util/fs.js.map +0 -1
- package/dist/version.js +0 -2
- package/dist/version.js.map +0 -1
package/dist/compat/codex.js
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Codex MCP compatibility layer.
|
|
3
|
-
*
|
|
4
|
-
* Supports:
|
|
5
|
-
* - stdio only: codex mcp add <name> [--env KEY=VALUE ...] -- <command> [args...]
|
|
6
|
-
*
|
|
7
|
-
* Rejects:
|
|
8
|
-
* - HTTP semantics (Codex doesn't support HTTP MCP in CLI)
|
|
9
|
-
* - Config-only/project-scope semantics
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Parses Codex-style flags from argv.
|
|
13
|
-
* Codex uses permissive option ordering before the `--` separator.
|
|
14
|
-
*/
|
|
15
|
-
function parseCodexFlags(argv) {
|
|
16
|
-
const envVars = [];
|
|
17
|
-
let hasUrlFlag = false;
|
|
18
|
-
let hasHttpSemantics = false;
|
|
19
|
-
// Find the `--` separator position (if any)
|
|
20
|
-
const separatorIndex = argv.indexOf("--");
|
|
21
|
-
const flagRegion = separatorIndex === -1 ? argv : argv.slice(0, separatorIndex);
|
|
22
|
-
for (let i = 0; i < flagRegion.length; i++) {
|
|
23
|
-
const arg = flagRegion[i];
|
|
24
|
-
if (arg === "--env" || arg === "-e") {
|
|
25
|
-
const value = flagRegion[i + 1];
|
|
26
|
-
if (value && !value.startsWith("-")) {
|
|
27
|
-
envVars.push(value);
|
|
28
|
-
i++; // Skip the value
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
// Env without value - will be caught by validation
|
|
32
|
-
envVars.push("");
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
else if (arg === "--url") {
|
|
36
|
-
hasUrlFlag = true;
|
|
37
|
-
hasHttpSemantics = true;
|
|
38
|
-
}
|
|
39
|
-
else if (arg === "--http") {
|
|
40
|
-
hasHttpSemantics = true;
|
|
41
|
-
}
|
|
42
|
-
else if (arg.startsWith("-") && arg !== "--") {
|
|
43
|
-
// Other flags - ignore for now
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return {
|
|
47
|
-
envVars,
|
|
48
|
-
hasUrlFlag,
|
|
49
|
-
hasHttpSemantics
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Extracts positional arguments from Codex argv.
|
|
54
|
-
* Handles permissive option ordering by filtering out known flags.
|
|
55
|
-
*/
|
|
56
|
-
function extractCodexPositionalArgs(argv) {
|
|
57
|
-
const separatorIndex = argv.indexOf("--");
|
|
58
|
-
if (separatorIndex === -1) {
|
|
59
|
-
// No separator - extract non-flag arguments
|
|
60
|
-
const positional = [];
|
|
61
|
-
let skipNext = false;
|
|
62
|
-
for (let i = 0; i < argv.length; i++) {
|
|
63
|
-
if (skipNext) {
|
|
64
|
-
skipNext = false;
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
const arg = argv[i];
|
|
68
|
-
// Skip known flags and their values
|
|
69
|
-
if (arg === "--env" || arg === "-e" || arg === "--url" || arg === "--http") {
|
|
70
|
-
skipNext = true;
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
// Skip other flags
|
|
74
|
-
if (arg.startsWith("-")) {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
positional.push(arg);
|
|
78
|
-
}
|
|
79
|
-
return positional;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
// With separator - everything before is flags/positionals, everything after is command args
|
|
83
|
-
const beforeSeparator = argv.slice(0, separatorIndex);
|
|
84
|
-
const afterSeparator = argv.slice(separatorIndex + 1);
|
|
85
|
-
// Extract positionals from before separator
|
|
86
|
-
const positional = [];
|
|
87
|
-
let skipNext = false;
|
|
88
|
-
for (let i = 0; i < beforeSeparator.length; i++) {
|
|
89
|
-
if (skipNext) {
|
|
90
|
-
skipNext = false;
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
const arg = beforeSeparator[i];
|
|
94
|
-
if (arg === "--env" || arg === "-e" || arg === "--url" || arg === "--http") {
|
|
95
|
-
skipNext = true;
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
if (arg.startsWith("-")) {
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
positional.push(arg);
|
|
102
|
-
}
|
|
103
|
-
// Combine with command args after separator
|
|
104
|
-
return [...positional, "--", ...afterSeparator];
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Validates Codex arguments and rejects unsupported features.
|
|
109
|
-
*/
|
|
110
|
-
function validateCodexArgs(flags, hasSeparator) {
|
|
111
|
-
if (flags.hasHttpSemantics) {
|
|
112
|
-
return "Codex HTTP semantics are not supported. Use `mcpx add <name> <url>` for HTTP MCP servers.";
|
|
113
|
-
}
|
|
114
|
-
if (!hasSeparator) {
|
|
115
|
-
return "Codex stdio mode requires `--` separator: codex mcp add <name> [--env KEY=VALUE] -- <command> [args...]";
|
|
116
|
-
}
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Normalizes Codex args to canonical mcpx add format.
|
|
121
|
-
*
|
|
122
|
-
* Codex stdio: codex mcp add <name> [--env KEY=VALUE ...] -- <command> [args...]
|
|
123
|
-
* -> mcpx add <name> <command> [args...] --env KEY=VALUE...
|
|
124
|
-
*/
|
|
125
|
-
export function parseCodexArgs(argv) {
|
|
126
|
-
if (argv.length === 0) {
|
|
127
|
-
return {
|
|
128
|
-
normalizedArgs: [],
|
|
129
|
-
error: "Usage: mcpx codex mcp add <name> [--env KEY=VALUE ...] -- <command> [args...]"
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
// Parse flags
|
|
133
|
-
const flags = parseCodexFlags(argv);
|
|
134
|
-
// Check for stdio separator
|
|
135
|
-
const hasSeparator = argv.includes("--");
|
|
136
|
-
// Validate - reject unsupported features
|
|
137
|
-
const validationError = validateCodexArgs(flags, hasSeparator);
|
|
138
|
-
if (validationError) {
|
|
139
|
-
return {
|
|
140
|
-
normalizedArgs: [],
|
|
141
|
-
error: validationError
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
// Extract positional arguments
|
|
145
|
-
const positional = extractCodexPositionalArgs(argv);
|
|
146
|
-
const separatorIndex = positional.indexOf("--");
|
|
147
|
-
// stdio mode: <name> -- <command> [args...]
|
|
148
|
-
const beforeSeparator = positional.slice(0, separatorIndex);
|
|
149
|
-
const afterSeparator = positional.slice(separatorIndex + 1);
|
|
150
|
-
if (beforeSeparator.length < 1) {
|
|
151
|
-
return {
|
|
152
|
-
normalizedArgs: [],
|
|
153
|
-
error: "stdio mode requires: codex mcp add <name> -- <command> [args...]"
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
if (afterSeparator.length === 0) {
|
|
157
|
-
return {
|
|
158
|
-
normalizedArgs: [],
|
|
159
|
-
error: "stdio mode requires a command after `--`: codex mcp add <name> -- <command> [args...]"
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
const name = beforeSeparator[0];
|
|
163
|
-
// Build normalized args for stdio
|
|
164
|
-
// mcpx add <name> <command> [args...] --env KEY=VALUE...
|
|
165
|
-
const normalized = [name];
|
|
166
|
-
// Add command and args
|
|
167
|
-
if (afterSeparator.length > 0) {
|
|
168
|
-
normalized.push(afterSeparator[0]);
|
|
169
|
-
if (afterSeparator.length > 1) {
|
|
170
|
-
normalized.push(...afterSeparator.slice(1));
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Add env vars
|
|
174
|
-
for (const envVar of flags.envVars) {
|
|
175
|
-
normalized.push("--env", envVar);
|
|
176
|
-
}
|
|
177
|
-
return { normalizedArgs: normalized };
|
|
178
|
-
}
|
|
179
|
-
//# sourceMappingURL=codex.js.map
|
package/dist/compat/codex.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/compat/codex.ts"],"names":[],"mappings":"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"}
|
package/dist/compat/index.js
DELETED
|
@@ -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
|
package/dist/compat/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compat/index.ts"],"names":[],"mappings":"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"}
|
package/dist/compat/qwen.js
DELETED
|
@@ -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
|
package/dist/compat/qwen.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qwen.js","sourceRoot":"","sources":["../../src/compat/qwen.ts"],"names":[],"mappings":"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"}
|