@mcp-abap-adt/configurator 0.0.10 → 0.0.11

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
@@ -20,6 +20,8 @@ mcp-conf --client codex --name abap-http --transport http --url http://localhost
20
20
  mcp-conf --client opencode --name abap --transport http --url http://localhost:3000/mcp/stream/http
21
21
  mcp-conf --client kilo --name abap --transport http --url http://localhost:3000/mcp/stream/http
22
22
  mcp-conf --client copilot --name abap --transport http --url http://localhost:3000/mcp/stream/http --header x-mcp-destination=trial
23
+ mcp-conf --client crush --name abap --mcp TRIAL
24
+ mcp-conf --client crush --name abap --transport http --url http://localhost:3000/mcp/stream/http
23
25
  mcp-conf tui
24
26
  ```
25
27
 
@@ -15,6 +15,7 @@ const CLIENTS = [
15
15
  { name: "opencode", message: "OpenCode (kilo)" },
16
16
  { name: "copilot", message: "GitHub Copilot" },
17
17
  { name: "antigravity", message: "Antigravity" },
18
+ { name: "crush", message: "Crush" },
18
19
  ];
19
20
 
20
21
  const HEADER_KEYS = [
package/bin/mcp-conf.js CHANGED
@@ -441,6 +441,23 @@ for (const client of options.clients) {
441
441
  );
442
442
  }
443
443
  break;
444
+ case "crush":
445
+ requireScope("Crush", ["global", "local"], scope);
446
+ if (options.list) {
447
+ listJsonConfig(getCrushPath(platform, home, userProfile, scope), "crush");
448
+ } else if (options.show) {
449
+ showJsonConfig(getCrushPath(platform, home, userProfile, scope), "crush", options.name);
450
+ } else if (options.where) {
451
+ whereJsonConfig(getCrushPath(platform, home, userProfile, scope), "crush", options.name);
452
+ } else {
453
+ writeJsonConfig(
454
+ getCrushPath(platform, home, userProfile, scope),
455
+ options.name,
456
+ serverArgs,
457
+ "crush",
458
+ );
459
+ }
460
+ break;
444
461
  default:
445
462
  fail(`Unknown client: ${client}`);
446
463
  }
@@ -580,6 +597,16 @@ function getWindsurfPath(platformValue, homeDir, userProfileDir) {
580
597
  return path.join(homeDir, ".codeium", "windsurf", "mcp_config.json");
581
598
  }
582
599
 
600
+ function getCrushPath(platformValue, homeDir, userProfileDir, scopeValue) {
601
+ if (scopeValue === "local") {
602
+ return path.join(process.cwd(), ".crush.json");
603
+ }
604
+ if (platformValue === "win32") {
605
+ return path.join(userProfileDir, "AppData", "Local", "crush", "crush.json");
606
+ }
607
+ return path.join(homeDir, ".config", "crush", "crush.json");
608
+ }
609
+
583
610
  function requireScope(clientLabel, allowedScopes, requestedScope) {
584
611
  if (!allowedScopes.includes(requestedScope)) {
585
612
  fail(
@@ -625,13 +652,15 @@ function resolveProjectSelector(data, projectPath) {
625
652
  }
626
653
 
627
654
  function getDefaultDisabled(clientType) {
628
- return ["cline", "codex", "windsurf", "goose", "claude", "opencode"].includes(clientType);
655
+ return ["cline", "codex", "windsurf", "goose", "claude", "opencode", "crush"].includes(
656
+ clientType,
657
+ );
629
658
  }
630
659
 
631
660
  function writeJsonConfig(filePath, serverName, argsArray, clientType) {
632
661
  ensureDir(filePath);
633
662
  const data = readJson(filePath);
634
- if (clientType === "opencode") {
663
+ if (clientType === "opencode" || clientType === "crush") {
635
664
  data.mcp = data.mcp || {};
636
665
  } else if (clientType === "antigravity") {
637
666
  data.mcpServers = data.mcpServers || {};
@@ -648,7 +677,7 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
648
677
  );
649
678
  }
650
679
  const store =
651
- clientType === "opencode"
680
+ clientType === "opencode" || clientType === "crush"
652
681
  ? data.mcp
653
682
  : clientType === "copilot"
654
683
  ? data.servers
@@ -671,7 +700,7 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
671
700
  }
672
701
  if (options.remove) {
673
702
  const store =
674
- clientType === "opencode"
703
+ clientType === "opencode" || clientType === "crush"
675
704
  ? data.mcp
676
705
  : clientType === "copilot"
677
706
  ? data.servers
@@ -684,7 +713,7 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
684
713
  return;
685
714
  }
686
715
  const store =
687
- clientType === "opencode"
716
+ clientType === "opencode" || clientType === "crush"
688
717
  ? data.mcp
689
718
  : clientType === "copilot"
690
719
  ? data.servers
@@ -731,6 +760,30 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
731
760
  writeFile(filePath, JSON.stringify(data, null, 2));
732
761
  return;
733
762
  }
763
+ if (clientType === "crush") {
764
+ if (options.transport === "stdio") {
765
+ store[serverName] = {
766
+ type: "stdio",
767
+ command: options.command,
768
+ args: argsArray,
769
+ timeout: options.timeout,
770
+ disabled: !!(options.disabled || getDefaultDisabled("crush")),
771
+ };
772
+ } else {
773
+ const entry = {
774
+ type: options.transport === "streamableHttp" ? "http" : options.transport,
775
+ url: options.url,
776
+ timeout: options.timeout,
777
+ disabled: !!(options.disabled || getDefaultDisabled("crush")),
778
+ };
779
+ if (Object.keys(options.headers).length > 0) {
780
+ entry.headers = options.headers;
781
+ }
782
+ store[serverName] = entry;
783
+ }
784
+ writeFile(filePath, JSON.stringify(data, null, 2));
785
+ return;
786
+ }
734
787
  if (clientType === "antigravity") {
735
788
  if (options.transport === "stdio") {
736
789
  store[serverName] = {
@@ -1113,7 +1166,7 @@ function writeGooseConfig(filePath, serverName, argsArray) {
1113
1166
  function listJsonConfig(filePath, clientType) {
1114
1167
  const data = readJson(filePath);
1115
1168
  let store;
1116
- if (clientType === "opencode") {
1169
+ if (clientType === "opencode" || clientType === "crush") {
1117
1170
  store = data.mcp || {};
1118
1171
  } else if (clientType === "antigravity") {
1119
1172
  store = data.mcpServers || {};
@@ -1180,7 +1233,7 @@ function claudeLocalHasServer(filePath, serverName) {
1180
1233
  function whereJsonConfig(filePath, clientType, serverName) {
1181
1234
  const data = readJson(filePath);
1182
1235
  let store;
1183
- if (clientType === "opencode") {
1236
+ if (clientType === "opencode" || clientType === "crush") {
1184
1237
  store = data.mcp || {};
1185
1238
  } else if (clientType === "antigravity") {
1186
1239
  store = data.mcpServers || {};
@@ -1248,7 +1301,7 @@ function whereClaudeConfig(filePath, serverName, allProjects, projectPath) {
1248
1301
  function showJsonConfig(filePath, clientType, serverName) {
1249
1302
  const data = readJson(filePath);
1250
1303
  let store;
1251
- if (clientType === "opencode") {
1304
+ if (clientType === "opencode" || clientType === "crush") {
1252
1305
  store = data.mcp || {};
1253
1306
  } else if (clientType === "antigravity") {
1254
1307
  store = data.mcpServers || {};
@@ -1439,6 +1492,11 @@ function inferTransport(clientType, entry, parsedArgs) {
1439
1492
  if (clientType === "antigravity") {
1440
1493
  return entry?.type === "http" ? "http" : "stdio";
1441
1494
  }
1495
+ if (clientType === "crush") {
1496
+ if (entry?.type === "http") return "http";
1497
+ if (entry?.type === "sse") return "sse";
1498
+ return "stdio";
1499
+ }
1442
1500
  if (entry?.type === "streamableHttp" || entry?.type === "http") {
1443
1501
  return "http";
1444
1502
  }
@@ -1619,7 +1677,7 @@ Usage:
1619
1677
  mcp-conf add --client <name> --name <serverName> [--env | --env-path <path> | --mcp <dest>] [options]
1620
1678
 
1621
1679
  Options:
1622
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity (repeatable)
1680
+ --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | crush (repeatable)
1623
1681
  --name <serverName> required MCP server name key
1624
1682
  --env use current shell/session env vars (stdio only)
1625
1683
  --env-path <path> .env path (stdio only)
@@ -1646,7 +1704,7 @@ Usage:
1646
1704
  mcp-conf rm --client <name> --name <serverName> [options]
1647
1705
 
1648
1706
  Options:
1649
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity (repeatable)
1707
+ --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | crush (repeatable)
1650
1708
  --name <serverName> required MCP server name key
1651
1709
  --global write to global user config (default)
1652
1710
  --local write to project config (where supported)
@@ -1665,7 +1723,7 @@ Usage:
1665
1723
  mcp-conf ls --client <name> [options]
1666
1724
 
1667
1725
  Options:
1668
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity (repeatable)
1726
+ --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | crush (repeatable)
1669
1727
  --global write to global user config (default)
1670
1728
  --local write to project config (where supported)
1671
1729
  --all-projects Claude global: list across all projects
@@ -1682,7 +1740,7 @@ Usage:
1682
1740
  mcp-conf enable --client <name> --name <serverName> [options]
1683
1741
 
1684
1742
  Options:
1685
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity (repeatable)
1743
+ --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | crush (repeatable)
1686
1744
  --name <serverName> required MCP server name key
1687
1745
  --global write to global user config (default)
1688
1746
  --local write to project config (where supported)
@@ -1701,7 +1759,7 @@ Usage:
1701
1759
  mcp-conf disable --client <name> --name <serverName> [options]
1702
1760
 
1703
1761
  Options:
1704
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity (repeatable)
1762
+ --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | crush (repeatable)
1705
1763
  --name <serverName> required MCP server name key
1706
1764
  --global write to global user config (default)
1707
1765
  --local write to project config (where supported)
@@ -1720,7 +1778,7 @@ Usage:
1720
1778
  mcp-conf where --client <name> --name <serverName> [options]
1721
1779
 
1722
1780
  Options:
1723
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity (repeatable)
1781
+ --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | crush (repeatable)
1724
1782
  --name <serverName> required MCP server name key
1725
1783
  --global write to global user config (default)
1726
1784
  --local write to project config (where supported)
@@ -1738,7 +1796,7 @@ Usage:
1738
1796
  mcp-conf show --client <name> --name <serverName> [options]
1739
1797
 
1740
1798
  Options:
1741
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity (repeatable)
1799
+ --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | crush (repeatable)
1742
1800
  --name <serverName> required MCP server name key
1743
1801
  --global read from global user config (default)
1744
1802
  --local read from project config (where supported)
@@ -1757,7 +1815,7 @@ Usage:
1757
1815
  mcp-conf update --client <name> --name <serverName> [--env | --env-path <path> | --mcp <dest>] [options]
1758
1816
 
1759
1817
  Options:
1760
- --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity (repeatable)
1818
+ --client <name> cline | codex | claude | goose | cursor | windsurf | opencode | kilo | copilot | antigravity | crush (repeatable)
1761
1819
  --name <serverName> required MCP server name key
1762
1820
  --env use current shell/session env vars (stdio only)
1763
1821
  --env-path <path> .env path (stdio only)
@@ -24,6 +24,8 @@ mcp-conf add --client opencode --name abap --transport http --url http://localho
24
24
  mcp-conf add --client kilo --name abap --transport http --url http://localhost:3000/mcp/stream/http
25
25
  mcp-conf add --client copilot --name abap --transport http --url http://localhost:3000/mcp/stream/http --header x-mcp-destination=trial
26
26
  mcp-conf add --client antigravity --name abap --transport http --url http://localhost:3000/mcp/stream/http
27
+ mcp-conf add --client crush --name abap --mcp TRIAL
28
+ mcp-conf add --client crush --name abap --transport http --url http://localhost:3000/mcp/stream/http
27
29
  mcp-conf tui
28
30
  ```
