@darkiceinteractive/mcp-conductor 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +558 -0
- package/dist/bin/cli.d.ts +8 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +940 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bridge/http-server.d.ts +161 -0
- package/dist/bridge/http-server.d.ts.map +1 -0
- package/dist/bridge/http-server.js +367 -0
- package/dist/bridge/http-server.js.map +1 -0
- package/dist/bridge/index.d.ts +5 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +5 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/config/defaults.d.ts +29 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +60 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +49 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +272 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +93 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +5 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/hub/index.d.ts +5 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +5 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/mcp-hub.d.ts +176 -0
- package/dist/hub/mcp-hub.d.ts.map +1 -0
- package/dist/hub/mcp-hub.js +550 -0
- package/dist/hub/mcp-hub.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/index.d.ts +5 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +5 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/metrics-collector.d.ts +211 -0
- package/dist/metrics/metrics-collector.d.ts.map +1 -0
- package/dist/metrics/metrics-collector.js +437 -0
- package/dist/metrics/metrics-collector.js.map +1 -0
- package/dist/modes/index.d.ts +5 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +5 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/mode-handler.d.ts +132 -0
- package/dist/modes/mode-handler.d.ts.map +1 -0
- package/dist/modes/mode-handler.js +252 -0
- package/dist/modes/mode-handler.js.map +1 -0
- package/dist/runtime/executor.d.ts +57 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +700 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp-server.d.ts +62 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/mcp-server.js +1272 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/skills/index.d.ts +5 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +5 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skills-engine.d.ts +157 -0
- package/dist/skills/skills-engine.d.ts.map +1 -0
- package/dist/skills/skills-engine.js +405 -0
- package/dist/skills/skills-engine.js.map +1 -0
- package/dist/streaming/execution-stream.d.ts +158 -0
- package/dist/streaming/execution-stream.d.ts.map +1 -0
- package/dist/streaming/execution-stream.js +320 -0
- package/dist/streaming/execution-stream.js.map +1 -0
- package/dist/streaming/index.d.ts +5 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +5 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +68 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/helpers.d.ts +44 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +95 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +48 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/permissions.d.ts +97 -0
- package/dist/utils/permissions.d.ts.map +1 -0
- package/dist/utils/permissions.js +165 -0
- package/dist/utils/permissions.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +87 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +187 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/watcher/config-watcher.d.ts +67 -0
- package/dist/watcher/config-watcher.d.ts.map +1 -0
- package/dist/watcher/config-watcher.js +150 -0
- package/dist/watcher/config-watcher.js.map +1 -0
- package/dist/watcher/index.d.ts +5 -0
- package/dist/watcher/index.d.ts.map +1 -0
- package/dist/watcher/index.js +5 -0
- package/dist/watcher/index.js.map +1 -0
- package/package.json +86 -0
- package/templates/CLAUDE.md +137 -0
- package/templates/skill-mcp-conductor.md +64 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default configuration values for MCP Executor
|
|
3
|
+
*/
|
|
4
|
+
import type { MCPExecutorConfig } from './schema.js';
|
|
5
|
+
export declare const DEFAULT_CONFIG: MCPExecutorConfig;
|
|
6
|
+
export declare const ENV_VARS: {
|
|
7
|
+
readonly PORT: "MCP_EXECUTOR_PORT";
|
|
8
|
+
readonly MODE: "MCP_EXECUTOR_MODE";
|
|
9
|
+
readonly TIMEOUT: "MCP_EXECUTOR_TIMEOUT";
|
|
10
|
+
readonly MAX_TIMEOUT: "MCP_EXECUTOR_MAX_TIMEOUT";
|
|
11
|
+
readonly LOG_LEVEL: "MCP_EXECUTOR_LOG_LEVEL";
|
|
12
|
+
readonly CONFIG: "MCP_EXECUTOR_CONFIG";
|
|
13
|
+
readonly CLAUDE_CONFIG: "MCP_EXECUTOR_CLAUDE_CONFIG";
|
|
14
|
+
readonly CONDUCTOR_CONFIG: "MCP_CONDUCTOR_CONFIG";
|
|
15
|
+
readonly SKILLS_PATH: "MCP_EXECUTOR_SKILLS_PATH";
|
|
16
|
+
readonly WATCH_CONFIG: "MCP_EXECUTOR_WATCH_CONFIG";
|
|
17
|
+
readonly WATCH_SKILLS: "MCP_EXECUTOR_WATCH_SKILLS";
|
|
18
|
+
readonly STREAM_ENABLED: "MCP_EXECUTOR_STREAM_ENABLED";
|
|
19
|
+
readonly ALLOWED_SERVERS: "MCP_EXECUTOR_ALLOWED_SERVERS";
|
|
20
|
+
readonly MAX_MEMORY_MB: "MCP_EXECUTOR_MAX_MEMORY_MB";
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Default conductor config for exclusive mode
|
|
24
|
+
*/
|
|
25
|
+
export declare const DEFAULT_CONDUCTOR_CONFIG: {
|
|
26
|
+
exclusive: boolean;
|
|
27
|
+
servers: {};
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,cAAc,EAAE,iBAgC5B,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CAeX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;CAGpC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default configuration values for MCP Executor
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_CONFIG = {
|
|
5
|
+
bridge: {
|
|
6
|
+
port: 0, // Dynamic port allocation - OS will pick an available port
|
|
7
|
+
host: '127.0.0.1',
|
|
8
|
+
},
|
|
9
|
+
execution: {
|
|
10
|
+
mode: 'execution',
|
|
11
|
+
defaultTimeoutMs: 30000,
|
|
12
|
+
maxTimeoutMs: 300000,
|
|
13
|
+
streamingEnabled: true,
|
|
14
|
+
},
|
|
15
|
+
sandbox: {
|
|
16
|
+
maxMemoryMb: 512,
|
|
17
|
+
allowedNetHosts: ['localhost'],
|
|
18
|
+
},
|
|
19
|
+
skills: {
|
|
20
|
+
path: null,
|
|
21
|
+
watchForChanges: true,
|
|
22
|
+
},
|
|
23
|
+
hotReload: {
|
|
24
|
+
enabled: true,
|
|
25
|
+
debounceMs: 500,
|
|
26
|
+
},
|
|
27
|
+
metrics: {
|
|
28
|
+
enabled: true,
|
|
29
|
+
logToFile: false,
|
|
30
|
+
logPath: null,
|
|
31
|
+
},
|
|
32
|
+
servers: {
|
|
33
|
+
allowList: ['*'],
|
|
34
|
+
denyList: [],
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
export const ENV_VARS = {
|
|
38
|
+
PORT: 'MCP_EXECUTOR_PORT',
|
|
39
|
+
MODE: 'MCP_EXECUTOR_MODE',
|
|
40
|
+
TIMEOUT: 'MCP_EXECUTOR_TIMEOUT',
|
|
41
|
+
MAX_TIMEOUT: 'MCP_EXECUTOR_MAX_TIMEOUT',
|
|
42
|
+
LOG_LEVEL: 'MCP_EXECUTOR_LOG_LEVEL',
|
|
43
|
+
CONFIG: 'MCP_EXECUTOR_CONFIG',
|
|
44
|
+
CLAUDE_CONFIG: 'MCP_EXECUTOR_CLAUDE_CONFIG',
|
|
45
|
+
CONDUCTOR_CONFIG: 'MCP_CONDUCTOR_CONFIG',
|
|
46
|
+
SKILLS_PATH: 'MCP_EXECUTOR_SKILLS_PATH',
|
|
47
|
+
WATCH_CONFIG: 'MCP_EXECUTOR_WATCH_CONFIG',
|
|
48
|
+
WATCH_SKILLS: 'MCP_EXECUTOR_WATCH_SKILLS',
|
|
49
|
+
STREAM_ENABLED: 'MCP_EXECUTOR_STREAM_ENABLED',
|
|
50
|
+
ALLOWED_SERVERS: 'MCP_EXECUTOR_ALLOWED_SERVERS',
|
|
51
|
+
MAX_MEMORY_MB: 'MCP_EXECUTOR_MAX_MEMORY_MB',
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Default conductor config for exclusive mode
|
|
55
|
+
*/
|
|
56
|
+
export const DEFAULT_CONDUCTOR_CONFIG = {
|
|
57
|
+
exclusive: true,
|
|
58
|
+
servers: {},
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,EAAE,2DAA2D;QACpE,IAAI,EAAE,WAAW;KAClB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,MAAM;QACpB,gBAAgB,EAAE,IAAI;KACvB;IACD,OAAO,EAAE;QACP,WAAW,EAAE,GAAG;QAChB,eAAe,EAAE,CAAC,WAAW,CAAC;KAC/B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,IAAI;QACV,eAAe,EAAE,IAAI;KACtB;IACD,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,GAAG;KAChB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,IAAI;KACd;IACD,OAAO,EAAE;QACP,SAAS,EAAE,CAAC,GAAG,CAAC;QAChB,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,sBAAsB;IAC/B,WAAW,EAAE,0BAA0B;IACvC,SAAS,EAAE,wBAAwB;IACnC,MAAM,EAAE,qBAAqB;IAC7B,aAAa,EAAE,4BAA4B;IAC3C,gBAAgB,EAAE,sBAAsB;IACxC,WAAW,EAAE,0BAA0B;IACvC,YAAY,EAAE,2BAA2B;IACzC,YAAY,EAAE,2BAA2B;IACzC,cAAc,EAAE,6BAA6B;IAC7C,eAAe,EAAE,8BAA8B;IAC/C,aAAa,EAAE,4BAA4B;CACnC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,EAAE;CACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader for MCP Executor
|
|
3
|
+
*/
|
|
4
|
+
import type { MCPExecutorConfig, ClaudeConfig, ConductorConfig } from './schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* Get the default config file path
|
|
7
|
+
*/
|
|
8
|
+
export declare function getDefaultConfigPath(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Load the full configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadConfig(configPath?: string): MCPExecutorConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Claude config file search paths (cross-platform)
|
|
15
|
+
*/
|
|
16
|
+
export declare function getClaudeConfigPaths(): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Find the Claude config file
|
|
19
|
+
*/
|
|
20
|
+
export declare function findClaudeConfig(): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Load Claude config and extract MCP servers
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadClaudeConfig(configPath?: string): ClaudeConfig | null;
|
|
25
|
+
/**
|
|
26
|
+
* Conductor config file search paths (cross-platform)
|
|
27
|
+
*/
|
|
28
|
+
export declare function getConductorConfigPaths(): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Get the default conductor config path (for saving)
|
|
31
|
+
*/
|
|
32
|
+
export declare function getDefaultConductorConfigPath(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Find the conductor config file
|
|
35
|
+
*/
|
|
36
|
+
export declare function findConductorConfig(): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Load conductor config for exclusive mode
|
|
39
|
+
*/
|
|
40
|
+
export declare function loadConductorConfig(configPath?: string): ConductorConfig | null;
|
|
41
|
+
/**
|
|
42
|
+
* Save conductor config to file
|
|
43
|
+
*/
|
|
44
|
+
export declare function saveConductorConfig(config: ConductorConfig, configPath?: string): {
|
|
45
|
+
success: boolean;
|
|
46
|
+
path: string;
|
|
47
|
+
error?: string;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAiB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA+GnG;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAgBjE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAsB/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAgBhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAkBzE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAQlD;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAgBnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAmB/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAyBpD"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader for MCP Executor
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
import { join, dirname } from 'node:path';
|
|
7
|
+
import { DEFAULT_CONFIG, DEFAULT_CONDUCTOR_CONFIG, ENV_VARS } from './defaults.js';
|
|
8
|
+
import { logger, safeJsonParse } from '../utils/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Load configuration from environment variables
|
|
11
|
+
*/
|
|
12
|
+
function loadFromEnv(config) {
|
|
13
|
+
const env = process.env;
|
|
14
|
+
const port = env[ENV_VARS.PORT];
|
|
15
|
+
if (port) {
|
|
16
|
+
config.bridge.port = parseInt(port, 10);
|
|
17
|
+
}
|
|
18
|
+
const mode = env[ENV_VARS.MODE];
|
|
19
|
+
if (mode) {
|
|
20
|
+
config.execution.mode = mode;
|
|
21
|
+
}
|
|
22
|
+
const timeout = env[ENV_VARS.TIMEOUT];
|
|
23
|
+
if (timeout) {
|
|
24
|
+
config.execution.defaultTimeoutMs = parseInt(timeout, 10);
|
|
25
|
+
}
|
|
26
|
+
const maxTimeout = env[ENV_VARS.MAX_TIMEOUT];
|
|
27
|
+
if (maxTimeout) {
|
|
28
|
+
config.execution.maxTimeoutMs = parseInt(maxTimeout, 10);
|
|
29
|
+
}
|
|
30
|
+
const skillsPath = env[ENV_VARS.SKILLS_PATH];
|
|
31
|
+
if (skillsPath) {
|
|
32
|
+
config.skills.path = skillsPath;
|
|
33
|
+
}
|
|
34
|
+
const watchConfig = env[ENV_VARS.WATCH_CONFIG];
|
|
35
|
+
if (watchConfig) {
|
|
36
|
+
config.hotReload.enabled = watchConfig === 'true';
|
|
37
|
+
}
|
|
38
|
+
const watchSkills = env[ENV_VARS.WATCH_SKILLS];
|
|
39
|
+
if (watchSkills) {
|
|
40
|
+
config.skills.watchForChanges = watchSkills === 'true';
|
|
41
|
+
}
|
|
42
|
+
const streamEnabled = env[ENV_VARS.STREAM_ENABLED];
|
|
43
|
+
if (streamEnabled) {
|
|
44
|
+
config.execution.streamingEnabled = streamEnabled === 'true';
|
|
45
|
+
}
|
|
46
|
+
const maxMemory = env[ENV_VARS.MAX_MEMORY_MB];
|
|
47
|
+
if (maxMemory) {
|
|
48
|
+
config.sandbox.maxMemoryMb = parseInt(maxMemory, 10);
|
|
49
|
+
}
|
|
50
|
+
const allowedServers = env[ENV_VARS.ALLOWED_SERVERS];
|
|
51
|
+
if (allowedServers) {
|
|
52
|
+
config.servers.allowList = allowedServers.split(',').map((s) => s.trim());
|
|
53
|
+
}
|
|
54
|
+
return config;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Load configuration from a JSON file
|
|
58
|
+
*/
|
|
59
|
+
function loadFromFile(filePath) {
|
|
60
|
+
if (!existsSync(filePath)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
65
|
+
return safeJsonParse(content, {});
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
logger.warn(`Failed to load config from ${filePath}`, { error: String(error) });
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Deep merge two config objects
|
|
74
|
+
*/
|
|
75
|
+
function deepMerge(target, source) {
|
|
76
|
+
const result = JSON.parse(JSON.stringify(target));
|
|
77
|
+
if (source.bridge) {
|
|
78
|
+
result.bridge = { ...result.bridge, ...source.bridge };
|
|
79
|
+
}
|
|
80
|
+
if (source.execution) {
|
|
81
|
+
result.execution = { ...result.execution, ...source.execution };
|
|
82
|
+
}
|
|
83
|
+
if (source.sandbox) {
|
|
84
|
+
result.sandbox = { ...result.sandbox, ...source.sandbox };
|
|
85
|
+
}
|
|
86
|
+
if (source.skills) {
|
|
87
|
+
result.skills = { ...result.skills, ...source.skills };
|
|
88
|
+
}
|
|
89
|
+
if (source.hotReload) {
|
|
90
|
+
result.hotReload = { ...result.hotReload, ...source.hotReload };
|
|
91
|
+
}
|
|
92
|
+
if (source.metrics) {
|
|
93
|
+
result.metrics = { ...result.metrics, ...source.metrics };
|
|
94
|
+
}
|
|
95
|
+
if (source.servers) {
|
|
96
|
+
result.servers = { ...result.servers, ...source.servers };
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the default config file path
|
|
102
|
+
*/
|
|
103
|
+
export function getDefaultConfigPath() {
|
|
104
|
+
return join(homedir(), '.mcp-executor', 'config.json');
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Load the full configuration
|
|
108
|
+
*/
|
|
109
|
+
export function loadConfig(configPath) {
|
|
110
|
+
let config = JSON.parse(JSON.stringify(DEFAULT_CONFIG));
|
|
111
|
+
// Load from file if specified or default location
|
|
112
|
+
const envConfig = process.env[ENV_VARS.CONFIG];
|
|
113
|
+
const filePath = configPath || envConfig || getDefaultConfigPath();
|
|
114
|
+
const fileConfig = loadFromFile(filePath);
|
|
115
|
+
if (fileConfig) {
|
|
116
|
+
config = deepMerge(config, fileConfig);
|
|
117
|
+
logger.debug(`Loaded config from ${filePath}`);
|
|
118
|
+
}
|
|
119
|
+
// Override with environment variables
|
|
120
|
+
config = loadFromEnv(config);
|
|
121
|
+
return config;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Claude config file search paths (cross-platform)
|
|
125
|
+
*/
|
|
126
|
+
export function getClaudeConfigPaths() {
|
|
127
|
+
const home = homedir();
|
|
128
|
+
const paths = [
|
|
129
|
+
// Claude Code configs
|
|
130
|
+
join(home, '.claude.json'),
|
|
131
|
+
join(home, 'Library', 'Application Support', 'Claude Code', 'claude_code_config.json'),
|
|
132
|
+
join(home, 'Library', 'Application Support', 'Claude', 'claude_code_config.json'),
|
|
133
|
+
// Claude Desktop configs
|
|
134
|
+
join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json'),
|
|
135
|
+
join(home, '.config', 'claude', 'claude_desktop_config.json'),
|
|
136
|
+
// Project local configs
|
|
137
|
+
join(process.cwd(), 'claude_code_config.json'),
|
|
138
|
+
join(process.cwd(), 'claude_desktop_config.json'),
|
|
139
|
+
];
|
|
140
|
+
// Windows paths
|
|
141
|
+
const appData = process.env['APPDATA'];
|
|
142
|
+
if (process.platform === 'win32' && appData) {
|
|
143
|
+
paths.push(join(appData, 'Claude', 'claude_desktop_config.json'));
|
|
144
|
+
}
|
|
145
|
+
return paths;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Find the Claude config file
|
|
149
|
+
*/
|
|
150
|
+
export function findClaudeConfig() {
|
|
151
|
+
// Check environment variable first
|
|
152
|
+
const envPath = process.env[ENV_VARS.CLAUDE_CONFIG];
|
|
153
|
+
if (envPath && envPath !== 'auto' && existsSync(envPath)) {
|
|
154
|
+
return envPath;
|
|
155
|
+
}
|
|
156
|
+
// Search standard paths
|
|
157
|
+
for (const path of getClaudeConfigPaths()) {
|
|
158
|
+
if (existsSync(path)) {
|
|
159
|
+
logger.debug(`Found Claude config at ${path}`);
|
|
160
|
+
return path;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Load Claude config and extract MCP servers
|
|
167
|
+
*/
|
|
168
|
+
export function loadClaudeConfig(configPath) {
|
|
169
|
+
const path = configPath || findClaudeConfig();
|
|
170
|
+
if (!path) {
|
|
171
|
+
logger.warn('No Claude config file found');
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
const content = readFileSync(path, 'utf-8');
|
|
176
|
+
const config = safeJsonParse(content, {});
|
|
177
|
+
logger.info(`Loaded Claude config from ${path}`, {
|
|
178
|
+
serverCount: Object.keys(config.mcpServers || {}).length,
|
|
179
|
+
});
|
|
180
|
+
return config;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
logger.error(`Failed to load Claude config from ${path}`, { error: String(error) });
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Conductor config file search paths (cross-platform)
|
|
189
|
+
*/
|
|
190
|
+
export function getConductorConfigPaths() {
|
|
191
|
+
const home = homedir();
|
|
192
|
+
return [
|
|
193
|
+
// Primary location
|
|
194
|
+
join(home, '.mcp-conductor.json'),
|
|
195
|
+
// Alternative in .claude directory
|
|
196
|
+
join(home, '.claude', 'mcp-conductor.json'),
|
|
197
|
+
];
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get the default conductor config path (for saving)
|
|
201
|
+
*/
|
|
202
|
+
export function getDefaultConductorConfigPath() {
|
|
203
|
+
return join(homedir(), '.mcp-conductor.json');
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Find the conductor config file
|
|
207
|
+
*/
|
|
208
|
+
export function findConductorConfig() {
|
|
209
|
+
// Check environment variable first
|
|
210
|
+
const envPath = process.env[ENV_VARS.CONDUCTOR_CONFIG];
|
|
211
|
+
if (envPath && existsSync(envPath)) {
|
|
212
|
+
return envPath;
|
|
213
|
+
}
|
|
214
|
+
// Search standard paths
|
|
215
|
+
for (const path of getConductorConfigPaths()) {
|
|
216
|
+
if (existsSync(path)) {
|
|
217
|
+
logger.debug(`Found conductor config at ${path}`);
|
|
218
|
+
return path;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Load conductor config for exclusive mode
|
|
225
|
+
*/
|
|
226
|
+
export function loadConductorConfig(configPath) {
|
|
227
|
+
const path = configPath || findConductorConfig();
|
|
228
|
+
if (!path) {
|
|
229
|
+
logger.debug('No conductor config file found');
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
const content = readFileSync(path, 'utf-8');
|
|
234
|
+
const config = safeJsonParse(content, DEFAULT_CONDUCTOR_CONFIG);
|
|
235
|
+
logger.info(`Loaded conductor config from ${path}`, {
|
|
236
|
+
exclusive: config.exclusive,
|
|
237
|
+
serverCount: Object.keys(config.servers || {}).length,
|
|
238
|
+
});
|
|
239
|
+
return config;
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
logger.error(`Failed to load conductor config from ${path}`, { error: String(error) });
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Save conductor config to file
|
|
248
|
+
*/
|
|
249
|
+
export function saveConductorConfig(config, configPath) {
|
|
250
|
+
const path = configPath || getDefaultConductorConfigPath();
|
|
251
|
+
try {
|
|
252
|
+
// Ensure directory exists
|
|
253
|
+
const dir = dirname(path);
|
|
254
|
+
if (!existsSync(dir)) {
|
|
255
|
+
mkdirSync(dir, { recursive: true });
|
|
256
|
+
}
|
|
257
|
+
// Write config with pretty formatting
|
|
258
|
+
const content = JSON.stringify(config, null, 2);
|
|
259
|
+
writeFileSync(path, content, 'utf-8');
|
|
260
|
+
logger.info(`Saved conductor config to ${path}`, {
|
|
261
|
+
exclusive: config.exclusive,
|
|
262
|
+
serverCount: Object.keys(config.servers || {}).length,
|
|
263
|
+
});
|
|
264
|
+
return { success: true, path };
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
const errorMsg = String(error);
|
|
268
|
+
logger.error(`Failed to save conductor config to ${path}`, { error: errorMsg });
|
|
269
|
+
return { success: false, path, error: errorMsg };
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration type definitions for MCP Executor
|
|
3
|
+
*/
|
|
4
|
+
export type ExecutionMode = 'execution' | 'passthrough' | 'hybrid';
|
|
5
|
+
export interface BridgeConfig {
|
|
6
|
+
port: number;
|
|
7
|
+
host: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ExecutionConfig {
|
|
10
|
+
mode: ExecutionMode;
|
|
11
|
+
defaultTimeoutMs: number;
|
|
12
|
+
maxTimeoutMs: number;
|
|
13
|
+
streamingEnabled: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface SandboxConfig {
|
|
16
|
+
maxMemoryMb: number;
|
|
17
|
+
allowedNetHosts: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface SkillsConfig {
|
|
20
|
+
path: string | null;
|
|
21
|
+
watchForChanges: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface HotReloadConfig {
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
debounceMs: number;
|
|
26
|
+
}
|
|
27
|
+
export interface MetricsConfig {
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
logToFile: boolean;
|
|
30
|
+
logPath: string | null;
|
|
31
|
+
}
|
|
32
|
+
export interface ServersConfig {
|
|
33
|
+
allowList: string[];
|
|
34
|
+
denyList: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface MCPExecutorConfig {
|
|
37
|
+
bridge: BridgeConfig;
|
|
38
|
+
execution: ExecutionConfig;
|
|
39
|
+
sandbox: SandboxConfig;
|
|
40
|
+
skills: SkillsConfig;
|
|
41
|
+
hotReload: HotReloadConfig;
|
|
42
|
+
metrics: MetricsConfig;
|
|
43
|
+
servers: ServersConfig;
|
|
44
|
+
}
|
|
45
|
+
export interface ServerInfo {
|
|
46
|
+
name: string;
|
|
47
|
+
command: string;
|
|
48
|
+
args?: string[];
|
|
49
|
+
env?: Record<string, string>;
|
|
50
|
+
}
|
|
51
|
+
export interface ClaudeConfig {
|
|
52
|
+
mcpServers?: Record<string, {
|
|
53
|
+
command: string;
|
|
54
|
+
args?: string[];
|
|
55
|
+
env?: Record<string, string>;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Rate limiting configuration for a server
|
|
60
|
+
*/
|
|
61
|
+
export interface RateLimitConfig {
|
|
62
|
+
/** Maximum requests per second */
|
|
63
|
+
requestsPerSecond: number;
|
|
64
|
+
/** Maximum burst size (defaults to requestsPerSecond) */
|
|
65
|
+
burstSize?: number;
|
|
66
|
+
/** Behaviour when rate limit exceeded: 'queue' waits, 'reject' fails immediately */
|
|
67
|
+
onLimitExceeded?: 'queue' | 'reject';
|
|
68
|
+
/** Maximum time to wait in queue before rejecting (ms, defaults to 30000) */
|
|
69
|
+
maxQueueTimeMs?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Server definition for conductor config
|
|
73
|
+
*/
|
|
74
|
+
export interface ConductorServerConfig {
|
|
75
|
+
/** Server type (stdio is the default and most common) */
|
|
76
|
+
type?: 'stdio';
|
|
77
|
+
command: string;
|
|
78
|
+
args?: string[];
|
|
79
|
+
env?: Record<string, string>;
|
|
80
|
+
/** Rate limiting configuration for this server */
|
|
81
|
+
rateLimit?: RateLimitConfig;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* MCP Conductor's own configuration file (~/.mcp-conductor.json)
|
|
85
|
+
* Used in exclusive mode to store server configurations separately from Claude's config.
|
|
86
|
+
*/
|
|
87
|
+
export interface ConductorConfig {
|
|
88
|
+
/** When true, only use servers from this config (not Claude's config) */
|
|
89
|
+
exclusive: boolean;
|
|
90
|
+
/** MCP servers that conductor will connect to internally */
|
|
91
|
+
servers: Record<string, ConductorServerConfig>;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAC1B,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,eAAe,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACrC,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,kDAAkD;IAClD,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAChD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hub/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hub/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,MAAM,GAKP,MAAM,cAAc,CAAC"}
|