Skip to main content
Glama

MCP Memory Service

#!/bin/bash # Stash local memory changes to staging database before sync MAIN_DB="/Users/hkr/Library/Application Support/mcp-memory/sqlite_vec.db" STAGING_DB="/Users/hkr/Library/Application Support/mcp-memory/sqlite_vec_staging.db" HOSTNAME=$(hostname) echo "$(date): Stashing local changes..." if [ ! -f "$MAIN_DB" ]; then echo "$(date): No main database found at $MAIN_DB" exit 1 fi if [ ! -f "$STAGING_DB" ]; then echo "$(date): Staging database not found. Run ./init_staging_db.sh first" exit 1 fi # Get last sync timestamp from staging database LAST_SYNC=$(sqlite3 "$STAGING_DB" "SELECT value FROM sync_status WHERE key = 'last_local_sync';" 2>/dev/null || echo "") # If no last sync, get all memories from a reasonable time ago (7 days) if [ -z "$LAST_SYNC" ]; then LAST_SYNC="datetime('now', '-7 days')" else LAST_SYNC="'$LAST_SYNC'" fi echo "$(date): Looking for changes since: $LAST_SYNC" # Find memories that might be new/modified locally # Note: This assumes your sqlite_vec.db has a similar schema # We'll need to adapt this based on your actual schema # First, let's check the schema of the main database echo "$(date): Analyzing main database schema..." MAIN_SCHEMA=$(sqlite3 "$MAIN_DB" ".schema" 2>/dev/null | head -10) if [ $? -ne 0 ] || [ -z "$MAIN_SCHEMA" ]; then echo "$(date): ERROR: Cannot read main database schema" exit 1 fi echo "$(date): Main database schema detected" # For now, we'll create a simple approach that looks for memories # This will need to be customized based on your actual schema # Query to find recent memories (adjust based on actual schema) TEMP_QUERY_RESULT=$(mktemp) # Try different table names that might exist in sqlite_vec databases for TABLE in memories memory_entries memories_table memory_items; do if sqlite3 "$MAIN_DB" ".tables" | grep -q "^$TABLE$"; then echo "$(date): Found table: $TABLE" # Try to extract memories (adjust columns based on actual schema) sqlite3 "$MAIN_DB" " SELECT COALESCE(id, rowid) as id, content, COALESCE(content_hash, '') as content_hash, COALESCE(tags, '[]') as tags, COALESCE(metadata, '{}') as metadata, COALESCE(memory_type, 'note') as memory_type, COALESCE(created_at, datetime('now')) as created_at FROM $TABLE WHERE datetime(COALESCE(updated_at, created_at, datetime('now'))) > $LAST_SYNC LIMIT 100; " 2>/dev/null > "$TEMP_QUERY_RESULT" if [ -s "$TEMP_QUERY_RESULT" ]; then break fi fi done # Count changes found CHANGE_COUNT=$(wc -l < "$TEMP_QUERY_RESULT" | tr -d ' ') if [ "$CHANGE_COUNT" -eq 0 ]; then echo "$(date): No local changes found to stash" rm -f "$TEMP_QUERY_RESULT" exit 0 fi echo "$(date): Found $CHANGE_COUNT potential local changes" # Process each change and add to staging while IFS='|' read -r id content content_hash tags metadata memory_type created_at; do # Generate content hash if missing if [ -z "$content_hash" ]; then content_hash=$(echo -n "$content" | shasum -a 256 | cut -d' ' -f1) fi # Escape single quotes for SQL content_escaped=$(echo "$content" | sed "s/'/''/g") tags_escaped=$(echo "$tags" | sed "s/'/''/g") metadata_escaped=$(echo "$metadata" | sed "s/'/''/g") # Insert into staging database sqlite3 "$STAGING_DB" " INSERT OR REPLACE INTO staged_memories ( id, content, content_hash, tags, metadata, memory_type, operation, staged_at, original_created_at, source_machine ) VALUES ( '$id', '$content_escaped', '$content_hash', '$tags_escaped', '$metadata_escaped', '$memory_type', 'INSERT', datetime('now'), '$created_at', '$HOSTNAME' ); " if [ $? -eq 0 ]; then echo "$(date): Staged change: ${content:0:50}..." else echo "$(date): ERROR: Failed to stage change for ID: $id" fi done < "$TEMP_QUERY_RESULT" # Update sync status sqlite3 "$STAGING_DB" " UPDATE sync_status SET value = datetime('now'), updated_at = CURRENT_TIMESTAMP WHERE key = 'last_local_sync'; " # Show staging status STAGED_COUNT=$(sqlite3 "$STAGING_DB" "SELECT value FROM sync_status WHERE key = 'total_staged_changes';" 2>/dev/null || echo "0") echo "$(date): Stashing completed" echo "$(date): Total staged changes: $STAGED_COUNT" echo "$(date): New changes stashed: $CHANGE_COUNT" # Cleanup rm -f "$TEMP_QUERY_RESULT"

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/doobidoo/mcp-memory-service'

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