Skip to main content
Glama

Chat Context MCP

by aolshaun
SYNC-OPTIMIZATION.md3.81 kB
# Sync Optimization Implementation ## Summary Implemented smart sync system that only syncs sessions that have been updated, providing fast and efficient synchronization with Cursor's database. ## What Was Implemented ### 1. Efficient Change Detection (`CursorDB.getAllSessionTimestamps()`) - **Single SQL query** to get all session IDs with their `lastUpdatedAt` timestamps - Uses `json_extract(value, '$.lastUpdatedAt')` for efficient timestamp extraction - **Performance**: ~100ms for 1000 sessions ### 2. Database Schema Update - Added `last_synced_at` field to `session_metadata` table - Tracks when each session was last synced - Includes migration for existing databases ### 3. Smart Sync Logic (`syncSessions()`) - Only syncs sessions that: - Have never been synced before, OR - Have been updated since last sync (`lastUpdatedAt > last_synced_at`) - Skips unchanged sessions entirely ### 4. Auto-Sync with Staleness Check - Tracks last sync time in memory - Auto-syncs if data is >5 minutes old - Optional `syncFirst` parameter for manual control - Syncs 50 most recent sessions by default ## Performance Characteristics ### First Sync (Empty Cache) - 100 sessions: ~2-5 seconds - 1000 sessions: ~20-50 seconds - **One-time cost** ### Subsequent Syncs - **Check time**: ~100ms (single query for all timestamps) - **Sync time**: Only processes changed sessions - 10 changed out of 1000: ~1 second - 100 changed out of 1000: ~5-10 seconds - All unchanged: ~100ms (just the timestamp check) ### Auto-Sync Behavior - `list_sessions()` automatically syncs if: - Data is >5 minutes old, OR - User passes `syncFirst: true` - Default: Syncs 50 most recent sessions - **Typical response time**: 100ms-1s (cached) or 1-2s (with sync) ## API Usage ### Automatic (Recommended) ```typescript const api = new CursorContext(); // Auto-syncs if >5 min stale const sessions = await api.listSessions(); ``` ### Manual Control ```typescript // Force sync before listing const sessions = await api.listSessions({ syncFirst: true }); // Or sync explicitly await api.syncSessions(100); // Sync 100 most recent const sessions = await api.listSessions(); ``` ### Disable Auto-Sync ```typescript const api = new CursorContext(undefined, undefined, false); // Now you must manually call syncSessions() ``` ## How It Works 1. **On first call**: Syncs all sessions (slow) 2. **On subsequent calls**: - Checks if >5 minutes since last sync - If stale: Gets all session timestamps (fast query) - Compares with `last_synced_at` in cache - Only syncs changed sessions 3. **Result**: Always fresh data, minimal overhead ## Migration Notes - Existing databases automatically get `last_synced_at` column added - First sync after upgrade will sync all sessions (no `last_synced_at` yet) - After that, only changed sessions are synced ## Configuration ### Staleness Threshold Default: 5 minutes (`STALE_THRESHOLD_MS = 5 * 60 * 1000`) To modify, edit `src/core/api.ts`: ```typescript private readonly STALE_THRESHOLD_MS = 10 * 60 * 1000; // 10 minutes ``` ### Default Sync Limit Default: 50 most recent sessions To modify, edit the `listSessions()` call to `syncSessions()`: ```typescript await this.syncSessions(100); // Sync 100 instead of 50 ``` ## Testing After restarting the MCP server, test with: ```typescript // List sessions (should auto-sync if needed) await mcp.list_sessions({ project: '/path/to/project' }); // Force sync await mcp.list_sessions({ syncFirst: true }); ``` ## Files Modified 1. `src/core/cursor-db.ts` - Added `getAllSessionTimestamps()` 2. `src/core/metadata-db.ts` - Added `last_synced_at` field and migration 3. `src/core/types.ts` - Added `last_synced_at` to `SessionMetadata` 4. `src/core/api.ts` - Smart sync logic, staleness check, auto-sync

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/aolshaun/chat-context-mcp'

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