@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,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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"}
|