init.ts
1 import { McpClientObject, McpMetadataConfig, McpServerConfig, McpProgressCallback } from './types' 2 // import { Notification } from 'electron' 3 import { initializeClient } from './client' 4 import { loadConfigFile } from './config' 5 import Constants from '../utils/Constants' 6 import { getMcpConfigForDxt } from './dxt' 7 import path from 'node:path' 8 9 export async function loadConfig(): Promise<McpClientObject[]> { 10 try { 11 const config = loadConfigFile(Constants.ASSETS_PATH.mcp) 12 if (config) { 13 console.log('Config loaded:', config) 14 return Object.entries(config).map(([name, configJson]) => ({ name, configJson })) 15 } 16 } catch { 17 return [] 18 } 19 } 20 21 export async function initClients( 22 metadata: McpMetadataConfig, 23 callback?: McpProgressCallback 24 ): Promise<McpClientObject[]> { 25 if (!metadata) { 26 console.log('NO clients initialized.') 27 return [] 28 } 29 30 console.log('Config init:', metadata) 31 32 try { 33 const entries = Object.entries(metadata) 34 const clientPromises = entries.map(async ([name, object]) => { 35 if (object.type === 'metadata__stdio_config') { 36 return initSingleClient(name, object.config, callback) 37 } else if (object.type === 'metadata__mcpb_manifest') { 38 const stdioConfig = await getMcpConfigForDxt( 39 Constants.getPosixPath(path.join(Constants.ASSETS_PATH.mcpb, name)), 40 object.config, 41 object.user_config 42 ) 43 console.log(stdioConfig) 44 return initSingleClient(name, stdioConfig, callback) 45 } else { 46 return { name } 47 } 48 }) 49 50 const clients = await Promise.all(clientPromises) 51 console.log('All clients initialized.') 52 return clients 53 } catch (error) { 54 console.error('Error during client initialization:', error?.message) 55 throw new Error(`${error?.message}`) 56 } 57 } 58 59 export async function initSingleClient( 60 name: string, 61 serverConfig: McpServerConfig, 62 callback?: McpProgressCallback 63 ): Promise<McpClientObject> { 64 console.log(`Initializing client for ${name} with config:`, serverConfig) 65 const connection = await initializeClient(name, serverConfig, callback) 66 console.log(`${name} initialized.`) 67 const configJson = serverConfig 68 return { name, connection, configJson } 69 }