@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.
Files changed (125) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +558 -0
  3. package/dist/bin/cli.d.ts +8 -0
  4. package/dist/bin/cli.d.ts.map +1 -0
  5. package/dist/bin/cli.js +940 -0
  6. package/dist/bin/cli.js.map +1 -0
  7. package/dist/bridge/http-server.d.ts +161 -0
  8. package/dist/bridge/http-server.d.ts.map +1 -0
  9. package/dist/bridge/http-server.js +367 -0
  10. package/dist/bridge/http-server.js.map +1 -0
  11. package/dist/bridge/index.d.ts +5 -0
  12. package/dist/bridge/index.d.ts.map +1 -0
  13. package/dist/bridge/index.js +5 -0
  14. package/dist/bridge/index.js.map +1 -0
  15. package/dist/config/defaults.d.ts +29 -0
  16. package/dist/config/defaults.d.ts.map +1 -0
  17. package/dist/config/defaults.js +60 -0
  18. package/dist/config/defaults.js.map +1 -0
  19. package/dist/config/index.d.ts +7 -0
  20. package/dist/config/index.d.ts.map +1 -0
  21. package/dist/config/index.js +7 -0
  22. package/dist/config/index.js.map +1 -0
  23. package/dist/config/loader.d.ts +49 -0
  24. package/dist/config/loader.d.ts.map +1 -0
  25. package/dist/config/loader.js +272 -0
  26. package/dist/config/loader.js.map +1 -0
  27. package/dist/config/schema.d.ts +93 -0
  28. package/dist/config/schema.d.ts.map +1 -0
  29. package/dist/config/schema.js +5 -0
  30. package/dist/config/schema.js.map +1 -0
  31. package/dist/hub/index.d.ts +5 -0
  32. package/dist/hub/index.d.ts.map +1 -0
  33. package/dist/hub/index.js +5 -0
  34. package/dist/hub/index.js.map +1 -0
  35. package/dist/hub/mcp-hub.d.ts +176 -0
  36. package/dist/hub/mcp-hub.d.ts.map +1 -0
  37. package/dist/hub/mcp-hub.js +550 -0
  38. package/dist/hub/mcp-hub.js.map +1 -0
  39. package/dist/index.d.ts +9 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +45 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/metrics/index.d.ts +5 -0
  44. package/dist/metrics/index.d.ts.map +1 -0
  45. package/dist/metrics/index.js +5 -0
  46. package/dist/metrics/index.js.map +1 -0
  47. package/dist/metrics/metrics-collector.d.ts +211 -0
  48. package/dist/metrics/metrics-collector.d.ts.map +1 -0
  49. package/dist/metrics/metrics-collector.js +437 -0
  50. package/dist/metrics/metrics-collector.js.map +1 -0
  51. package/dist/modes/index.d.ts +5 -0
  52. package/dist/modes/index.d.ts.map +1 -0
  53. package/dist/modes/index.js +5 -0
  54. package/dist/modes/index.js.map +1 -0
  55. package/dist/modes/mode-handler.d.ts +132 -0
  56. package/dist/modes/mode-handler.d.ts.map +1 -0
  57. package/dist/modes/mode-handler.js +252 -0
  58. package/dist/modes/mode-handler.js.map +1 -0
  59. package/dist/runtime/executor.d.ts +57 -0
  60. package/dist/runtime/executor.d.ts.map +1 -0
  61. package/dist/runtime/executor.js +700 -0
  62. package/dist/runtime/executor.js.map +1 -0
  63. package/dist/runtime/index.d.ts +5 -0
  64. package/dist/runtime/index.d.ts.map +1 -0
  65. package/dist/runtime/index.js +5 -0
  66. package/dist/runtime/index.js.map +1 -0
  67. package/dist/server/index.d.ts +5 -0
  68. package/dist/server/index.d.ts.map +1 -0
  69. package/dist/server/index.js +5 -0
  70. package/dist/server/index.js.map +1 -0
  71. package/dist/server/mcp-server.d.ts +62 -0
  72. package/dist/server/mcp-server.d.ts.map +1 -0
  73. package/dist/server/mcp-server.js +1272 -0
  74. package/dist/server/mcp-server.js.map +1 -0
  75. package/dist/skills/index.d.ts +5 -0
  76. package/dist/skills/index.d.ts.map +1 -0
  77. package/dist/skills/index.js +5 -0
  78. package/dist/skills/index.js.map +1 -0
  79. package/dist/skills/skills-engine.d.ts +157 -0
  80. package/dist/skills/skills-engine.d.ts.map +1 -0
  81. package/dist/skills/skills-engine.js +405 -0
  82. package/dist/skills/skills-engine.js.map +1 -0
  83. package/dist/streaming/execution-stream.d.ts +158 -0
  84. package/dist/streaming/execution-stream.d.ts.map +1 -0
  85. package/dist/streaming/execution-stream.js +320 -0
  86. package/dist/streaming/execution-stream.js.map +1 -0
  87. package/dist/streaming/index.d.ts +5 -0
  88. package/dist/streaming/index.d.ts.map +1 -0
  89. package/dist/streaming/index.js +5 -0
  90. package/dist/streaming/index.js.map +1 -0
  91. package/dist/utils/errors.d.ts +36 -0
  92. package/dist/utils/errors.d.ts.map +1 -0
  93. package/dist/utils/errors.js +68 -0
  94. package/dist/utils/errors.js.map +1 -0
  95. package/dist/utils/helpers.d.ts +44 -0
  96. package/dist/utils/helpers.d.ts.map +1 -0
  97. package/dist/utils/helpers.js +95 -0
  98. package/dist/utils/helpers.js.map +1 -0
  99. package/dist/utils/index.d.ts +9 -0
  100. package/dist/utils/index.d.ts.map +1 -0
  101. package/dist/utils/index.js +9 -0
  102. package/dist/utils/index.js.map +1 -0
  103. package/dist/utils/logger.d.ts +13 -0
  104. package/dist/utils/logger.d.ts.map +1 -0
  105. package/dist/utils/logger.js +48 -0
  106. package/dist/utils/logger.js.map +1 -0
  107. package/dist/utils/permissions.d.ts +97 -0
  108. package/dist/utils/permissions.d.ts.map +1 -0
  109. package/dist/utils/permissions.js +165 -0
  110. package/dist/utils/permissions.js.map +1 -0
  111. package/dist/utils/rate-limiter.d.ts +87 -0
  112. package/dist/utils/rate-limiter.d.ts.map +1 -0
  113. package/dist/utils/rate-limiter.js +187 -0
  114. package/dist/utils/rate-limiter.js.map +1 -0
  115. package/dist/watcher/config-watcher.d.ts +67 -0
  116. package/dist/watcher/config-watcher.d.ts.map +1 -0
  117. package/dist/watcher/config-watcher.js +150 -0
  118. package/dist/watcher/config-watcher.js.map +1 -0
  119. package/dist/watcher/index.d.ts +5 -0
  120. package/dist/watcher/index.d.ts.map +1 -0
  121. package/dist/watcher/index.js +5 -0
  122. package/dist/watcher/index.js.map +1 -0
  123. package/package.json +86 -0
  124. package/templates/CLAUDE.md +137 -0
  125. 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,7 @@
1
+ /**
2
+ * Config module exports
3
+ */
4
+ export * from './schema.js';
5
+ export * from './defaults.js';
6
+ export * from './loader.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ /**
2
+ * Config module exports
3
+ */
4
+ export * from './schema.js';
5
+ export * from './defaults.js';
6
+ export * from './loader.js';
7
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ /**
2
+ * Configuration type definitions for MCP Executor
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * MCP Hub module exports
3
+ */
4
+ export { MCPHub, type ServerConnection, type ServerStatus, type HubConfig, type HubEvents, } from './mcp-hub.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * MCP Hub module exports
3
+ */
4
+ export { MCPHub, } from './mcp-hub.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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"}