diff --git a/src/config/index.ts b/src/config/index.ts index ca77924..5e93dbf 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -7,6 +7,7 @@ dotenv.config(); const defaultConfig = { port: process.env.PORT || 3000, + initTimeout: process.env.INIT_TIMEOUT || 300000, timeout: process.env.REQUEST_TIMEOUT || 60000, mcpHubName: 'mcphub', mcpHubVersion: '0.0.1', @@ -42,4 +43,4 @@ export const expandEnvVars = (value: string): string => { return value.replace(/\$\{([^}]+)\}/g, (_, key) => process.env[key] || ''); }; -export default defaultConfig; \ No newline at end of file +export default defaultConfig; diff --git a/src/services/mcpService.ts b/src/services/mcpService.ts index a6c8996..f94259b 100644 --- a/src/services/mcpService.ts +++ b/src/services/mcpService.ts @@ -13,7 +13,7 @@ let currentServer: Server; export const initMcpServer = async (name: string, version: string): Promise => { currentServer = createMcpServer(name, version); - await registerAllTools(currentServer, true); + await registerAllTools(currentServer, true, true); }; export const setMcpServer = (server: Server): void => { @@ -25,7 +25,7 @@ export const getMcpServer = (): Server => { }; export const notifyToolChanged = async () => { - await registerAllTools(currentServer, true); + await registerAllTools(currentServer, true, false); currentServer .sendToolListChanged() .catch((error) => { @@ -40,7 +40,7 @@ export const notifyToolChanged = async () => { let serverInfos: ServerInfo[] = []; // Initialize MCP server clients -export const initializeClientsFromSettings = (): ServerInfo[] => { +export const initializeClientsFromSettings = (isInit: boolean): ServerInfo[] => { const settings = loadSettings(); const existingServerInfos = serverInfos; serverInfos = []; @@ -109,13 +109,14 @@ export const initializeClientsFromSettings = (): ServerInfo[] => { }, }, ); + const timeout = isInit ? Number(config.initTimeout) : Number(config.timeout); client - .connect(transport, { timeout: Number(config.timeout) }) + .connect(transport, { timeout: timeout }) .then(() => { console.log(`Successfully connected client for server: ${name}`); client - .listTools({}, { timeout: Number(config.timeout) }) + .listTools({}, { timeout: timeout }) .then((tools) => { console.log(`Successfully listed ${tools.tools.length} tools for server: ${name}`); const serverInfo = getServerByName(name); @@ -169,8 +170,12 @@ export const initializeClientsFromSettings = (): ServerInfo[] => { }; // Register all MCP tools -export const registerAllTools = async (server: Server, forceInit: boolean): Promise => { - initializeClientsFromSettings(); +export const registerAllTools = async ( + server: Server, + forceInit: boolean, + isInit: boolean, +): Promise => { + initializeClientsFromSettings(isInit); }; // Get all server information @@ -221,7 +226,7 @@ export const addServer = async ( return { success: false, message: 'Failed to save settings' }; } - registerAllTools(currentServer, false); + registerAllTools(currentServer, false, false); return { success: true, message: 'Server added successfully' }; } catch (error) { console.error(`Failed to add server: ${name}`, error);