Skip to main content
Glama

marm-mcp

storage.js3.19 kB
// storage.js - Centralized localStorage operations and multi-tab synchronization // // ===== Storage & Synchronization Utilities ===== export const LS_KEY = 'marm-sessions-v1'; export const CURRENT_SESSION_KEY = 'marm-current-session'; let hasDataChanged = false; let sessionsRef = null; export function setSessionsReference(sessions) { sessionsRef = sessions; } if (typeof window !== 'undefined') { window.addEventListener('storage', (event) => { if (event.key === LS_KEY || event.key === CURRENT_SESSION_KEY) { hasDataChanged = true; } }); window.addEventListener('focus', () => { if (hasDataChanged && sessionsRef) { restoreSessions(); hasDataChanged = false; } }); } // ===== Session Persistence & Restoration ===== export function persistSessions() { if (!sessionsRef) { console.error('MARM: Sessions reference not set'); return false; } const isPersistenceEnabled = localStorage.getItem('marm-persistence-enabled') === 'true'; if (!isPersistenceEnabled) { return false; } try { localStorage.setItem(LS_KEY, JSON.stringify(sessionsRef)); return true; } catch (e) { if (e.name === 'QuotaExceededError') { console.error('MARM: localStorage quota exceeded. Cannot save sessions.', e); try { localStorage.setItem(LS_KEY, JSON.stringify(sessionsRef)); return true; } catch (retryError) { console.error('MARM: Failed to save sessions even after cleanup.', retryError); return false; } } else { console.error('MARM: Failed to persist sessions:', e); return false; } } } // --- Current Session Persistence --- export function persistCurrentSession() { if (!sessionsRef) { console.error('MARM: Sessions reference not set'); return false; } try { localStorage.setItem(CURRENT_SESSION_KEY, JSON.stringify(sessionsRef)); return true; } catch (e) { if (e.name === 'QuotaExceededError') { console.error('MARM: localStorage quota exceeded. Cannot save current session.', e); } else { console.error('MARM: Failed to persist current session:', e); } return false; } } export function restoreSessions() { if (!sessionsRef) { console.error('MARM: Sessions reference not set'); return; } try { const currentRaw = localStorage.getItem(CURRENT_SESSION_KEY); if (currentRaw) { const restored = JSON.parse(currentRaw); Object.keys(sessionsRef).forEach(key => delete sessionsRef[key]); Object.assign(sessionsRef, restored); } } catch (e) { console.error('MARM: Failed to restore current session:', e); Object.keys(sessionsRef).forEach(key => delete sessionsRef[key]); } const isPersistenceEnabled = localStorage.getItem('marm-persistence-enabled') === 'true'; if (isPersistenceEnabled) { try { const savedRaw = localStorage.getItem(LS_KEY); if (savedRaw) { const savedSessions = JSON.parse(savedRaw); Object.assign(sessionsRef, { ...savedSessions, ...sessionsRef }); } } catch (e) { console.error('MARM: Failed to restore saved sessions:', e); } } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Lyellr88/marm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server