@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,176 @@
1
+ /**
2
+ * MCP Hub - Connects to and manages real MCP servers
3
+ *
4
+ * This component:
5
+ * - Reads Claude config files to discover MCP servers
6
+ * - Spawns and connects to each server via stdio transport
7
+ * - Maintains connection pool with health monitoring
8
+ * - Caches tool schemas for efficient discovery
9
+ * - Supports hot-reload of server configurations
10
+ */
11
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
12
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
13
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
14
+ import { EventEmitter } from 'node:events';
15
+ import { RateLimiter } from '../utils/index.js';
16
+ import type { ServersConfig, RateLimitConfig } from '../config/schema.js';
17
+ export type ServerStatus = 'connecting' | 'connected' | 'disconnected' | 'error';
18
+ export interface ServerConnection {
19
+ name: string;
20
+ client: Client;
21
+ transport: StdioClientTransport;
22
+ status: ServerStatus;
23
+ tools: Tool[];
24
+ connectedAt?: Date;
25
+ lastError?: string;
26
+ command: string;
27
+ args: string[];
28
+ env?: Record<string, string>;
29
+ rateLimiter?: RateLimiter;
30
+ rateLimitConfig?: RateLimitConfig;
31
+ }
32
+ export interface HubConfig {
33
+ /** Path to Claude config file (auto-detect if not specified) */
34
+ claudeConfigPath?: string;
35
+ /** Path to conductor config file (auto-detect if not specified) */
36
+ conductorConfigPath?: string;
37
+ /** Server allow/deny lists */
38
+ servers?: ServersConfig;
39
+ /** Connection timeout in milliseconds */
40
+ connectionTimeoutMs?: number;
41
+ /** Whether to auto-reconnect failed connections */
42
+ autoReconnect?: boolean;
43
+ /** Reconnect delay in milliseconds */
44
+ reconnectDelayMs?: number;
45
+ /** Maximum reconnect attempts */
46
+ maxReconnectAttempts?: number;
47
+ }
48
+ export interface HubEvents {
49
+ serverConnected: (serverName: string) => void;
50
+ serverDisconnected: (serverName: string, error?: Error) => void;
51
+ serverError: (serverName: string, error: Error) => void;
52
+ serversChanged: (added: string[], removed: string[]) => void;
53
+ toolsCached: (serverName: string, toolCount: number) => void;
54
+ }
55
+ export declare class MCPHub extends EventEmitter {
56
+ private config;
57
+ private connections;
58
+ private toolCache;
59
+ private reconnectAttempts;
60
+ private isShuttingDown;
61
+ constructor(config?: HubConfig);
62
+ /**
63
+ * Initialise the hub and connect to all configured servers
64
+ */
65
+ initialise(): Promise<void>;
66
+ /**
67
+ * Discover servers from conductor config and/or Claude config
68
+ * Returns a merged map of server configurations
69
+ */
70
+ private discoverServers;
71
+ /**
72
+ * Filter servers based on allow/deny lists
73
+ */
74
+ private filterServers;
75
+ /**
76
+ * Connect to a single MCP server
77
+ */
78
+ connectServer(name: string, serverConfig: {
79
+ command: string;
80
+ args?: string[];
81
+ env?: Record<string, string>;
82
+ rateLimit?: RateLimitConfig;
83
+ }): Promise<boolean>;
84
+ /**
85
+ * Handle server disconnection with optional reconnection
86
+ */
87
+ private handleDisconnection;
88
+ /**
89
+ * Cache tools from a connected server
90
+ */
91
+ private cacheServerTools;
92
+ /**
93
+ * Disconnect from a specific server
94
+ */
95
+ disconnectServer(name: string): Promise<void>;
96
+ /**
97
+ * Reload server configurations
98
+ */
99
+ reload(): Promise<{
100
+ added: string[];
101
+ removed: string[];
102
+ }>;
103
+ /**
104
+ * Shutdown all connections
105
+ */
106
+ shutdown(): Promise<void>;
107
+ /**
108
+ * List all connected servers
109
+ */
110
+ listServers(): Array<{
111
+ name: string;
112
+ status: ServerStatus;
113
+ toolCount: number;
114
+ connectedAt?: Date;
115
+ lastError?: string;
116
+ }>;
117
+ /**
118
+ * Get tools for a specific server
119
+ */
120
+ getServerTools(serverName: string): Tool[];
121
+ /**
122
+ * Get all tools from all servers
123
+ */
124
+ getAllTools(): Array<{
125
+ server: string;
126
+ tool: Tool;
127
+ }>;
128
+ /**
129
+ * Search for tools across all servers
130
+ */
131
+ searchTools(query: string): Array<{
132
+ server: string;
133
+ tool: string;
134
+ description: string;
135
+ }>;
136
+ /**
137
+ * Call a tool on a specific server
138
+ */
139
+ callTool(serverName: string, toolName: string, params: Record<string, unknown>): Promise<unknown>;
140
+ /**
141
+ * Check if a server is connected
142
+ */
143
+ isServerConnected(serverName: string): boolean;
144
+ /**
145
+ * Get server count by status
146
+ */
147
+ getStats(): {
148
+ total: number;
149
+ connected: number;
150
+ error: number;
151
+ disconnected: number;
152
+ };
153
+ /**
154
+ * Get the Claude config file path being used
155
+ */
156
+ getConfigPath(): string | null;
157
+ /**
158
+ * Get the conductor config file path being used
159
+ */
160
+ getConductorConfigPath(): string | null;
161
+ /**
162
+ * Check if running in exclusive mode (conductor config only)
163
+ */
164
+ isExclusiveMode(): boolean;
165
+ /**
166
+ * Get configuration info for status display
167
+ */
168
+ getConfigInfo(): {
169
+ mode: 'exclusive' | 'shared' | 'claude-only';
170
+ conductorConfigPath: string | null;
171
+ claudeConfigPath: string | null;
172
+ conductorServerCount: number;
173
+ claudeServerCount: number;
174
+ };
175
+ }
176
+ //# sourceMappingURL=mcp-hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-hub.d.ts","sourceRoot":"","sources":["../../src/hub/mcp-hub.ts"],"names":[],"mappings":"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"}