diff --git a/src/config/index.ts b/src/config/index.ts index cfe0c45..8246c68 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -15,18 +15,37 @@ const defaultConfig = { mcpHubVersion: getPackageVersion(), }; +// Settings cache +let settingsCache: McpSettings | null = null; + export const getSettingsPath = (): string => { return getConfigFilePath('mcp_settings.json', 'Settings'); }; export const loadSettings = (): McpSettings => { + // If cache exists, return cached data directly + if (settingsCache) { + return settingsCache; + } + const settingsPath = getSettingsPath(); try { const settingsData = fs.readFileSync(settingsPath, 'utf8'); - return JSON.parse(settingsData); + const settings = JSON.parse(settingsData); + + // Update cache + settingsCache = settings; + + console.log(`Loaded settings from ${settingsPath}:`, settings); + return settings; } catch (error) { console.error(`Failed to load settings from ${settingsPath}:`, error); - return { mcpServers: {}, users: [] }; + const defaultSettings = { mcpServers: {}, users: [] }; + + // Cache default settings + settingsCache = defaultSettings; + + return defaultSettings; } }; @@ -34,6 +53,10 @@ export const saveSettings = (settings: McpSettings): boolean => { const settingsPath = getSettingsPath(); try { fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8'); + + // Update cache after successful save + settingsCache = settings; + return true; } catch (error) { console.error(`Failed to save settings to ${settingsPath}:`, error); @@ -41,6 +64,22 @@ export const saveSettings = (settings: McpSettings): boolean => { } }; +/** + * Clear settings cache, force next loadSettings call to re-read from file + */ +export const clearSettingsCache = (): void => { + settingsCache = null; +}; + +/** + * Get current cache status (for debugging) + */ +export const getSettingsCacheInfo = (): { hasCache: boolean } => { + return { + hasCache: settingsCache !== null, + }; +}; + export const replaceEnvVars = (env: Record): Record => { const res: Record = {}; for (const [key, value] of Object.entries(env)) { diff --git a/src/services/sseService.ts b/src/services/sseService.ts index c53e65d..2327820 100644 --- a/src/services/sseService.ts +++ b/src/services/sseService.ts @@ -109,7 +109,10 @@ export const handleSseMessage = async (req: Request, res: Response): Promise => { const sessionId = req.headers['mcp-session-id'] as string | undefined; const group = req.params.group; - console.log(`Handling MCP post request for sessionId: ${sessionId} and group: ${group}`); + const body = req.body; + console.log( + `Handling MCP post request for sessionId: ${sessionId} and group: ${group} with body: ${JSON.stringify(body)}`, + ); // Check bearer auth if (!validateBearerAuth(req)) { res.status(401).send('Bearer authentication required or invalid token');