29
31
 
@@ -49,6 +51,7 @@ Enable MCP:
49
51
  mcp-conf enable --client codex --name abap
50
52
  mcp-conf enable --client cline --name abap
51
53
  mcp-conf enable --client antigravity --name abap
54
+ mcp-conf enable --client crush --name abap
52
55
  ```
53
56
 
54
57
  Remove MCP:
@@ -57,6 +60,7 @@ mcp-conf rm --client codex --name abap
57
60
  mcp-conf rm --client cline --name abap
58
61
  mcp-conf rm --client claude --name abap
59
62
  mcp-conf rm --client antigravity --name abap
63
+ mcp-conf rm --client crush --name abap
60
64
  ```
61
65
 
62
66
  List MCP servers:
@@ -66,6 +70,8 @@ mcp-conf ls --client cline
66
70
  mcp-conf ls --client claude --local
67
71
  mcp-conf ls --client claude --all-projects
68
72
  mcp-conf ls --client antigravity --global
73
+ mcp-conf ls --client crush
74
+ mcp-conf ls --client crush --local
69
75
  ```
70
76
 
71
77
  Find where a server is defined:
@@ -87,7 +93,7 @@ mcp-conf tui
87
93
 
88
94
  Options:
89
95
  - Commands: `add`, `rm`, `ls`, `enable`, `disable`, `where`, `show`, `update`, `tui` (first argument)
90
- - `--client <name>` (repeatable): `cline`, `codex`, `claude`, `goose`, `cursor`, `windsurf`, `opencode` (`kilo` alias), `copilot`, `antigravity`
96
+ - `--client <name>` (repeatable): `cline`, `codex`, `claude`, `goose`, `cursor`, `windsurf`, `opencode` (`kilo` alias), `copilot`, `antigravity`, `crush`
91
97
  - `--env`: use shell/session environment variables (stdio only)
92
98
  - `--env-path <path>`: use a specific `.env` file (stdio only)
93
99
  - `--mcp <destination>`: use service key destination
@@ -95,7 +101,7 @@ Options:
95
101
  - `--transport <type>`: `stdio`, `sse`, or `http` (`http` maps to `streamableHttp`)
96
102
  - `--command <bin>`: command to run (default: `mcp-abap-adt`)
97
103
  - `--global`: write to the global user config (default)
98
- - `--local`: write to the project config (supported by `cursor`, `opencode`/`kilo`, `copilot`, `claude`, `codex`)
104
+ - `--local`: write to the project config (supported by `cursor`, `opencode`/`kilo`, `copilot`, `claude`, `codex`, `crush`)
99
105
  - `--all-projects`: for Claude (global scope), apply `rm/enable/disable/ls/where` across all projects
100
106
  - `--project <path>`: for Claude (global scope), target a specific project path
101
107
  - `--url <http(s)://...>`: required for `sse` and `http`
