@darkiceinteractive/mcp-conductor 3.0.0-beta.2 → 3.1.1
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 +168 -286
- package/dist/bin/cli.d.ts +2 -2
- package/dist/bin/cli.js +37 -14
- package/dist/bin/cli.js.map +1 -1
- package/dist/bridge/http-server.d.ts.map +1 -1
- package/dist/bridge/http-server.js +11 -5
- package/dist/bridge/http-server.js.map +1 -1
- package/dist/cache/disk.d.ts.map +1 -1
- package/dist/cache/disk.js +36 -3
- package/dist/cache/disk.js.map +1 -1
- package/dist/cli/clients/adapter.d.ts +103 -0
- package/dist/cli/clients/adapter.d.ts.map +1 -0
- package/dist/cli/clients/adapter.js +24 -0
- package/dist/cli/clients/adapter.js.map +1 -0
- package/dist/cli/clients/claude-code.d.ts +15 -0
- package/dist/cli/clients/claude-code.d.ts.map +1 -0
- package/dist/cli/clients/claude-code.js +110 -0
- package/dist/cli/clients/claude-code.js.map +1 -0
- package/dist/cli/clients/claude-desktop.d.ts +26 -0
- package/dist/cli/clients/claude-desktop.d.ts.map +1 -0
- package/dist/cli/clients/claude-desktop.js +118 -0
- package/dist/cli/clients/claude-desktop.js.map +1 -0
- package/dist/cli/clients/cline.d.ts +40 -0
- package/dist/cli/clients/cline.d.ts.map +1 -0
- package/dist/cli/clients/cline.js +134 -0
- package/dist/cli/clients/cline.js.map +1 -0
- package/dist/cli/clients/codex.d.ts +30 -0
- package/dist/cli/clients/codex.d.ts.map +1 -0
- package/dist/cli/clients/codex.js +176 -0
- package/dist/cli/clients/codex.js.map +1 -0
- package/dist/cli/clients/continue.d.ts +41 -0
- package/dist/cli/clients/continue.d.ts.map +1 -0
- package/dist/cli/clients/continue.js +150 -0
- package/dist/cli/clients/continue.js.map +1 -0
- package/dist/cli/clients/cursor.d.ts +20 -0
- package/dist/cli/clients/cursor.d.ts.map +1 -0
- package/dist/cli/clients/cursor.js +110 -0
- package/dist/cli/clients/cursor.js.map +1 -0
- package/dist/cli/clients/gemini-cli.d.ts +42 -0
- package/dist/cli/clients/gemini-cli.d.ts.map +1 -0
- package/dist/cli/clients/gemini-cli.js +169 -0
- package/dist/cli/clients/gemini-cli.js.map +1 -0
- package/dist/cli/clients/index.d.ts +28 -0
- package/dist/cli/clients/index.d.ts.map +1 -0
- package/dist/cli/clients/index.js +44 -0
- package/dist/cli/clients/index.js.map +1 -0
- package/dist/cli/clients/kimi-code.d.ts +33 -0
- package/dist/cli/clients/kimi-code.d.ts.map +1 -0
- package/dist/cli/clients/kimi-code.js +177 -0
- package/dist/cli/clients/kimi-code.js.map +1 -0
- package/dist/cli/clients/opencode.d.ts +21 -0
- package/dist/cli/clients/opencode.d.ts.map +1 -0
- package/dist/cli/clients/opencode.js +150 -0
- package/dist/cli/clients/opencode.js.map +1 -0
- package/dist/cli/clients/registry.d.ts +51 -0
- package/dist/cli/clients/registry.d.ts.map +1 -0
- package/dist/cli/clients/registry.js +169 -0
- package/dist/cli/clients/registry.js.map +1 -0
- package/dist/cli/clients/zed.d.ts +41 -0
- package/dist/cli/clients/zed.d.ts.map +1 -0
- package/dist/cli/clients/zed.js +171 -0
- package/dist/cli/clients/zed.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +27 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +71 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/export-servers.d.ts +60 -0
- package/dist/cli/commands/export-servers.d.ts.map +1 -1
- package/dist/cli/commands/export-servers.js +85 -1
- package/dist/cli/commands/export-servers.js.map +1 -1
- package/dist/cli/commands/import-servers.d.ts +13 -2
- package/dist/cli/commands/import-servers.d.ts.map +1 -1
- package/dist/cli/commands/import-servers.js +42 -5
- package/dist/cli/commands/import-servers.js.map +1 -1
- package/dist/cli/wizard/setup.d.ts +29 -3
- package/dist/cli/wizard/setup.d.ts.map +1 -1
- package/dist/cli/wizard/setup.js +204 -7
- package/dist/cli/wizard/setup.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +1 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/loader.d.ts +10 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +14 -24
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +7 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +14 -6
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/server.d.ts +9 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +80 -9
- package/dist/daemon/server.js.map +1 -1
- package/dist/metrics/index.d.ts +1 -1
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +1 -1
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/metrics-collector.d.ts +120 -0
- package/dist/metrics/metrics-collector.d.ts.map +1 -1
- package/dist/metrics/metrics-collector.js +136 -0
- package/dist/metrics/metrics-collector.js.map +1 -1
- package/dist/runtime/pool/recycle.d.ts +8 -2
- package/dist/runtime/pool/recycle.d.ts.map +1 -1
- package/dist/runtime/pool/recycle.js.map +1 -1
- package/dist/runtime/pool/worker-pool.d.ts.map +1 -1
- package/dist/runtime/pool/worker-pool.js +17 -10
- package/dist/runtime/pool/worker-pool.js.map +1 -1
- package/dist/runtime/pool/worker.d.ts +7 -1
- package/dist/runtime/pool/worker.d.ts.map +1 -1
- package/dist/runtime/pool/worker.js +9 -1
- package/dist/runtime/pool/worker.js.map +1 -1
- package/dist/server/mcp-server.d.ts +15 -3
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +81 -7
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/utils/backup.d.ts +24 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +40 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/tokenize.d.ts +8 -0
- package/dist/utils/tokenize.d.ts.map +1 -1
- package/dist/utils/tokenize.js +8 -0
- package/dist/utils/tokenize.js.map +1 -1
- package/dist/version.d.ts +3 -3
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +3 -3
- package/dist/version.js.map +1 -1
- package/package.json +23 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/clients/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP client adapter for Zed editor.
|
|
3
|
+
*
|
|
4
|
+
* Zed stores context server (MCP) configuration under the `context_servers`
|
|
5
|
+
* key inside its main settings file. Each entry uses a source-typed shape:
|
|
6
|
+
*
|
|
7
|
+
* "context_servers": {
|
|
8
|
+
* "my-server": {
|
|
9
|
+
* "source": "custom", // only this source is user-controllable
|
|
10
|
+
* "command": "node",
|
|
11
|
+
* "args": ["server.js"],
|
|
12
|
+
* "env": {}
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* Entries whose `source` is not `"custom"` (e.g. `"extension"`) are managed
|
|
17
|
+
* by Zed itself and are skipped on parse (with a warning) and never written
|
|
18
|
+
* back on serialise.
|
|
19
|
+
*
|
|
20
|
+
* Config file locations (resolved by the registry):
|
|
21
|
+
* macOS : ~/Library/Application Support/Zed/settings.json
|
|
22
|
+
* Linux : ~/.config/zed/settings.json
|
|
23
|
+
* Windows: %LOCALAPPDATA%\Zed\settings.json
|
|
24
|
+
*
|
|
25
|
+
* Format note: Zed's settings.json is standard JSON. If the file cannot be
|
|
26
|
+
* parsed (e.g. it contains comments / JSON5 syntax), `parse()` returns `null`
|
|
27
|
+
* and logs the error so the caller can skip gracefully rather than crashing.
|
|
28
|
+
*
|
|
29
|
+
* @module cli/clients/zed
|
|
30
|
+
*/
|
|
31
|
+
import type { MCPClientAdapter } from './adapter.js';
|
|
32
|
+
/**
|
|
33
|
+
* The singleton Zed MCP client adapter.
|
|
34
|
+
*
|
|
35
|
+
* Registered in `src/cli/clients/index.ts`:
|
|
36
|
+
*
|
|
37
|
+
* import { ZED_ADAPTER } from './zed.js';
|
|
38
|
+
* ADAPTERS.set('zed', ZED_ADAPTER);
|
|
39
|
+
*/
|
|
40
|
+
export declare const ZED_ADAPTER: MCPClientAdapter;
|
|
41
|
+
//# sourceMappingURL=zed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zed.d.ts","sourceRoot":"","sources":["../../../src/cli/clients/zed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAA4C,MAAM,cAAc,CAAC;AAsK/F;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,gBAAmC,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP client adapter for Zed editor.
|
|
3
|
+
*
|
|
4
|
+
* Zed stores context server (MCP) configuration under the `context_servers`
|
|
5
|
+
* key inside its main settings file. Each entry uses a source-typed shape:
|
|
6
|
+
*
|
|
7
|
+
* "context_servers": {
|
|
8
|
+
* "my-server": {
|
|
9
|
+
* "source": "custom", // only this source is user-controllable
|
|
10
|
+
* "command": "node",
|
|
11
|
+
* "args": ["server.js"],
|
|
12
|
+
* "env": {}
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* Entries whose `source` is not `"custom"` (e.g. `"extension"`) are managed
|
|
17
|
+
* by Zed itself and are skipped on parse (with a warning) and never written
|
|
18
|
+
* back on serialise.
|
|
19
|
+
*
|
|
20
|
+
* Config file locations (resolved by the registry):
|
|
21
|
+
* macOS : ~/Library/Application Support/Zed/settings.json
|
|
22
|
+
* Linux : ~/.config/zed/settings.json
|
|
23
|
+
* Windows: %LOCALAPPDATA%\Zed\settings.json
|
|
24
|
+
*
|
|
25
|
+
* Format note: Zed's settings.json is standard JSON. If the file cannot be
|
|
26
|
+
* parsed (e.g. it contains comments / JSON5 syntax), `parse()` returns `null`
|
|
27
|
+
* and logs the error so the caller can skip gracefully rather than crashing.
|
|
28
|
+
*
|
|
29
|
+
* @module cli/clients/zed
|
|
30
|
+
*/
|
|
31
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
32
|
+
import { dirname } from 'node:path';
|
|
33
|
+
import { logger } from '../../utils/logger.js';
|
|
34
|
+
import { backupFile } from '../../utils/backup.js';
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Adapter implementation
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
const ZED_ADAPTER_IMPL = {
|
|
39
|
+
client: 'zed',
|
|
40
|
+
parse(path) {
|
|
41
|
+
let raw;
|
|
42
|
+
// --- Read & parse ---
|
|
43
|
+
try {
|
|
44
|
+
const text = readFileSync(path, 'utf8');
|
|
45
|
+
raw = JSON.parse(text);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err.code === 'ENOENT') {
|
|
49
|
+
// File does not exist — caller will skip gracefully.
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// File exists but is not parseable (JSON5 / comments / corruption).
|
|
53
|
+
logger.warn('zed adapter: failed to parse config file', {
|
|
54
|
+
path,
|
|
55
|
+
error: String(err),
|
|
56
|
+
hint: 'Zed settings.json must be valid JSON. If it contains comments or JSON5 syntax, remove them and retry.',
|
|
57
|
+
});
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
61
|
+
logger.warn('zed adapter: config root is not a JSON object', { path });
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const root = raw;
|
|
65
|
+
const contextServers = root['context_servers'];
|
|
66
|
+
// --- No MCP section — return empty servers map so callers can still write ---
|
|
67
|
+
if (contextServers === undefined) {
|
|
68
|
+
return { servers: {}, raw };
|
|
69
|
+
}
|
|
70
|
+
if (typeof contextServers !== 'object' ||
|
|
71
|
+
contextServers === null ||
|
|
72
|
+
Array.isArray(contextServers)) {
|
|
73
|
+
logger.warn('zed adapter: context_servers is not an object', { path });
|
|
74
|
+
return { servers: {}, raw };
|
|
75
|
+
}
|
|
76
|
+
const csMap = contextServers;
|
|
77
|
+
const servers = {};
|
|
78
|
+
for (const [name, entry] of Object.entries(csMap)) {
|
|
79
|
+
if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {
|
|
80
|
+
logger.warn('zed adapter: skipping malformed context_servers entry', { name, path });
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const e = entry;
|
|
84
|
+
// Skip non-custom sources (e.g. "extension" — Zed-managed, not editable by users).
|
|
85
|
+
if (e['source'] !== 'custom') {
|
|
86
|
+
logger.warn('zed adapter: skipping non-custom source entry', {
|
|
87
|
+
name,
|
|
88
|
+
source: e['source'] ?? '(missing)',
|
|
89
|
+
path,
|
|
90
|
+
});
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (typeof e['command'] !== 'string' || e['command'].length === 0) {
|
|
94
|
+
logger.warn('zed adapter: skipping entry with missing or empty command', { name, path });
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
servers[name] = {
|
|
98
|
+
command: e['command'],
|
|
99
|
+
...(Array.isArray(e['args']) && e['args'].length > 0
|
|
100
|
+
? { args: e['args'] }
|
|
101
|
+
: {}),
|
|
102
|
+
...(e['env'] != null && typeof e['env'] === 'object'
|
|
103
|
+
? { env: e['env'] }
|
|
104
|
+
: {}),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return { servers, raw };
|
|
108
|
+
},
|
|
109
|
+
serialize(path, config, options) {
|
|
110
|
+
const { conductorEntry, keepOnlyConductor } = options;
|
|
111
|
+
// --- Backup before any mutation ---
|
|
112
|
+
backupFile(path);
|
|
113
|
+
// --- Build the conductor entry in Zed's native shape ---
|
|
114
|
+
const conductorShape = {
|
|
115
|
+
source: 'custom',
|
|
116
|
+
command: conductorEntry.command,
|
|
117
|
+
...(conductorEntry.args && conductorEntry.args.length > 0
|
|
118
|
+
? { args: conductorEntry.args }
|
|
119
|
+
: {}),
|
|
120
|
+
...(conductorEntry.env && Object.keys(conductorEntry.env).length > 0
|
|
121
|
+
? { env: conductorEntry.env }
|
|
122
|
+
: {}),
|
|
123
|
+
};
|
|
124
|
+
// --- Build the context_servers map to write ---
|
|
125
|
+
let contextServers;
|
|
126
|
+
if (keepOnlyConductor) {
|
|
127
|
+
// Migration mode: drop everything except the conductor entry.
|
|
128
|
+
contextServers = { 'mcp-conductor': conductorShape };
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Round-trip mode: re-serialise all normalised servers with source injected.
|
|
132
|
+
contextServers = {};
|
|
133
|
+
for (const [name, entry] of Object.entries(config.servers)) {
|
|
134
|
+
contextServers[name] = {
|
|
135
|
+
source: 'custom',
|
|
136
|
+
command: entry.command,
|
|
137
|
+
...(entry.args && entry.args.length > 0 ? { args: entry.args } : {}),
|
|
138
|
+
...(entry.env && Object.keys(entry.env).length > 0 ? { env: entry.env } : {}),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Upsert the conductor entry (create or overwrite).
|
|
142
|
+
contextServers['mcp-conductor'] = conductorShape;
|
|
143
|
+
}
|
|
144
|
+
// --- Merge into the raw document, preserving all other top-level keys ---
|
|
145
|
+
// (theme, font_size, vim_mode, language_settings, etc.)
|
|
146
|
+
const rawRoot = typeof config.raw === 'object' && config.raw !== null && !Array.isArray(config.raw)
|
|
147
|
+
? { ...config.raw }
|
|
148
|
+
: {};
|
|
149
|
+
const output = {
|
|
150
|
+
...rawRoot,
|
|
151
|
+
context_servers: contextServers,
|
|
152
|
+
};
|
|
153
|
+
// --- Ensure parent directory exists and write ---
|
|
154
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
155
|
+
writeFileSync(path, JSON.stringify(output, null, 2) + '\n', 'utf8');
|
|
156
|
+
logger.debug('zed adapter: wrote config', {
|
|
157
|
+
path,
|
|
158
|
+
serverCount: Object.keys(contextServers).length,
|
|
159
|
+
});
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* The singleton Zed MCP client adapter.
|
|
164
|
+
*
|
|
165
|
+
* Registered in `src/cli/clients/index.ts`:
|
|
166
|
+
*
|
|
167
|
+
* import { ZED_ADAPTER } from './zed.js';
|
|
168
|
+
* ADAPTERS.set('zed', ZED_ADAPTER);
|
|
169
|
+
*/
|
|
170
|
+
export const ZED_ADAPTER = ZED_ADAPTER_IMPL;
|
|
171
|
+
//# sourceMappingURL=zed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zed.js","sourceRoot":"","sources":["../../../src/cli/clients/zed.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* doctor command: actionable health report across all configured servers.
|
|
3
|
+
*
|
|
4
|
+
* MC5: extends with a "client coverage" section that reports whether each
|
|
5
|
+
* detected MCP client config has the mcp-conductor entry installed.
|
|
6
|
+
*
|
|
3
7
|
* @module cli/commands/doctor
|
|
4
8
|
*/
|
|
9
|
+
import type { MCPClientId } from '../clients/index.js';
|
|
10
|
+
export interface ClientCoverageEntry {
|
|
11
|
+
/** Stable client identifier. */
|
|
12
|
+
clientId: MCPClientId;
|
|
13
|
+
/** Human-readable display name. */
|
|
14
|
+
displayName: string;
|
|
15
|
+
/** Absolute path to the config file that was inspected. */
|
|
16
|
+
configPath: string;
|
|
17
|
+
/** Whether this client config has an mcp-conductor server entry. */
|
|
18
|
+
hasConductor: boolean;
|
|
19
|
+
/** Scope: global or project-local. */
|
|
20
|
+
scope: 'global' | 'project';
|
|
21
|
+
}
|
|
22
|
+
export interface ClientCoverageResult {
|
|
23
|
+
/** All entries where the config file exists on disk (exists === true). */
|
|
24
|
+
entries: ClientCoverageEntry[];
|
|
25
|
+
/** How many of those entries already have the conductor entry. */
|
|
26
|
+
coveredCount: number;
|
|
27
|
+
/** How many are missing the conductor entry. */
|
|
28
|
+
missingCount: number;
|
|
29
|
+
}
|
|
5
30
|
export interface ServerHealthEntry {
|
|
6
31
|
name: string;
|
|
7
32
|
command: string;
|
|
@@ -20,6 +45,8 @@ export interface DoctorResult {
|
|
|
20
45
|
errorCount: number;
|
|
21
46
|
servers: ServerHealthEntry[];
|
|
22
47
|
globalIssues: string[];
|
|
48
|
+
/** MC5: per-client coverage section (always present; entries may be empty). */
|
|
49
|
+
clientCoverage: ClientCoverageResult;
|
|
23
50
|
}
|
|
24
51
|
/**
|
|
25
52
|
* Run a health check on all configured MCP servers.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,QAAQ,EAAE,WAAW,CAAC;IACtB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,YAAY,EAAE,OAAO,CAAC;IACtB,sCAAsC;IACtC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+EAA+E;IAC/E,cAAc,EAAE,oBAAoB,CAAC;CACtC;AAmED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,YAAY,CA+FxC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAkDhE"}
|
|
@@ -1,9 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* doctor command: actionable health report across all configured servers.
|
|
3
|
+
*
|
|
4
|
+
* MC5: extends with a "client coverage" section that reports whether each
|
|
5
|
+
* detected MCP client config has the mcp-conductor entry installed.
|
|
6
|
+
*
|
|
3
7
|
* @module cli/commands/doctor
|
|
4
8
|
*/
|
|
5
9
|
import { existsSync } from 'node:fs';
|
|
6
10
|
import { getDefaultConductorConfigPath, loadConductorConfig } from '../../config/index.js';
|
|
11
|
+
import { getMCPClientConfigPaths, ADAPTERS } from '../clients/index.js';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// MC5: Client coverage check
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Scan all global MCP client config locations that exist on disk and report
|
|
17
|
+
* whether each has the `mcp-conductor` server entry installed.
|
|
18
|
+
*
|
|
19
|
+
* A location is considered "covered" when the adapter's parse() returns a
|
|
20
|
+
* NormalisedClientConfig whose `servers` map contains the key `"mcp-conductor"`.
|
|
21
|
+
*
|
|
22
|
+
* Locations without a registered adapter are skipped silently (forward compat).
|
|
23
|
+
*/
|
|
24
|
+
function runClientCoverage() {
|
|
25
|
+
const locations = getMCPClientConfigPaths({ includeProject: false });
|
|
26
|
+
const entries = [];
|
|
27
|
+
for (const loc of locations) {
|
|
28
|
+
if (!loc.exists)
|
|
29
|
+
continue;
|
|
30
|
+
const adapter = ADAPTERS.get(loc.client);
|
|
31
|
+
if (!adapter)
|
|
32
|
+
continue; // no adapter yet — skip rather than crash
|
|
33
|
+
let hasConductor = false;
|
|
34
|
+
try {
|
|
35
|
+
const parsed = adapter.parse(loc.path);
|
|
36
|
+
hasConductor = parsed !== null && 'mcp-conductor' in parsed.servers;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// If parse throws unexpectedly, treat as "no conductor entry".
|
|
40
|
+
hasConductor = false;
|
|
41
|
+
}
|
|
42
|
+
entries.push({
|
|
43
|
+
clientId: loc.client,
|
|
44
|
+
displayName: loc.displayName,
|
|
45
|
+
configPath: loc.path,
|
|
46
|
+
hasConductor,
|
|
47
|
+
scope: loc.scope,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const coveredCount = entries.filter((e) => e.hasConductor).length;
|
|
51
|
+
const missingCount = entries.length - coveredCount;
|
|
52
|
+
return { entries, coveredCount, missingCount };
|
|
53
|
+
}
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Server command availability check
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
7
57
|
/**
|
|
8
58
|
* Check if a command is available on PATH or as an absolute path.
|
|
9
59
|
*/
|
|
@@ -26,6 +76,8 @@ export function runDoctor() {
|
|
|
26
76
|
const conductorConfigPath = getDefaultConductorConfigPath();
|
|
27
77
|
const conductorConfigFound = existsSync(conductorConfigPath);
|
|
28
78
|
const globalIssues = [];
|
|
79
|
+
// MC5: run client coverage regardless of conductor config state.
|
|
80
|
+
const clientCoverage = runClientCoverage();
|
|
29
81
|
if (!conductorConfigFound) {
|
|
30
82
|
return {
|
|
31
83
|
conductorConfigFound: false,
|
|
@@ -39,6 +91,7 @@ export function runDoctor() {
|
|
|
39
91
|
`Conductor config not found at ${conductorConfigPath}`,
|
|
40
92
|
'Run `mcp-conductor-cli setup` or `mcp-conductor-cli import` to create it.',
|
|
41
93
|
],
|
|
94
|
+
clientCoverage,
|
|
42
95
|
};
|
|
43
96
|
}
|
|
44
97
|
const config = loadConductorConfig();
|
|
@@ -52,6 +105,7 @@ export function runDoctor() {
|
|
|
52
105
|
errorCount: 0,
|
|
53
106
|
servers: [],
|
|
54
107
|
globalIssues: ['Conductor config found but could not be parsed — check JSON syntax.'],
|
|
108
|
+
clientCoverage,
|
|
55
109
|
};
|
|
56
110
|
}
|
|
57
111
|
const servers = [];
|
|
@@ -98,6 +152,7 @@ export function runDoctor() {
|
|
|
98
152
|
errorCount,
|
|
99
153
|
servers,
|
|
100
154
|
globalIssues,
|
|
155
|
+
clientCoverage,
|
|
101
156
|
};
|
|
102
157
|
}
|
|
103
158
|
/**
|
|
@@ -130,6 +185,22 @@ export function formatDoctorResults(result) {
|
|
|
130
185
|
lines.push(` ! ${issue}`);
|
|
131
186
|
}
|
|
132
187
|
}
|
|
188
|
+
// MC5: client coverage section
|
|
189
|
+
const { entries, coveredCount, missingCount } = result.clientCoverage;
|
|
190
|
+
if (entries.length > 0) {
|
|
191
|
+
lines.push(`\nMCP CLIENT COVERAGE: ${coveredCount}/${entries.length} clients have mcp-conductor installed\n`);
|
|
192
|
+
for (const entry of entries) {
|
|
193
|
+
const icon = entry.hasConductor ? '[OK]' : '[MISSING]';
|
|
194
|
+
lines.push(` ${icon} ${entry.displayName} (${entry.configPath})`);
|
|
195
|
+
if (!entry.hasConductor) {
|
|
196
|
+
lines.push(` Run \`mcp-conductor-cli setup\` to install the conductor entry.`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (missingCount > 0) {
|
|
200
|
+
lines.push(`\n ${missingCount} client(s) are missing the mcp-conductor entry.`);
|
|
201
|
+
lines.push(` Run \`mcp-conductor-cli setup\` to update them.`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
133
204
|
return lines.join('\n');
|
|
134
205
|
}
|
|
135
206
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAoDxE,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,uBAAuB,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,SAAS;QAE1B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,SAAS,CAAC,0CAA0C;QAElE,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,YAAY,GAAG,MAAM,KAAK,IAAI,IAAI,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,GAAG,CAAC,MAAM;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,UAAU,EAAE,GAAG,CAAC,IAAI;YACpB,YAAY;YACZ,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC;IAEnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACjD,CAAC;AAED,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACzC,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,mEAAmE;IACnE,+EAA+E;IAC/E,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,0EAA0E;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,mBAAmB,GAAG,6BAA6B,EAAE,CAAC;IAC5D,MAAM,oBAAoB,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,iEAAiE;IACjE,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO;YACL,oBAAoB,EAAE,KAAK;YAC3B,mBAAmB;YACnB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,EAAE;YACX,YAAY,EAAE;gBACZ,iCAAiC,mBAAmB,EAAE;gBACtD,2EAA2E;aAC5E;YACD,cAAc;SACf,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,oBAAoB,EAAE,IAAI;YAC1B,mBAAmB;YACnB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,CAAC,qEAAqE,CAAC;YACrF,cAAc;SACf,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,WAAW,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,OAAO,uCAAuC,CAAC,CAAC;QACnF,CAAC;QAED,6CAA6C;QAC7C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;gBACzD,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,2BAA2B,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAE1F,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;YAC1B,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;YACpB,YAAY,EAAE,QAAQ;YACtB,MAAM;YACN,MAAM;YACN,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IACrE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAEtE,OAAO;QACL,oBAAoB,EAAE,IAAI;QAC1B,mBAAmB;QACnB,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,YAAY;QACZ,SAAS;QACT,UAAU;QACV,OAAO;QACP,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,WAAW,YAAY,MAAM,CAAC,YAAY,QAAQ,MAAM,CAAC,SAAS,UAAU,MAAM,CAAC,UAAU,UAAU,CAAC,CAAC;IAEvI,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC;IACtE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,0BAA0B,YAAY,IAAI,OAAO,CAAC,MAAM,yCAAyC,CAAC,CAAC;QAC9G,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,MAAM,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QACD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,OAAO,YAAY,iDAAiD,CAAC,CAAC;YACjF,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* export-servers command: generate mcpServers JSON pointing at mcp-conductor stdio.
|
|
3
|
+
*
|
|
4
|
+
* MC4: exportForClient() uses the per-client adapter to write the correct
|
|
5
|
+
* format/key/shape for any of the 10 known clients. The legacy exportToClaude()
|
|
6
|
+
* is preserved for backwards compatibility and defaults to claude-desktop.
|
|
7
|
+
*
|
|
3
8
|
* @module cli/commands/export-servers
|
|
4
9
|
*/
|
|
10
|
+
import type { MCPClientId } from '../clients/index.js';
|
|
11
|
+
export type { MCPClientId };
|
|
5
12
|
export interface ExportOptions {
|
|
6
13
|
/** Output format: 'claude-desktop' | 'claude-code' | 'raw' */
|
|
7
14
|
format?: 'claude-desktop' | 'claude-code' | 'raw';
|
|
@@ -13,10 +20,63 @@ export interface ExportResult {
|
|
|
13
20
|
format: string;
|
|
14
21
|
serverCount: number;
|
|
15
22
|
}
|
|
23
|
+
export interface ExportForClientOptions {
|
|
24
|
+
/**
|
|
25
|
+
* One of the 10 known MCPClientId values. Defaults to 'claude-desktop'.
|
|
26
|
+
*/
|
|
27
|
+
clientId?: MCPClientId;
|
|
28
|
+
/**
|
|
29
|
+
* Directory to write the exported config file into.
|
|
30
|
+
* Defaults to `process.cwd()`.
|
|
31
|
+
*/
|
|
32
|
+
outputDir?: string;
|
|
33
|
+
/**
|
|
34
|
+
* When provided, the exported file is written to this exact path instead of
|
|
35
|
+
* the auto-derived `<outputDir>/<client>-config.<ext>`.
|
|
36
|
+
*/
|
|
37
|
+
outputPath?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ExportForClientResult {
|
|
40
|
+
/** The path the file was written to. */
|
|
41
|
+
outputPath: string;
|
|
42
|
+
/** The clientId that was exported for. */
|
|
43
|
+
clientId: MCPClientId;
|
|
44
|
+
/** Number of servers referenced in conductor config (informational). */
|
|
45
|
+
serverCount: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Derive the output filename for a given client.
|
|
49
|
+
*
|
|
50
|
+
* Extension mapping (mirrors adapter format declarations in registry.ts):
|
|
51
|
+
* - codex → .toml
|
|
52
|
+
* - continue → .yaml
|
|
53
|
+
* - all others (JSON) → .json
|
|
54
|
+
*/
|
|
55
|
+
export declare function deriveExportFilename(clientId: MCPClientId): string;
|
|
56
|
+
/**
|
|
57
|
+
* Export the conductor entry in the native config format for the specified
|
|
58
|
+
* client. Writes to `<outputDir>/<clientId>-config.<ext>` by default, or to
|
|
59
|
+
* `outputPath` when explicitly provided.
|
|
60
|
+
*
|
|
61
|
+
* The user can then drop the resulting file into the appropriate location for
|
|
62
|
+
* their client. Only the `mcp-conductor` entry is written (`keepOnlyConductor: true`).
|
|
63
|
+
*
|
|
64
|
+
* Backwards compat: omitting `clientId` defaults to `claude-desktop`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function exportForClient(options?: ExportForClientOptions): ExportForClientResult;
|
|
67
|
+
/**
|
|
68
|
+
* Return all client IDs that have a registered adapter (in insertion order).
|
|
69
|
+
* Used by the CLI to show valid `--client` choices.
|
|
70
|
+
*/
|
|
71
|
+
export declare function listExportableClients(): MCPClientId[];
|
|
16
72
|
/**
|
|
17
73
|
* Generate a mcpServers block that points Claude back at mcp-conductor stdio.
|
|
18
74
|
* This is the rollback path: if someone wants to undo the import, they paste
|
|
19
75
|
* this JSON back into their Claude config.
|
|
76
|
+
*
|
|
77
|
+
* @deprecated Prefer `exportForClient({ clientId: 'claude-desktop' })` for new code.
|
|
78
|
+
* This function is kept for backwards compatibility; all existing callers
|
|
79
|
+
* (`bin/cli.ts`, `mcp-server.ts`, `lifecycle-tools.test.ts`) continue to work.
|
|
20
80
|
*/
|
|
21
81
|
export declare function exportToClaude(options?: ExportOptions): ExportResult;
|
|
22
82
|
//# sourceMappingURL=export-servers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-servers.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export-servers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"export-servers.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export-servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAiD,MAAM,qBAAqB,CAAC;AAGtG,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,gBAAgB,GAAG,aAAa,GAAG,KAAK,CAAC;IAClD,mFAAmF;IACnF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,WAAW,CAAC;IACtB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;CACrB;AAUD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAIlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,qBAAqB,CAsC3F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAErD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,aAAkB,GAAG,YAAY,CAkCxE"}
|
|
@@ -1,13 +1,97 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* export-servers command: generate mcpServers JSON pointing at mcp-conductor stdio.
|
|
3
|
+
*
|
|
4
|
+
* MC4: exportForClient() uses the per-client adapter to write the correct
|
|
5
|
+
* format/key/shape for any of the 10 known clients. The legacy exportToClaude()
|
|
6
|
+
* is preserved for backwards compatibility and defaults to claude-desktop.
|
|
7
|
+
*
|
|
3
8
|
* @module cli/commands/export-servers
|
|
4
9
|
*/
|
|
5
|
-
import { existsSync } from 'node:fs';
|
|
10
|
+
import { existsSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
11
|
+
import { join, dirname } from 'node:path';
|
|
6
12
|
import { loadConductorConfig, getDefaultConductorConfigPath } from '../../config/index.js';
|
|
13
|
+
import { ADAPTERS } from '../clients/index.js';
|
|
14
|
+
/**
|
|
15
|
+
* The conductor entry written into every exported client config.
|
|
16
|
+
*/
|
|
17
|
+
const CONDUCTOR_ENTRY = {
|
|
18
|
+
command: 'npx',
|
|
19
|
+
args: ['-y', '@darkiceinteractive/mcp-conductor@latest'],
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Derive the output filename for a given client.
|
|
23
|
+
*
|
|
24
|
+
* Extension mapping (mirrors adapter format declarations in registry.ts):
|
|
25
|
+
* - codex → .toml
|
|
26
|
+
* - continue → .yaml
|
|
27
|
+
* - all others (JSON) → .json
|
|
28
|
+
*/
|
|
29
|
+
export function deriveExportFilename(clientId) {
|
|
30
|
+
if (clientId === 'codex')
|
|
31
|
+
return `${clientId}-config.toml`;
|
|
32
|
+
if (clientId === 'continue')
|
|
33
|
+
return `${clientId}-config.yaml`;
|
|
34
|
+
return `${clientId}-config.json`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Export the conductor entry in the native config format for the specified
|
|
38
|
+
* client. Writes to `<outputDir>/<clientId>-config.<ext>` by default, or to
|
|
39
|
+
* `outputPath` when explicitly provided.
|
|
40
|
+
*
|
|
41
|
+
* The user can then drop the resulting file into the appropriate location for
|
|
42
|
+
* their client. Only the `mcp-conductor` entry is written (`keepOnlyConductor: true`).
|
|
43
|
+
*
|
|
44
|
+
* Backwards compat: omitting `clientId` defaults to `claude-desktop`.
|
|
45
|
+
*/
|
|
46
|
+
export function exportForClient(options = {}) {
|
|
47
|
+
const clientId = options.clientId ?? 'claude-desktop';
|
|
48
|
+
const outputDir = options.outputDir ?? process.cwd();
|
|
49
|
+
const filename = deriveExportFilename(clientId);
|
|
50
|
+
const resolvedOutputPath = options.outputPath ?? join(outputDir, filename);
|
|
51
|
+
const adapter = ADAPTERS.get(clientId);
|
|
52
|
+
if (!adapter) {
|
|
53
|
+
throw new Error(`No adapter registered for client "${clientId}". Cannot export.`);
|
|
54
|
+
}
|
|
55
|
+
// Count servers in conductor config (informational only).
|
|
56
|
+
const conductorConfigPath = getDefaultConductorConfigPath();
|
|
57
|
+
const hasConfig = existsSync(conductorConfigPath);
|
|
58
|
+
const conductorConfig = hasConfig ? loadConductorConfig() : null;
|
|
59
|
+
const serverCount = conductorConfig ? Object.keys(conductorConfig.servers).length : 0;
|
|
60
|
+
// Build a minimal NormalisedClientConfig. keepOnlyConductor=true means the
|
|
61
|
+
// adapter ignores `servers` and writes only the conductor entry.
|
|
62
|
+
const emptyConfig = { servers: {}, raw: {} };
|
|
63
|
+
// Ensure parent directory exists before the adapter writes.
|
|
64
|
+
mkdirSync(dirname(resolvedOutputPath), { recursive: true });
|
|
65
|
+
// Seed the file as an empty document so adapters that guard with existsSync
|
|
66
|
+
// do not attempt to back up a stale production config at the destination.
|
|
67
|
+
// Only seed when the destination does not already exist.
|
|
68
|
+
if (!existsSync(resolvedOutputPath)) {
|
|
69
|
+
writeFileSync(resolvedOutputPath, clientId === 'codex' ? '' : '{}', 'utf-8');
|
|
70
|
+
}
|
|
71
|
+
adapter.serialize(resolvedOutputPath, emptyConfig, {
|
|
72
|
+
keepOnlyConductor: true,
|
|
73
|
+
conductorEntry: CONDUCTOR_ENTRY,
|
|
74
|
+
});
|
|
75
|
+
return { outputPath: resolvedOutputPath, clientId, serverCount };
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Return all client IDs that have a registered adapter (in insertion order).
|
|
79
|
+
* Used by the CLI to show valid `--client` choices.
|
|
80
|
+
*/
|
|
81
|
+
export function listExportableClients() {
|
|
82
|
+
return [...ADAPTERS.keys()];
|
|
83
|
+
}
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Legacy: exportToClaude (claude-desktop / claude-code / raw text formats)
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
7
87
|
/**
|
|
8
88
|
* Generate a mcpServers block that points Claude back at mcp-conductor stdio.
|
|
9
89
|
* This is the rollback path: if someone wants to undo the import, they paste
|
|
10
90
|
* this JSON back into their Claude config.
|
|
91
|
+
*
|
|
92
|
+
* @deprecated Prefer `exportForClient({ clientId: 'claude-desktop' })` for new code.
|
|
93
|
+
* This function is kept for backwards compatibility; all existing callers
|
|
94
|
+
* (`bin/cli.ts`, `mcp-server.ts`, `lifecycle-tools.test.ts`) continue to work.
|
|
11
95
|
*/
|
|
12
96
|
export function exportToClaude(options = {}) {
|
|
13
97
|
const conductorPath = getDefaultConductorConfigPath();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-servers.js","sourceRoot":"","sources":["../../../src/cli/commands/export-servers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"export-servers.js","sourceRoot":"","sources":["../../../src/cli/commands/export-servers.ts"],"names":[],"mappings":"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"}
|