@mcp-abap-adt/configurator 0.0.9 → 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 +2 -0
- package/bin/mcp-conf-tui.js +1 -0
- package/bin/mcp-conf.js +80 -38
- package/docs/CLIENT_INSTALLERS.md +18 -7
- package/package.json +1 -1
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
|
|
package/bin/mcp-conf-tui.js
CHANGED
package/bin/mcp-conf.js
CHANGED
|
@@ -320,37 +320,33 @@ for (const client of options.clients) {
|
|
|
320
320
|
fail("--project is only supported for Claude global config.");
|
|
321
321
|
}
|
|
322
322
|
if (options.toggle && scope === "local") {
|
|
323
|
-
const localPath = getClaudePath(
|
|
323
|
+
const localPath = getClaudePath(home, "local");
|
|
324
324
|
if (!claudeLocalHasServer(localPath, options.name)) {
|
|
325
325
|
fail(`Server "${options.name}" not found in ${localPath}.`);
|
|
326
326
|
}
|
|
327
327
|
}
|
|
328
328
|
if (options.list) {
|
|
329
329
|
listClaudeConfig(
|
|
330
|
-
getClaudePath(
|
|
330
|
+
getClaudePath(home, claudeToggleScope),
|
|
331
331
|
options.allProjects,
|
|
332
332
|
options.projectPath,
|
|
333
333
|
);
|
|
334
334
|
} else if (options.show) {
|
|
335
335
|
showClaudeConfig(
|
|
336
|
-
getClaudePath(
|
|
336
|
+
getClaudePath(home, claudeToggleScope),
|
|
337
337
|
options.name,
|
|
338
338
|
options.allProjects,
|
|
339
339
|
options.projectPath,
|
|
340
340
|
);
|
|
341
341
|
} else if (options.where) {
|
|
342
342
|
whereClaudeConfig(
|
|
343
|
-
getClaudePath(
|
|
343
|
+
getClaudePath(home, claudeToggleScope),
|
|
344
344
|
options.name,
|
|
345
345
|
options.allProjects,
|
|
346
346
|
options.projectPath,
|
|
347
347
|
);
|
|
348
348
|
} else {
|
|
349
|
-
writeClaudeConfig(
|
|
350
|
-
getClaudePath(platform, home, appData, claudeToggleScope),
|
|
351
|
-
options.name,
|
|
352
|
-
serverArgs,
|
|
353
|
-
);
|
|
349
|
+
writeClaudeConfig(getClaudePath(home, claudeToggleScope), options.name, serverArgs);
|
|
354
350
|
}
|
|
355
351
|
break;
|
|
356
352
|
}
|
|
@@ -445,6 +441,23 @@ for (const client of options.clients) {
|
|
|
445
441
|
);
|
|
446
442
|
}
|
|
447
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;
|
|
448
461
|
default:
|
|
449
462
|
fail(`Unknown client: ${client}`);
|
|
450
463
|
}
|
|
@@ -534,22 +547,10 @@ function getCodexPath(platformValue, homeDir, userProfileDir, scopeValue) {
|
|
|
534
547
|
return path.join(homeDir, ".codex", "config.toml");
|
|
535
548
|
}
|
|
536
549
|
|
|
537
|
-
function getClaudePath(
|
|
550
|
+
function getClaudePath(homeDir, scopeValue) {
|
|
538
551
|
if (scopeValue === "local") {
|
|
539
552
|
return path.join(process.cwd(), ".mcp.json");
|
|
540
553
|
}
|
|
541
|
-
if (platformValue === "darwin") {
|
|
542
|
-
return path.join(
|
|
543
|
-
homeDir,
|
|
544
|
-
"Library",
|
|
545
|
-
"Application Support",
|
|
546
|
-
"Claude",
|
|
547
|
-
"claude_desktop_config.json",
|
|
548
|
-
);
|
|
549
|
-
}
|
|
550
|
-
if (platformValue === "win32") {
|
|
551
|
-
return path.join(appDataDir, "Claude", "claude_desktop_config.json");
|
|
552
|
-
}
|
|
553
554
|
return path.join(homeDir, ".claude.json");
|
|
554
555
|
}
|
|
555
556
|
|
|
@@ -596,6 +597,16 @@ function getWindsurfPath(platformValue, homeDir, userProfileDir) {
|
|
|
596
597
|
return path.join(homeDir, ".codeium", "windsurf", "mcp_config.json");
|
|
597
598
|
}
|
|
598
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
|
+
|
|
599
610
|
function requireScope(clientLabel, allowedScopes, requestedScope) {
|
|
600
611
|
if (!allowedScopes.includes(requestedScope)) {
|
|
601
612
|
fail(
|
|
@@ -641,13 +652,15 @@ function resolveProjectSelector(data, projectPath) {
|
|
|
641
652
|
}
|
|
642
653
|
|
|
643
654
|
function getDefaultDisabled(clientType) {
|
|
644
|
-
return ["cline", "codex", "windsurf", "goose", "claude", "opencode"].includes(
|
|
655
|
+
return ["cline", "codex", "windsurf", "goose", "claude", "opencode", "crush"].includes(
|
|
656
|
+
clientType,
|
|
657
|
+
);
|
|
645
658
|
}
|
|
646
659
|
|
|
647
660
|
function writeJsonConfig(filePath, serverName, argsArray, clientType) {
|
|
648
661
|
ensureDir(filePath);
|
|
649
662
|
const data = readJson(filePath);
|
|
650
|
-
if (clientType === "opencode") {
|
|
663
|
+
if (clientType === "opencode" || clientType === "crush") {
|
|
651
664
|
data.mcp = data.mcp || {};
|
|
652
665
|
} else if (clientType === "antigravity") {
|
|
653
666
|
data.mcpServers = data.mcpServers || {};
|
|
@@ -664,7 +677,7 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
|
|
|
664
677
|
);
|
|
665
678
|
}
|
|
666
679
|
const store =
|
|
667
|
-
clientType === "opencode"
|
|
680
|
+
clientType === "opencode" || clientType === "crush"
|
|
668
681
|
? data.mcp
|
|
669
682
|
: clientType === "copilot"
|
|
670
683
|
? data.servers
|
|
@@ -687,7 +700,7 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
|
|
|
687
700
|
}
|
|
688
701
|
if (options.remove) {
|
|
689
702
|
const store =
|
|
690
|
-
clientType === "opencode"
|
|
703
|
+
clientType === "opencode" || clientType === "crush"
|
|
691
704
|
? data.mcp
|
|
692
705
|
: clientType === "copilot"
|
|
693
706
|
? data.servers
|
|
@@ -700,7 +713,7 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
|
|
|
700
713
|
return;
|
|
701
714
|
}
|
|
702
715
|
const store =
|
|
703
|
-
clientType === "opencode"
|
|
716
|
+
clientType === "opencode" || clientType === "crush"
|
|
704
717
|
? data.mcp
|
|
705
718
|
: clientType === "copilot"
|
|
706
719
|
? data.servers
|
|
@@ -747,6 +760,30 @@ function writeJsonConfig(filePath, serverName, argsArray, clientType) {
|
|
|
747
760
|
writeFile(filePath, JSON.stringify(data, null, 2));
|
|
748
761
|
return;
|
|
749
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
|
+
}
|
|
750
787
|
if (clientType === "antigravity") {
|
|
751
788
|
if (options.transport === "stdio") {
|
|
752
789
|
store[serverName] = {
|
|
@@ -1129,7 +1166,7 @@ function writeGooseConfig(filePath, serverName, argsArray) {
|
|
|
1129
1166
|
function listJsonConfig(filePath, clientType) {
|
|
1130
1167
|
const data = readJson(filePath);
|
|
1131
1168
|
let store;
|
|
1132
|
-
if (clientType === "opencode") {
|
|
1169
|
+
if (clientType === "opencode" || clientType === "crush") {
|
|
1133
1170
|
store = data.mcp || {};
|
|
1134
1171
|
} else if (clientType === "antigravity") {
|
|
1135
1172
|
store = data.mcpServers || {};
|
|
@@ -1196,7 +1233,7 @@ function claudeLocalHasServer(filePath, serverName) {
|
|
|
1196
1233
|
function whereJsonConfig(filePath, clientType, serverName) {
|
|
1197
1234
|
const data = readJson(filePath);
|
|
1198
1235
|
let store;
|
|
1199
|
-
if (clientType === "opencode") {
|
|
1236
|
+
if (clientType === "opencode" || clientType === "crush") {
|
|
1200
1237
|
store = data.mcp || {};
|
|
1201
1238
|
} else if (clientType === "antigravity") {
|
|
1202
1239
|
store = data.mcpServers || {};
|
|
@@ -1264,7 +1301,7 @@ function whereClaudeConfig(filePath, serverName, allProjects, projectPath) {
|
|
|
1264
1301
|
function showJsonConfig(filePath, clientType, serverName) {
|
|
1265
1302
|
const data = readJson(filePath);
|
|
1266
1303
|
let store;
|
|
1267
|
-
if (clientType === "opencode") {
|
|
1304
|
+
if (clientType === "opencode" || clientType === "crush") {
|
|
1268
1305
|
store = data.mcp || {};
|
|
1269
1306
|
} else if (clientType === "antigravity") {
|
|
1270
1307
|
store = data.mcpServers || {};
|
|
@@ -1455,6 +1492,11 @@ function inferTransport(clientType, entry, parsedArgs) {
|
|
|
1455
1492
|
if (clientType === "antigravity") {
|
|
1456
1493
|
return entry?.type === "http" ? "http" : "stdio";
|
|
1457
1494
|
}
|
|
1495
|
+
if (clientType === "crush") {
|
|
1496
|
+
if (entry?.type === "http") return "http";
|
|
1497
|
+
if (entry?.type === "sse") return "sse";
|
|
1498
|
+
return "stdio";
|
|
1499
|
+
}
|
|
1458
1500
|
if (entry?.type === "streamableHttp" || entry?.type === "http") {
|
|
1459
1501
|
return "http";
|
|
1460
1502
|
}
|
|
@@ -1635,7 +1677,7 @@ Usage:
|
|
|
1635
1677
|
mcp-conf add --client <name> --name <serverName> [--env | --env-path <path> | --mcp <dest>] [options]
|
|
1636
1678
|
|
|
1637
1679
|
Options:
|
|
1638
|
-
--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)
|
|
1639
1681
|
--name <serverName> required MCP server name key
|
|
1640
1682
|
--env use current shell/session env vars (stdio only)
|
|
1641
1683
|
--env-path <path> .env path (stdio only)
|
|
@@ -1662,7 +1704,7 @@ Usage:
|
|
|
1662
1704
|
mcp-conf rm --client <name> --name <serverName> [options]
|
|
1663
1705
|
|
|
1664
1706
|
Options:
|
|
1665
|
-
--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)
|
|
1666
1708
|
--name <serverName> required MCP server name key
|
|
1667
1709
|
--global write to global user config (default)
|
|
1668
1710
|
--local write to project config (where supported)
|
|
@@ -1681,7 +1723,7 @@ Usage:
|
|
|
1681
1723
|
mcp-conf ls --client <name> [options]
|
|
1682
1724
|
|
|
1683
1725
|
Options:
|
|
1684
|
-
--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)
|
|
1685
1727
|
--global write to global user config (default)
|
|
1686
1728
|
--local write to project config (where supported)
|
|
1687
1729
|
--all-projects Claude global: list across all projects
|
|
@@ -1698,7 +1740,7 @@ Usage:
|
|
|
1698
1740
|
mcp-conf enable --client <name> --name <serverName> [options]
|
|
1699
1741
|
|
|
1700
1742
|
Options:
|
|
1701
|
-
--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)
|
|
1702
1744
|
--name <serverName> required MCP server name key
|
|
1703
1745
|
--global write to global user config (default)
|
|
1704
1746
|
--local write to project config (where supported)
|
|
@@ -1717,7 +1759,7 @@ Usage:
|
|
|
1717
1759
|
mcp-conf disable --client <name> --name <serverName> [options]
|
|
1718
1760
|
|
|
1719
1761
|
Options:
|
|
1720
|
-
--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)
|
|
1721
1763
|
--name <serverName> required MCP server name key
|
|
1722
1764
|
--global write to global user config (default)
|
|
1723
1765
|
--local write to project config (where supported)
|
|
@@ -1736,7 +1778,7 @@ Usage:
|
|
|
1736
1778
|
mcp-conf where --client <name> --name <serverName> [options]
|
|
1737
1779
|
|
|
1738
1780
|
Options:
|
|
1739
|
-
--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)
|
|
1740
1782
|
--name <serverName> required MCP server name key
|
|
1741
1783
|
--global write to global user config (default)
|
|
1742
1784
|
--local write to project config (where supported)
|
|
@@ -1754,7 +1796,7 @@ Usage:
|
|
|
1754
1796
|
mcp-conf show --client <name> --name <serverName> [options]
|
|
1755
1797
|
|
|
1756
1798
|
Options:
|
|
1757
|
-
--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)
|
|
1758
1800
|
--name <serverName> required MCP server name key
|
|
1759
1801
|
--global read from global user config (default)
|
|
1760
1802
|
--local read from project config (where supported)
|
|
@@ -1773,7 +1815,7 @@ Usage:
|
|
|
1773
1815
|
mcp-conf update --client <name> --name <serverName> [--env | --env-path <path> | --mcp <dest>] [options]
|
|
1774
1816
|
|
|
1775
1817
|
Options:
|
|
1776
|
-
--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)
|
|
1777
1819
|
--name <serverName> required MCP server name key
|
|
1778
1820
|
--env use current shell/session env vars (stdio only)
|
|
1779
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
|
|
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`.
|
|
@@ -138,10 +144,8 @@ Global (default) locations:
|
|
|
138
144
|
- Windows: `%USERPROFILE%\.codex\config.toml`
|
|
139
145
|
- Local (project): `./.codex/config.toml`
|
|
140
146
|
- **Claude Code (CLI)**:
|
|
141
|
-
- Linux
|
|
142
|
-
-
|
|
143
|
-
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
144
|
-
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
147
|
+
- Linux/macOS: `~/.claude.json` (per-project entries under `projects.<cwd>.mcpServers`)
|
|
148
|
+
- Windows: `%USERPROFILE%\.claude.json`
|
|
145
149
|
- **Goose**:
|
|
146
150
|
- Linux/macOS: `~/.config/goose/config.yaml`
|
|
147
151
|
- Windows: `%APPDATA%\Block\goose\config\config.yaml`
|
|
@@ -151,11 +155,16 @@ Global (default) locations:
|
|
|
151
155
|
- **Windsurf**:
|
|
152
156
|
- Linux/macOS: `~/.codeium/windsurf/mcp_config.json`
|
|
153
157
|
- Windows: `%USERPROFILE%\.codeium\windsurf\mcp_config.json`
|
|
158
|
+
- Note: some Windsurf docs/examples also mention legacy `~/.codeium/mcp_config.json`.
|
|
154
159
|
- **OpenCode**:
|
|
155
160
|
- Linux/macOS: `~/.config/opencode/opencode.json`
|
|
156
161
|
- Windows: `%APPDATA%\opencode\opencode.json`
|
|
157
162
|
- **Antigravity**:
|
|
158
163
|
- Linux/macOS: `~/.gemini/antigravity/mcp_config.json`
|
|
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`)
|