@@ -113,7 +119,7 @@ Notes:
113
119
  - Claude stores enable/disable state under `enabledMcpServers` and `disabledMcpServers` for each project.
114
120
  - Claude enable/disable always updates `~/.claude.json` (global scope), even if you pass `--local`.
115
121
  - Antigravity HTTP entries use `serverUrl` instead of `url`.
116
- - New entries for Cline, Codex, Windsurf, Goose, Claude, and OpenCode are added **disabled by default**. Use `enable` to turn them on.
122
+ - New entries for Cline, Codex, Windsurf, Goose, Claude, OpenCode, and Crush are added **disabled by default**. Use `enable` to turn them on.
117
123
  - Windsurf follows `disabled` like Cline. The configurator sets `disabled = true` for default-disabled entries.
118
124
  - `enable`/`disable` only work if the server entry already exists. Use add commands with `--env`, `--env-path`, or `--mcp` first.
119
125
  - Non-stdio transports are supported for Cline/Cursor/Windsurf/Claude/Goose. Codex supports `http` (streamable HTTP) but not `sse`.
@@ -156,6 +162,9 @@ Global (default) locations:
156
162
  - **Antigravity**:
157
163
  - Linux/macOS: `~/.gemini/antigravity/mcp_config.json`
158
164
  - Note: path is community-reported; verify against latest vendor docs.
165
+ - **Crush**:
166
+ - Linux/macOS: `~/.config/crush/crush.json`
167
+ - Windows: `%USERPROFILE%\AppData\Local\crush\crush.json`
159
168
 
160
169
  Local (project) locations:
161
170
  - **Claude Code**:
@@ -168,3 +177,5 @@ Local (project) locations:
168
177
  - Project: `./.vscode/mcp.json` (uses `servers.<name>` entries)
169
178
  - **Antigravity**:
170
179
  - Project: `./.antigravity/mcp.json` (community-reported; not supported yet)
180
+ - **Crush**:
181
+ - Project: `./.crush.json` (uses `mcp.<name>` entries with `disabled: true|false`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/configurator",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "MCP client configurator for mcp-abap-adt and mcp-abap-adt-proxy",
5
5
  "license": "MIT",
6
6
  "repository": {