@mcp-abap-adt/configurator 0.2.1 → 1.0.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/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # MCP ABAP ADT Configurator
2
+ [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)
2
3
 
3
4
  Auto-configure MCP clients for `mcp-abap-adt` and `mcp-abap-adt-proxy`.
4
5
 
@@ -26,6 +27,14 @@ mcp-conf --client crush --name abap --transport http --url http://localhost:3000
26
27
  mcp-conf tui
27
28
  ```
28
29
 
30
+ ### Claude: CLI vs Desktop vs Connectors
31
+
32
+ Anthropic ships several "Claude" products. `mcp-conf` configures MCP servers for two of them:
33
+
34
+ - `--client claude-cli` (alias: `--client claude`) — **Claude Code CLI**. Writes to `~/.claude.json` (global) or `./.mcp.json` (local). Supports stdio / http / sse. No restart needed.
35
+ - `--client claude-desktop` — **Claude Desktop GUI** (macOS / Windows). Writes to `claude_desktop_config.json`. Supports **stdio only**. You must restart Claude Desktop after changes. Linux is not officially supported by Anthropic.
36
+ - **claude.ai Custom Connectors** (web UI) — cloud-side remote MCP, HTTPS only. **No public API**; add them manually via Settings → Connectors. `mcp-conf` cannot touch these.
37
+
29
38
  ## TUI
30
39
 
31
40
  `mcp-conf tui` starts an interactive wizard (`ls`/`show`/`add`/`update`/`rm`/`enable`/`disable`).
@@ -8,7 +8,8 @@ const { spawnSync } = require("node:child_process");
8
8
  const CLIENTS = [
9
9
  { name: "cline", message: "Cline" },
10
10
  { name: "codex", message: "Codex" },
11
- { name: "claude", message: "Claude" },
11
+ { name: "claude-cli", message: "Claude CLI" },
12
+ { name: "claude-desktop", message: "Claude Desktop" },
12
13
  { name: "goose", message: "Goose" },
13
14
  { name: "cursor", message: "Cursor" },
14
15
  { name: "windsurf", message: "Windsurf" },
@@ -267,7 +268,9 @@ function getSupportedScopes(clientName) {
267
268
  if (clientName === "copilot" || clientName === "gemini") {
268
269
  return ["local"];
269
270
  }
270
- if (["cline", "goose", "windsurf", "antigravity", "qwen"].includes(clientName)) {
271
+ if (
272
+ ["cline", "goose", "windsurf", "antigravity", "qwen", "claude-desktop"].includes(clientName)
273
+ ) {
271
274
  return ["global"];
272
275
  }
273
276
  return ["global", "local"];
@@ -277,7 +280,7 @@ async function configureScope(result, clientName) {
277
280
  result.allProjects = false;
278
281
  result.projectPath = null;
279
282
 
280
- if (clientName === "claude") {
283
+ if (clientName === "claude-cli") {
281
284
  result.scope = await askSelect("Scope", ["global", "local"]);
282
285
  if (result.scope === "local") {
283
286
  return;
@@ -304,6 +307,9 @@ function getSupportedTransports(clientName) {
304
307
  if (clientName === "codex") {
305
308
  return ["stdio", "http"];
306
309
  }
310
+ if (clientName === "claude-desktop") {
311
+ return ["stdio"];
312
+ }
307
313
  return ["stdio", "sse", "http"];
308
314
  }
309
315
 
package/bin/mcp-conf.js CHANGED
@@ -299,7 +299,7 @@ const serverArgs = serverArgsRaw.filter(Boolean);
299
299
 
300
300
  for (const client of options.clients) {
301
301
  const scope = options.scope || getDefaultScope(client);
302
- if (options.projectPath && client !== "claude") {
302
+ if (options.projectPath && client !== "claude-cli") {
303
303
  fail("--project is only supported for Claude.");
304
304
  }
305
305
  switch (client) {
@@ -334,7 +334,7 @@ for (const client of options.clients) {
334
334
  );
335
335
  }
336
336
  break;
337
- case "claude": {
337
+ case "claude-cli": {
338
338
  requireScope("Claude", ["global", "local"], scope);
339
339
  const claudeToggleScope = options.toggle ? "global" : scope;
340
340
  if (options.allProjects && claudeToggleScope !== "global") {
@@ -374,6 +374,35 @@ for (const client of options.clients) {
374
374
  }
375
375
  break;
376
376
  }
377
+ case "claude-desktop": {
378
+ requireScope("ClaudeDesktop", ["global"], scope);
379
+ if (options.transport !== "stdio") {
380
+ fail(
381
+ "claude-desktop only supports stdio transport. For remote MCP, add a Custom Connector in Claude Desktop Settings → Connectors.",
382
+ );
383
+ }
384
+ if (options.allProjects || options.projectPath) {
385
+ fail("--all-projects and --project are not supported for claude-desktop.");
386
+ }
387
+ const cdPath = getClaudeDesktopPath(platform, home, appData);
388
+ if (options.list) {
389
+ listClaudeDesktopConfig(cdPath);
390
+ } else if (options.show) {
391
+ showClaudeDesktopConfig(cdPath, options.name);
392
+ } else if (options.where) {
393
+ whereClaudeDesktopConfig(cdPath, options.name);
394
+ } else if (options.remove) {
395
+ removeClaudeDesktopConfig(cdPath, options.name);
396
+ printClaudeDesktopRestartNotice();
397
+ } else if (options.toggle) {
398
+ toggleClaudeDesktopConfig(cdPath, options.name, options.disabled);
399
+ printClaudeDesktopRestartNotice();
400
+ } else {
401
+ writeClaudeDesktopConfig(cdPath, options.name, serverArgs);
402
+ printClaudeDesktopRestartNotice();
403
+ }
404
+ break;
405
+ }
377
406
  case "goose":
378
407
  requireScope("Goose", ["global"], scope);
379
408
  if (options.list) {
@@ -434,7 +463,7 @@ for (const client of options.clients) {
434
463
  case "gemini":
435
464
  requireScope("Gemini", ["local"], scope);
436
465
  if (options.list) {
437
- listJsonConfig(getGeminiPath(), "gemini");
466
+ listGeminiConfig(getGeminiPath(), getGeminiEnablementPath(home));
438
467
  } else if (options.show) {
439
468
  showJsonConfig(getGeminiPath(), "gemini", options.name);
440
469
  } else if (options.where) {
@@ -516,7 +545,13 @@ function normalizeClientName(clientName) {
516
545
  return clientName;
517
546
  }
518
547
  const normalized = clientName.toLowerCase();
519
- return normalized === "kilo" ? "opencode" : normalized;
548
+ if (normalized === "kilo") {
549
+ return "opencode";
550
+ }
551
+ if (normalized === "claude") {
552
+ return "claude-cli";
553
+ }
554
+ return normalized;
520
555
  }
521
556
 
522
557
  function runTuiWizard(opts) {
@@ -603,6 +638,22 @@ function getClaudePath(homeDir, scopeValue) {
603
638
  return path.join(homeDir, ".claude.json");
604
639
  }
605
640
 
641
+ function getClaudeDesktopPath(platformValue, homeDir, appDataDir) {
642
+ if (platformValue === "darwin") {
643
+ return path.join(
644
+ homeDir,
645
+ "Library",
646
+ "Application Support",
647
+ "Claude",
648
+ "claude_desktop_config.json",
649
+ );
650
+ }
651
+ if (platformValue === "win32") {
652
+ return path.join(appDataDir, "Claude", "claude_desktop_config.json");
653
+ }
654
+ fail("Claude Desktop is not officially available on Linux. Use --client claude-cli instead.");
655
+ }
656
+
606
657
  function getGoosePath(platformValue, homeDir, appDataDir) {
607
658
  if (platformValue === "win32") {
608
659
  return path.join(appDataDir, "Block", "goose", "config", "config.yaml");
@@ -713,7 +764,7 @@ function resolveProjectSelector(data, projectPath) {
713
764
  }
714
765
 
715
766
  function getDefaultDisabled(clientType) {
716
- return ["cline", "codex", "windsurf", "goose", "claude", "opencode", "crush"].includes(
767
+ return ["cline", "codex", "windsurf", "goose", "claude-cli", "opencode", "crush"].includes(
717
768
  clientType,
718
769
  );
719
770
  }
@@ -923,8 +974,7 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
923
974
  function writeClaudeConfig(filePath, serverName, argsArray) {
924
975
  ensureDir(filePath);
925
976
  const data = readJson(filePath);
926
- const isDesktopConfig =
927
- filePath.endsWith(".claude.json") || filePath.endsWith("claude_desktop_config.json");
977
+ const isDesktopConfig = filePath.endsWith(".claude.json");
928
978
  const resolveProjectKey = () => resolveProjectSelector(data, options.projectPath);
929
979
  const updateClaudeMcpLists = (projectNode) => {
930
980
  projectNode.enabledMcpServers = projectNode.enabledMcpServers || [];
@@ -947,7 +997,7 @@ function writeClaudeConfig(filePath, serverName, argsArray) {
947
997
  const disabled = projectNode.disabledMcpServers;
948
998
  const shouldDisable = options.toggle
949
999
  ? options.disabled
950
- : options.disabled || getDefaultDisabled("claude");
1000
+ : options.disabled || getDefaultDisabled("claude-cli");
951
1001
  const removeFrom = (list) => {
952
1002
  const idx = list.indexOf(serverName);
953
1003
  if (idx >= 0) {
@@ -1111,6 +1161,116 @@ function writeClaudeConfig(filePath, serverName, argsArray) {
1111
1161
  writeFile(filePath, JSON.stringify(data, null, 2));
1112
1162
  }
1113
1163
 
1164
+ function writeClaudeDesktopConfig(filePath, serverName, argsArray) {
1165
+ ensureDir(filePath);
1166
+ const data = readJson(filePath);
1167
+ data.mcpServers = data.mcpServers || {};
1168
+ data._disabled = data._disabled || {};
1169
+ const exists = data.mcpServers[serverName] || data._disabled[serverName];
1170
+ if (exists && !options.force) {
1171
+ fail(`Server "${serverName}" already exists in ${filePath}. Use --force to overwrite.`);
1172
+ }
1173
+ const entry = {
1174
+ command: options.command,
1175
+ args: argsArray,
1176
+ timeout: options.timeout,
1177
+ env: {},
1178
+ };
1179
+ if (data._disabled[serverName]) {
1180
+ // Preserve disabled state on update.
1181
+ data._disabled[serverName] = entry;
1182
+ } else {
1183
+ data.mcpServers[serverName] = entry;
1184
+ }
1185
+ writeFile(filePath, JSON.stringify(data, null, 2));
1186
+ }
1187
+
1188
+ function removeClaudeDesktopConfig(filePath, serverName) {
1189
+ const data = readJson(filePath);
1190
+ const inEnabled = data.mcpServers?.[serverName];
1191
+ const inDisabled = data._disabled?.[serverName];
1192
+ if (!inEnabled && !inDisabled) {
1193
+ fail(`Server "${serverName}" not found in ${filePath}.`);
1194
+ }
1195
+ if (inEnabled) {
1196
+ delete data.mcpServers[serverName];
1197
+ }
1198
+ if (inDisabled) {
1199
+ delete data._disabled[serverName];
1200
+ }
1201
+ writeFile(filePath, JSON.stringify(data, null, 2));
1202
+ }
1203
+
1204
+ function toggleClaudeDesktopConfig(filePath, serverName, shouldDisable) {
1205
+ const data = readJson(filePath);
1206
+ data.mcpServers = data.mcpServers || {};
1207
+ data._disabled = data._disabled || {};
1208
+ if (shouldDisable) {
1209
+ if (data._disabled[serverName]) {
1210
+ fail(`Server "${serverName}" is already disabled in ${filePath}.`);
1211
+ }
1212
+ if (!data.mcpServers[serverName]) {
1213
+ fail(`Server "${serverName}" not found in ${filePath}.`);
1214
+ }
1215
+ data._disabled[serverName] = data.mcpServers[serverName];
1216
+ delete data.mcpServers[serverName];
1217
+ } else {
1218
+ if (data.mcpServers[serverName]) {
1219
+ fail(`Server "${serverName}" is already enabled in ${filePath}.`);
1220
+ }
1221
+ if (!data._disabled[serverName]) {
1222
+ fail(`Server "${serverName}" not found in ${filePath}.`);
1223
+ }
1224
+ data.mcpServers[serverName] = data._disabled[serverName];
1225
+ delete data._disabled[serverName];
1226
+ }
1227
+ writeFile(filePath, JSON.stringify(data, null, 2));
1228
+ }
1229
+
1230
+ function listClaudeDesktopConfig(filePath) {
1231
+ const data = readJson(filePath);
1232
+ const enabled = Object.keys(data.mcpServers || {});
1233
+ const disabled = Object.keys(data._disabled || {});
1234
+ const header = `# ${filePath}`;
1235
+ process.stdout.write(`${header}\n`);
1236
+ if (enabled.length === 0 && disabled.length === 0) {
1237
+ process.stdout.write("- (none)\n");
1238
+ return;
1239
+ }
1240
+ for (const name of enabled.sort()) {
1241
+ process.stdout.write(`- ${name}\n`);
1242
+ }
1243
+ for (const name of disabled.sort()) {
1244
+ process.stdout.write(`- ${name} (disabled)\n`);
1245
+ }
1246
+ }
1247
+
1248
+ function showClaudeDesktopConfig(filePath, serverName) {
1249
+ const data = readJson(filePath);
1250
+ const entry = data.mcpServers?.[serverName] || data._disabled?.[serverName];
1251
+ if (!entry) {
1252
+ fail(`Server "${serverName}" not found in ${filePath}.`);
1253
+ }
1254
+ const details = normalizeServerDetails("claude-desktop", serverName, entry);
1255
+ if (data._disabled?.[serverName]) {
1256
+ details.disabled = true;
1257
+ }
1258
+ outputShow(filePath, serverName, details);
1259
+ }
1260
+
1261
+ function whereClaudeDesktopConfig(filePath, serverName) {
1262
+ const data = readJson(filePath);
1263
+ const found = Boolean(data.mcpServers?.[serverName] || data._disabled?.[serverName]);
1264
+ if (!found) {
1265
+ fail(`Server "${serverName}" not found in ${filePath}.`);
1266
+ }
1267
+ outputWhere(filePath, serverName, found);
1268
+ }
1269
+
1270
+ function printClaudeDesktopRestartNotice() {
1271
+ process.stdout.write("Note: Restart Claude Desktop for changes to take effect.\n");
1272
+ }
1273
+
1114
1274
  function resolveClaudeProjectKey(data, projectPath = process.cwd()) {
1115
1275
  const desired = projectPath;
1116
1276
  if (!data.projects || data.projects[desired]) {
@@ -1268,6 +1428,23 @@ function listJsonConfig(filePath, clientType) {
1268
1428
  outputList(filePath, Object.keys(store));
1269
1429
  }
1270
1430
 
1431
+ function listGeminiConfig(filePath, enablementPath) {
1432
+ const data = readJson(filePath);
1433
+ const store = data.mcpServers || {};
1434
+ const enablement = readJson(enablementPath);
1435
+ const keys = Object.keys(store);
1436
+ const header = `# ${filePath}`;
1437
+ process.stdout.write(`${header}\n`);
1438
+ if (!keys.length) {
1439
+ process.stdout.write("- (none)\n");
1440
+ return;
1441
+ }
1442
+ for (const name of keys.sort()) {
1443
+ const status = enablement[name]?.enabled === false ? " (disabled)" : "";
1444
+ process.stdout.write(`- ${name}${status}\n`);
1445
+ }
1446
+ }
1447
+
1271
1448
  function listCodexConfig(filePath) {
1272
1449
  if (!toml) {
1273
1450
  fail("TOML dependency not available. Install dependencies and retry.");
@@ -1288,8 +1465,7 @@ function listGooseConfig(filePath) {
1288
1465
 
1289
1466
  function listClaudeConfig(filePath, allProjects, projectPath) {
1290
1467
  const data = readJson(filePath);
1291
- const isDesktopConfig =
1292
- filePath.endsWith(".claude.json") || filePath.endsWith("claude_desktop_config.json");
1468
+ const isDesktopConfig = filePath.endsWith(".claude.json");
1293
1469
  if (isDesktopConfig) {
1294
1470
  const projects = Object.keys(data.projects || {});
1295
1471
  if (allProjects) {
@@ -1355,8 +1531,7 @@ function whereGooseConfig(filePath, serverName) {
1355
1531
 
1356
1532
  function whereClaudeConfig(filePath, serverName, allProjects, projectPath) {
1357
1533
  const data = readJson(filePath);
1358
- const isDesktopConfig =
1359
- filePath.endsWith(".claude.json") || filePath.endsWith("claude_desktop_config.json");
1534
+ const isDesktopConfig = filePath.endsWith(".claude.json");
1360
1535
  if (isDesktopConfig) {
1361
1536
  const projects = Object.keys(data.projects || {});
1362
1537
  if (allProjects) {
@@ -1444,8 +1619,7 @@ function showGooseConfig(filePath, serverName) {
1444
1619
 
1445
1620
  function showClaudeConfig(filePath, serverName, allProjects, projectPath) {
1446
1621
  const data = readJson(filePath);
1447
- const isDesktopConfig =
1448
- filePath.endsWith(".claude.json") || filePath.endsWith("claude_desktop_config.json");
1622
+ const isDesktopConfig = filePath.endsWith(".claude.json");
1449
1623
  if (isDesktopConfig) {
1450
1624
  const projects = Object.keys(data.projects || {});
1451
1625
  if (allProjects) {
@@ -1458,7 +1632,7 @@ function showClaudeConfig(filePath, serverName, allProjects, projectPath) {
1458
1632
  options.outputNormalized
1459
1633
  ? {
1460
1634
  project: key,
1461
- ...normalizeServerDetails("claude", serverName, store[serverName]),
1635
+ ...normalizeServerDetails("claude-cli", serverName, store[serverName]),
1462
1636
  }
1463
1637
  : {
1464
1638
  project: key,
@@ -1491,7 +1665,7 @@ function showClaudeConfig(filePath, serverName, allProjects, projectPath) {
1491
1665
  fail(`Server "${serverName}" not found for ${projectKey}.`);
1492
1666
  }
1493
1667
  const details = options.outputNormalized
1494
- ? normalizeServerDetails("claude", serverName, entry, projectKey)
1668
+ ? normalizeServerDetails("claude-cli", serverName, entry, projectKey)
1495
1669
  : cloneJsonLike(entry);
1496
1670
  outputShow(filePath, serverName, details, projectKey);
1497
1671
  return;
@@ -1502,7 +1676,7 @@ function showClaudeConfig(filePath, serverName, allProjects, projectPath) {
1502
1676
  fail(`Server "${serverName}" not found in ${filePath}.`);
1503
1677
  }
1504
1678
  const details = options.outputNormalized
1505
- ? normalizeServerDetails("claude", serverName, entry)
1679
+ ? normalizeServerDetails("claude-cli", serverName, entry)
1506
1680
  : cloneJsonLike(entry);
1507
1681
  outputShow(filePath, serverName, details);
1508
1682
  }
@@ -1849,6 +2023,9 @@ Notes:
1849
2023
  For Claude, --local maps to the project scope file ./.mcp.json.
1850
2024
  For Codex, --local writes to ./.codex/config.toml.
1851
2025
  For Gemini, --local writes to ./.gemini/settings.json.
2026
+
2027
+ Aliases:
2028
+ claude → claude-cli (Claude Code CLI)
1852
2029
  `);
1853
2030
  return;
1854
2031
  }
@@ -1860,7 +2037,7 @@ Usage:
1860
2037
  mcp-conf add --client <name> --name <serverName> [--env <name> | --env-path <path> | --session-env | --mcp <dest>] [options]
1861
2038
 
1862
2039
  Options:
1863
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2040
+ --client <name> cline | codex | claude-cli | claude-desktop | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
1864
2041
  --name <serverName> required MCP server name key
1865
2042
  --env <name> env profile name (stdio only), writes --env=<name>
1866
2043
  --env-path <path> .env path (stdio only)
@@ -1889,7 +2066,7 @@ Usage:
1889
2066
  mcp-conf rm --client <name> --name <serverName> [options]
1890
2067
 
1891
2068
  Options:
1892
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2069
+ --client <name> cline | codex | claude-cli | claude-desktop | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
1893
2070
  --name <serverName> required MCP server name key
1894
2071
  --global write to global user config (default)
1895
2072
  --local write to project config (where supported)
@@ -1909,7 +2086,7 @@ Usage:
1909
2086
  mcp-conf ls --client <name> [options]
1910
2087
 
1911
2088
  Options:
1912
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2089
+ --client <name> cline | codex | claude-cli | claude-desktop | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
1913
2090
  --global write to global user config (default)
1914
2091
  --local write to project config (where supported)
1915
2092
  --all-projects Claude global: list across all projects
@@ -1927,7 +2104,7 @@ Usage:
1927
2104
  mcp-conf enable --client <name> --name <serverName> [options]
1928
2105
 
1929
2106
  Options:
1930
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2107
+ --client <name> cline | codex | claude-cli | claude-desktop | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
1931
2108
  --name <serverName> required MCP server name key
1932
2109
  --global write to global user config (default)
1933
2110
  --local write to project config (where supported)
@@ -1947,7 +2124,7 @@ Usage:
1947
2124
  mcp-conf disable --client <name> --name <serverName> [options]
1948
2125
 
1949
2126
  Options:
1950
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2127
+ --client <name> cline | codex | claude-cli | claude-desktop | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
1951
2128
  --name <serverName> required MCP server name key
1952
2129
  --global write to global user config (default)
1953
2130
  --local write to project config (where supported)
@@ -1967,7 +2144,7 @@ Usage:
1967
2144
  mcp-conf where --client <name> --name <serverName> [options]
1968
2145
 
1969
2146
  Options:
1970
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2147
+ --client <name> cline | codex | claude-cli | claude-desktop | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
1971
2148
  --name <serverName> required MCP server name key
1972
2149
  --global write to global user config (default)
1973
2150
  --local write to project config (where supported)
@@ -1986,7 +2163,7 @@ Usage:
1986
2163
  mcp-conf show --client <name> --name <serverName> [options]
1987
2164
 
1988
2165
  Options:
1989
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2166
+ --client <name> cline | codex | claude-cli | claude-desktop | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
1990
2167
  --name <serverName> required MCP server name key
1991
2168
  --global read from global user config (default)
1992
2169
  --local read from project config (where supported)
@@ -2007,7 +2184,7 @@ Usage:
2007
2184
  mcp-conf update --client <name> --name <serverName> [--env <name> | --env-path <path> | --session-env | --mcp <dest>] [options]
2008
2185
 
2009
2186
  Options:
2010
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2187
+ --client <name> cline | codex | claude-cli | claude-desktop | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | qwen | gemini | crush (repeatable)
2011
2188
  --name <serverName> required MCP server name key
2012
2189
  --env <name> env profile name (stdio only), writes --env=<name>
2013
2190
  --env-path <path> .env path (stdio only)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/configurator",
3
- "version": "0.2.1",
3
+ "version": "1.0.0",
4
4
  "description": "MCP client configurator for mcp-abap-adt and mcp-abap-adt-proxy",
5
5
  "license": "MIT",
6
6
  "repository": {