@reconcrap/boss-recommend-mcp 2.0.51 → 2.0.53
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 -2
- package/bin/boss-recommend-mcp.js +0 -0
- package/config/screening-config.example.json +1 -1
- package/package.json +120 -120
- package/src/cli.js +47 -4
- package/src/core/run/index.js +310 -310
- package/src/domains/recommend/detail.js +544 -544
- package/src/domains/recommend/run-service.js +1235 -1235
- package/src/index.js +16 -5
- package/src/recommend-mcp.js +1701 -1701
- package/src/run-state.js +358 -358
package/README.md
CHANGED
|
@@ -134,8 +134,8 @@ node src/cli.js start
|
|
|
134
134
|
|
|
135
135
|
全局 npm 安装会自动运行 `boss-recommend-mcp install`。该安装器会在 Windows 和 macOS 上自动检测 Trae / Trae CN / OpenClaw / QClaw 的常见配置目录:
|
|
136
136
|
|
|
137
|
-
- Windows: `%APPDATA%\Trae*\User\mcp.json`、`%USERPROFILE%\.trae*\mcp.json`、`%USERPROFILE%\.openclaw\mcp.json`、`%APPDATA%\OpenClaw\User\mcp.json`、`%USERPROFILE%\.qclaw\openclaw.json`
|
|
138
|
-
- macOS: `~/Library/Application Support/Trae*/User/mcp.json`、`~/.trae*/mcp.json`、`~/.openclaw/mcp.json`、`~/Library/Application Support/OpenClaw/User/mcp.json`
|
|
137
|
+
- Windows: `%APPDATA%\Trae*\User\mcp.json`、`%USERPROFILE%\.trae*\mcp.json`、`%USERPROFILE%\.openclaw\mcp.json`、`%USERPROFILE%\.openclaw\openclaw.json`、`%APPDATA%\OpenClaw\User\mcp.json`、`%USERPROFILE%\.qclaw\openclaw.json`
|
|
138
|
+
- macOS: `~/Library/Application Support/Trae*/User/mcp.json`、`~/.trae*/mcp.json`、`~/.openclaw/mcp.json`、`~/.openclaw/openclaw.json`、`~/Library/Application Support/OpenClaw/User/mcp.json`
|
|
139
139
|
|
|
140
140
|
如果检测到 legacy Boss server entries,installer 会:
|
|
141
141
|
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@reconcrap/boss-recommend-mcp",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "Unified MCP pipeline for recommend-page filtering and screening on Boss Zhipin",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"boss",
|
|
7
|
-
"mcp",
|
|
8
|
-
"codex",
|
|
9
|
-
"recruiting",
|
|
10
|
-
"boss-zhipin",
|
|
11
|
-
"recommend"
|
|
12
|
-
],
|
|
13
|
-
"type": "module",
|
|
14
|
-
"main": "src/index.js",
|
|
15
|
-
"bin": {
|
|
16
|
-
"boss-recommend-mcp": "bin/boss-recommend-mcp.js"
|
|
17
|
-
},
|
|
18
|
-
"scripts": {
|
|
19
|
-
"start": "node src/index.js",
|
|
20
|
-
"cli": "node src/cli.js",
|
|
21
|
-
"install:local": "node src/cli.js install",
|
|
22
|
-
"postinstall": "node scripts/postinstall.cjs",
|
|
23
|
-
"test:parser": "node src/test-parser.js",
|
|
24
|
-
"test:run-state": "node src/test-run-state.js",
|
|
25
|
-
"test:cdp-browser": "node src/test-cdp-browser.js",
|
|
26
|
-
"test:core-capture": "node src/test-core-capture.js",
|
|
27
|
-
"test:core-cv-capture-target": "node src/test-core-cv-capture-target.js",
|
|
28
|
-
"test:core-cv-acquisition": "node src/test-core-cv-acquisition.js",
|
|
29
|
-
"test:core-greet-quota": "node src/test-core-greet-quota.js",
|
|
30
|
-
"test:core-infinite-list": "node src/test-core-infinite-list.js",
|
|
31
|
-
"test:core-reporting": "node src/test-core-reporting.js",
|
|
32
|
-
"test:core-run": "node src/test-core-run.js",
|
|
33
|
-
"test:core-screening": "node src/test-core-screening.js",
|
|
34
|
-
"test:core-self-heal": "node src/test-core-self-heal.js",
|
|
35
|
-
"test:installer-migration": "node src/test-installer-migration.js",
|
|
36
|
-
"test:recommend-actions": "node src/test-recommend-actions.js",
|
|
37
|
-
"test:recommend-domain": "node src/test-recommend-domain.js",
|
|
38
|
-
"test:recommend-run-service": "node src/test-recommend-run-service.js",
|
|
39
|
-
"test:recommend-mcp": "node src/test-recommend-mcp.js",
|
|
40
|
-
"test:recruit-domain": "node src/test-recruit-domain.js",
|
|
41
|
-
"test:recruit-mcp": "node src/test-recruit-mcp.js",
|
|
42
|
-
"test:chat-domain": "node src/test-chat-domain.js",
|
|
43
|
-
"test:chat-run-service": "node src/test-chat-run-service.js",
|
|
44
|
-
"test:chat-mcp": "node src/test-chat-mcp.js",
|
|
45
|
-
"test:async": "node src/test-index-async.js",
|
|
46
|
-
"test:runtime-scan": "node src/test-runtime-scan.js",
|
|
47
|
-
"scan:runtime": "node scripts/scan-forbidden-runtime.js",
|
|
48
|
-
"scan:runtime:json": "node scripts/scan-forbidden-runtime.js --json",
|
|
49
|
-
"scan:runtime:strict": "node scripts/scan-forbidden-runtime.js --fail-on-findings",
|
|
50
|
-
"scan:runtime:package": "node scripts/scan-forbidden-runtime.js --package-surface",
|
|
51
|
-
"scan:runtime:package:strict": "node scripts/scan-forbidden-runtime.js --package-surface --fail-on-legacy",
|
|
52
|
-
"scan:legacy-boundary": "node scripts/scan-legacy-boundary.js",
|
|
53
|
-
"scan:package-boundary": "node scripts/scan-package-boundary.js",
|
|
54
|
-
"gate:phase9-static": "node scripts/phase9-static-gate.js",
|
|
55
|
-
"gate:phase10-complete": "node scripts/phase10-completion-gate.js",
|
|
56
|
-
"live:cdp-smoke": "node scripts/live-cdp-smoke.js",
|
|
57
|
-
"live:run-lifecycle": "node scripts/live-run-lifecycle-smoke.js",
|
|
58
|
-
"live:screening": "node scripts/live-screening-smoke.js",
|
|
59
|
-
"live:detail": "node scripts/live-detail-smoke.js",
|
|
60
|
-
"live:infinite-list": "node scripts/live-infinite-list-smoke.js",
|
|
61
|
-
"live:scroll-end": "node scripts/live-scroll-end-screenshot.js",
|
|
62
|
-
"live:refresh-round": "node scripts/live-refresh-round-smoke.js",
|
|
63
|
-
"live:recommend-recovery": "node scripts/live-recommend-recovery-smoke.js",
|
|
64
|
-
"live:self-heal": "node scripts/live-self-heal-smoke.js",
|
|
65
|
-
"live:recommend-actions": "node scripts/live-recommend-actions-smoke.js",
|
|
66
|
-
"live:recommend-phase10-full": "node scripts/live-recommend-phase10-full.js",
|
|
67
|
-
"live:recommend-domain": "node scripts/live-recommend-domain-smoke.js",
|
|
68
|
-
"live:recommend-run-service": "node scripts/live-recommend-run-service-smoke.js",
|
|
69
|
-
"live:recommend-mcp": "node scripts/live-recommend-mcp-smoke.js",
|
|
70
|
-
"live:search-phase10-full": "node scripts/live-search-phase10-full.js",
|
|
71
|
-
"live:recruit-domain": "node scripts/live-recruit-domain-smoke.js",
|
|
72
|
-
"live:recruit-run-service": "node scripts/live-recruit-run-service-smoke.js",
|
|
73
|
-
"live:recruit-mcp": "node scripts/live-recruit-mcp-smoke.js",
|
|
74
|
-
"live:chat-domain": "node scripts/live-chat-domain-smoke.js",
|
|
75
|
-
"live:chat-run-service": "node scripts/live-chat-run-service-smoke.js",
|
|
76
|
-
"live:chat-mcp": "node scripts/live-chat-mcp-smoke.js",
|
|
77
|
-
"live:cv-capture-target": "node scripts/live-cv-capture-target-smoke.js",
|
|
78
|
-
"live:chat-phase10-full": "node scripts/live-chat-phase10-full.js",
|
|
79
|
-
"live:chat-image-screening": "node scripts/live-chat-image-screening-smoke.js"
|
|
80
|
-
},
|
|
81
|
-
"files": [
|
|
82
|
-
"bin",
|
|
83
|
-
"config/screening-config.example.json",
|
|
84
|
-
"skills",
|
|
85
|
-
"scripts/postinstall.cjs",
|
|
86
|
-
"src/core",
|
|
87
|
-
"src/domains",
|
|
88
|
-
"src/chat-mcp.js",
|
|
89
|
-
"src/chat-runtime-config.js",
|
|
90
|
-
"src/cli.js",
|
|
91
|
-
"src/index.js",
|
|
92
|
-
"src/parser.js",
|
|
93
|
-
"src/recommend-mcp.js",
|
|
94
|
-
"src/recruit-mcp.js",
|
|
95
|
-
"src/run-state.js",
|
|
96
|
-
"README.md"
|
|
97
|
-
],
|
|
98
|
-
"dependencies": {
|
|
99
|
-
"chrome-remote-interface": "^0.33.3",
|
|
100
|
-
"sharp": "^0.34.4",
|
|
101
|
-
"ws": "^8.19.0"
|
|
102
|
-
},
|
|
103
|
-
"engines": {
|
|
104
|
-
"node": ">=18"
|
|
105
|
-
},
|
|
106
|
-
"publishConfig": {
|
|
107
|
-
"access": "public"
|
|
108
|
-
},
|
|
109
|
-
"license": "MIT",
|
|
110
|
-
"devDependencies": {},
|
|
111
|
-
"repository": {
|
|
112
|
-
"type": "git",
|
|
113
|
-
"url": "git+https://github.com/reconcrap-cpu/boss-recommend-mcp.git"
|
|
114
|
-
},
|
|
115
|
-
"author": "",
|
|
116
|
-
"bugs": {
|
|
117
|
-
"url": "https://github.com/reconcrap-cpu/boss-recommend-mcp/issues"
|
|
118
|
-
},
|
|
119
|
-
"homepage": "https://github.com/reconcrap-cpu/boss-recommend-mcp#readme"
|
|
120
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@reconcrap/boss-recommend-mcp",
|
|
3
|
+
"version": "2.0.53",
|
|
4
|
+
"description": "Unified MCP pipeline for recommend-page filtering and screening on Boss Zhipin",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"boss",
|
|
7
|
+
"mcp",
|
|
8
|
+
"codex",
|
|
9
|
+
"recruiting",
|
|
10
|
+
"boss-zhipin",
|
|
11
|
+
"recommend"
|
|
12
|
+
],
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "src/index.js",
|
|
15
|
+
"bin": {
|
|
16
|
+
"boss-recommend-mcp": "bin/boss-recommend-mcp.js"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"start": "node src/index.js",
|
|
20
|
+
"cli": "node src/cli.js",
|
|
21
|
+
"install:local": "node src/cli.js install",
|
|
22
|
+
"postinstall": "node scripts/postinstall.cjs",
|
|
23
|
+
"test:parser": "node src/test-parser.js",
|
|
24
|
+
"test:run-state": "node src/test-run-state.js",
|
|
25
|
+
"test:cdp-browser": "node src/test-cdp-browser.js",
|
|
26
|
+
"test:core-capture": "node src/test-core-capture.js",
|
|
27
|
+
"test:core-cv-capture-target": "node src/test-core-cv-capture-target.js",
|
|
28
|
+
"test:core-cv-acquisition": "node src/test-core-cv-acquisition.js",
|
|
29
|
+
"test:core-greet-quota": "node src/test-core-greet-quota.js",
|
|
30
|
+
"test:core-infinite-list": "node src/test-core-infinite-list.js",
|
|
31
|
+
"test:core-reporting": "node src/test-core-reporting.js",
|
|
32
|
+
"test:core-run": "node src/test-core-run.js",
|
|
33
|
+
"test:core-screening": "node src/test-core-screening.js",
|
|
34
|
+
"test:core-self-heal": "node src/test-core-self-heal.js",
|
|
35
|
+
"test:installer-migration": "node src/test-installer-migration.js",
|
|
36
|
+
"test:recommend-actions": "node src/test-recommend-actions.js",
|
|
37
|
+
"test:recommend-domain": "node src/test-recommend-domain.js",
|
|
38
|
+
"test:recommend-run-service": "node src/test-recommend-run-service.js",
|
|
39
|
+
"test:recommend-mcp": "node src/test-recommend-mcp.js",
|
|
40
|
+
"test:recruit-domain": "node src/test-recruit-domain.js",
|
|
41
|
+
"test:recruit-mcp": "node src/test-recruit-mcp.js",
|
|
42
|
+
"test:chat-domain": "node src/test-chat-domain.js",
|
|
43
|
+
"test:chat-run-service": "node src/test-chat-run-service.js",
|
|
44
|
+
"test:chat-mcp": "node src/test-chat-mcp.js",
|
|
45
|
+
"test:async": "node src/test-index-async.js",
|
|
46
|
+
"test:runtime-scan": "node src/test-runtime-scan.js",
|
|
47
|
+
"scan:runtime": "node scripts/scan-forbidden-runtime.js",
|
|
48
|
+
"scan:runtime:json": "node scripts/scan-forbidden-runtime.js --json",
|
|
49
|
+
"scan:runtime:strict": "node scripts/scan-forbidden-runtime.js --fail-on-findings",
|
|
50
|
+
"scan:runtime:package": "node scripts/scan-forbidden-runtime.js --package-surface",
|
|
51
|
+
"scan:runtime:package:strict": "node scripts/scan-forbidden-runtime.js --package-surface --fail-on-legacy",
|
|
52
|
+
"scan:legacy-boundary": "node scripts/scan-legacy-boundary.js",
|
|
53
|
+
"scan:package-boundary": "node scripts/scan-package-boundary.js",
|
|
54
|
+
"gate:phase9-static": "node scripts/phase9-static-gate.js",
|
|
55
|
+
"gate:phase10-complete": "node scripts/phase10-completion-gate.js",
|
|
56
|
+
"live:cdp-smoke": "node scripts/live-cdp-smoke.js",
|
|
57
|
+
"live:run-lifecycle": "node scripts/live-run-lifecycle-smoke.js",
|
|
58
|
+
"live:screening": "node scripts/live-screening-smoke.js",
|
|
59
|
+
"live:detail": "node scripts/live-detail-smoke.js",
|
|
60
|
+
"live:infinite-list": "node scripts/live-infinite-list-smoke.js",
|
|
61
|
+
"live:scroll-end": "node scripts/live-scroll-end-screenshot.js",
|
|
62
|
+
"live:refresh-round": "node scripts/live-refresh-round-smoke.js",
|
|
63
|
+
"live:recommend-recovery": "node scripts/live-recommend-recovery-smoke.js",
|
|
64
|
+
"live:self-heal": "node scripts/live-self-heal-smoke.js",
|
|
65
|
+
"live:recommend-actions": "node scripts/live-recommend-actions-smoke.js",
|
|
66
|
+
"live:recommend-phase10-full": "node scripts/live-recommend-phase10-full.js",
|
|
67
|
+
"live:recommend-domain": "node scripts/live-recommend-domain-smoke.js",
|
|
68
|
+
"live:recommend-run-service": "node scripts/live-recommend-run-service-smoke.js",
|
|
69
|
+
"live:recommend-mcp": "node scripts/live-recommend-mcp-smoke.js",
|
|
70
|
+
"live:search-phase10-full": "node scripts/live-search-phase10-full.js",
|
|
71
|
+
"live:recruit-domain": "node scripts/live-recruit-domain-smoke.js",
|
|
72
|
+
"live:recruit-run-service": "node scripts/live-recruit-run-service-smoke.js",
|
|
73
|
+
"live:recruit-mcp": "node scripts/live-recruit-mcp-smoke.js",
|
|
74
|
+
"live:chat-domain": "node scripts/live-chat-domain-smoke.js",
|
|
75
|
+
"live:chat-run-service": "node scripts/live-chat-run-service-smoke.js",
|
|
76
|
+
"live:chat-mcp": "node scripts/live-chat-mcp-smoke.js",
|
|
77
|
+
"live:cv-capture-target": "node scripts/live-cv-capture-target-smoke.js",
|
|
78
|
+
"live:chat-phase10-full": "node scripts/live-chat-phase10-full.js",
|
|
79
|
+
"live:chat-image-screening": "node scripts/live-chat-image-screening-smoke.js"
|
|
80
|
+
},
|
|
81
|
+
"files": [
|
|
82
|
+
"bin",
|
|
83
|
+
"config/screening-config.example.json",
|
|
84
|
+
"skills",
|
|
85
|
+
"scripts/postinstall.cjs",
|
|
86
|
+
"src/core",
|
|
87
|
+
"src/domains",
|
|
88
|
+
"src/chat-mcp.js",
|
|
89
|
+
"src/chat-runtime-config.js",
|
|
90
|
+
"src/cli.js",
|
|
91
|
+
"src/index.js",
|
|
92
|
+
"src/parser.js",
|
|
93
|
+
"src/recommend-mcp.js",
|
|
94
|
+
"src/recruit-mcp.js",
|
|
95
|
+
"src/run-state.js",
|
|
96
|
+
"README.md"
|
|
97
|
+
],
|
|
98
|
+
"dependencies": {
|
|
99
|
+
"chrome-remote-interface": "^0.33.3",
|
|
100
|
+
"sharp": "^0.34.4",
|
|
101
|
+
"ws": "^8.19.0"
|
|
102
|
+
},
|
|
103
|
+
"engines": {
|
|
104
|
+
"node": ">=18"
|
|
105
|
+
},
|
|
106
|
+
"publishConfig": {
|
|
107
|
+
"access": "public"
|
|
108
|
+
},
|
|
109
|
+
"license": "MIT",
|
|
110
|
+
"devDependencies": {},
|
|
111
|
+
"repository": {
|
|
112
|
+
"type": "git",
|
|
113
|
+
"url": "git+https://github.com/reconcrap-cpu/boss-recommend-mcp.git"
|
|
114
|
+
},
|
|
115
|
+
"author": "",
|
|
116
|
+
"bugs": {
|
|
117
|
+
"url": "https://github.com/reconcrap-cpu/boss-recommend-mcp/issues"
|
|
118
|
+
},
|
|
119
|
+
"homepage": "https://github.com/reconcrap-cpu/boss-recommend-mcp#readme"
|
|
120
|
+
}
|
package/src/cli.js
CHANGED
|
@@ -88,6 +88,10 @@ function getPackageVersion() {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
const packageVersion = getPackageVersion();
|
|
91
|
+
const detachedRecommendMcpEnv = {
|
|
92
|
+
BOSS_RECOMMEND_CDP_DETACHED: "1",
|
|
93
|
+
BOSS_RECOMMEND_RUN_HEARTBEAT_MS: "10000"
|
|
94
|
+
};
|
|
91
95
|
|
|
92
96
|
function isInstalledPackageRoot(rootPath = packageRoot) {
|
|
93
97
|
const normalized = path.resolve(String(rootPath || ""))
|
|
@@ -726,6 +730,25 @@ function parseMcpClientTargets(rawValue) {
|
|
|
726
730
|
return unique;
|
|
727
731
|
}
|
|
728
732
|
|
|
733
|
+
function isPlainObject(value) {
|
|
734
|
+
return value && typeof value === "object" && !Array.isArray(value);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
function shouldDefaultRecommendDetachedMcpEnv(options = {}) {
|
|
738
|
+
const client = normalizeMcpClientName(options.client);
|
|
739
|
+
const agent = normalizeAgentName(options.agent);
|
|
740
|
+
return client === "openclaw"
|
|
741
|
+
|| client === "qclaw"
|
|
742
|
+
|| agent === "openclaw"
|
|
743
|
+
|| agent === "qclaw";
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
function getDefaultMcpEnv(options = {}) {
|
|
747
|
+
return shouldDefaultRecommendDetachedMcpEnv(options)
|
|
748
|
+
? { ...detachedRecommendMcpEnv }
|
|
749
|
+
: {};
|
|
750
|
+
}
|
|
751
|
+
|
|
729
752
|
function getAgentConfigOutputDir(options = {}) {
|
|
730
753
|
if (typeof options["output-dir"] === "string" && options["output-dir"].trim()) {
|
|
731
754
|
return path.resolve(options["output-dir"]);
|
|
@@ -745,12 +768,29 @@ function buildMcpLaunchConfig(options = {}) {
|
|
|
745
768
|
? ["start"]
|
|
746
769
|
: buildDefaultMcpArgs(options);
|
|
747
770
|
const launchConfig = { command, args: launchArgs };
|
|
748
|
-
|
|
749
|
-
|
|
771
|
+
const mergedEnv = {
|
|
772
|
+
...getDefaultMcpEnv(options),
|
|
773
|
+
...(isPlainObject(env) ? env : {})
|
|
774
|
+
};
|
|
775
|
+
if (Object.keys(mergedEnv).length > 0) {
|
|
776
|
+
launchConfig.env = mergedEnv;
|
|
750
777
|
}
|
|
751
778
|
return launchConfig;
|
|
752
779
|
}
|
|
753
780
|
|
|
781
|
+
function mergeExistingMcpEntryEnv(existingEntry, launchConfig) {
|
|
782
|
+
if (!isPlainObject(existingEntry?.env) || !isPlainObject(launchConfig)) {
|
|
783
|
+
return launchConfig;
|
|
784
|
+
}
|
|
785
|
+
return {
|
|
786
|
+
...launchConfig,
|
|
787
|
+
env: {
|
|
788
|
+
...existingEntry.env,
|
|
789
|
+
...(isPlainObject(launchConfig.env) ? launchConfig.env : {})
|
|
790
|
+
}
|
|
791
|
+
};
|
|
792
|
+
}
|
|
793
|
+
|
|
754
794
|
function buildMcpConfigFileContent(options = {}) {
|
|
755
795
|
const serverName = typeof options["server-name"] === "string" && options["server-name"].trim()
|
|
756
796
|
? options["server-name"].trim()
|
|
@@ -872,7 +912,7 @@ function getKnownExternalMcpConfigPathsByAgent() {
|
|
|
872
912
|
trae: [...traeConfigPaths, path.join(home, ".trae", "mcp.json"), path.join(home, ".trae-cn", "mcp.json")],
|
|
873
913
|
"trae-cn": [...traeConfigPaths, path.join(home, ".trae-cn", "mcp.json"), path.join(home, ".trae", "mcp.json")],
|
|
874
914
|
claude: [path.join(home, ".claude", "mcp.json")],
|
|
875
|
-
openclaw: [path.join(home, ".openclaw", "mcp.json"), ...openClawConfigPaths],
|
|
915
|
+
openclaw: [path.join(home, ".openclaw", "mcp.json"), path.join(home, ".openclaw", "openclaw.json"), ...openClawConfigPaths],
|
|
876
916
|
qclaw: [path.join(home, ".qclaw", "openclaw.json")]
|
|
877
917
|
};
|
|
878
918
|
}
|
|
@@ -920,9 +960,12 @@ function mergeMcpServerConfigFile(filePath, options = {}) {
|
|
|
920
960
|
const nextConfig = buildMcpConfigFileContent({ ...options, client: useQClawShape ? "qclaw" : options.client });
|
|
921
961
|
const nextServers = useQClawShape ? nextConfig.mcp?.servers : nextConfig.mcpServers;
|
|
922
962
|
const serverName = Object.keys(nextServers || {})[0] || defaultMcpServerName;
|
|
923
|
-
const launchConfig = nextServers?.[serverName] || buildMcpLaunchConfig(options);
|
|
924
963
|
const existingServers = getMcpServersFromConfig(current, useQClawShape);
|
|
925
964
|
const existingEntry = existingServers[serverName];
|
|
965
|
+
const launchConfig = mergeExistingMcpEntryEnv(
|
|
966
|
+
existingEntry,
|
|
967
|
+
nextServers?.[serverName] || buildMcpLaunchConfig(options)
|
|
968
|
+
);
|
|
926
969
|
const retainedServers = {};
|
|
927
970
|
const migratedLegacyServers = [];
|
|
928
971
|
for (const [name, config] of Object.entries(existingServers)) {
|