Skip to main content
Glama

MCP Memory Service

#!/bin/bash # Enhanced remote sync with conflict awareness # Based on the working manual_sync.sh but with staging awareness DB_PATH="/Users/hkr/Library/Application Support/mcp-memory/sqlite_vec.db" STAGING_DB="/Users/hkr/Library/Application Support/mcp-memory/sqlite_vec_staging.db" REMOTE_BASE="http://narrowbox.local:8080/mcp-memory" BACKUP_PATH="/Users/hkr/Library/Application Support/mcp-memory/sqlite_vec.db.backup" TEMP_DIR="/tmp/litestream_pull_$$" echo "$(date): Starting enhanced pull from remote master..." # Create temporary directory mkdir -p "$TEMP_DIR" # Check if staging database exists if [ ! -f "$STAGING_DB" ]; then echo "$(date): WARNING: Staging database not found. Creating..." ./init_staging_db.sh fi # Get the latest generation ID GENERATION=$(curl -s "$REMOTE_BASE/generations/" | grep -o 'href="[^"]*/"' | sed 's/href="//;s/\/"//g' | head -1) if [ -z "$GENERATION" ]; then echo "$(date): ERROR: Could not determine generation ID" rm -rf "$TEMP_DIR" exit 1 fi echo "$(date): Found remote generation: $GENERATION" # Get the latest snapshot SNAPSHOT_URL="$REMOTE_BASE/generations/$GENERATION/snapshots/" SNAPSHOT_FILE=$(curl -s "$SNAPSHOT_URL" | grep -o 'href="[^"]*\.snapshot\.lz4"' | sed 's/href="//;s/"//g' | tail -1) if [ -z "$SNAPSHOT_FILE" ]; then echo "$(date): ERROR: Could not find snapshot file" rm -rf "$TEMP_DIR" exit 1 fi echo "$(date): Downloading snapshot: $SNAPSHOT_FILE" # Download and decompress snapshot curl -s "$SNAPSHOT_URL$SNAPSHOT_FILE" -o "$TEMP_DIR/snapshot.lz4" if ! command -v lz4 >/dev/null 2>&1; then echo "$(date): ERROR: lz4 command not found. Please install: brew install lz4" rm -rf "$TEMP_DIR" exit 1 fi lz4 -d "$TEMP_DIR/snapshot.lz4" "$TEMP_DIR/remote_database.db" 2>/dev/null if [ ! -f "$TEMP_DIR/remote_database.db" ]; then echo "$(date): ERROR: Failed to decompress remote database" rm -rf "$TEMP_DIR" exit 1 fi # Conflict detection: Check if we have staged changes that might conflict STAGED_COUNT=0 if [ -f "$STAGING_DB" ]; then STAGED_COUNT=$(sqlite3 "$STAGING_DB" "SELECT COUNT(*) FROM staged_memories WHERE conflict_status = 'none';" 2>/dev/null || echo "0") fi if [ "$STAGED_COUNT" -gt 0 ]; then echo "$(date): WARNING: $STAGED_COUNT staged changes detected" echo "$(date): Checking for potential conflicts..." # Create a list of content hashes in staging sqlite3 "$STAGING_DB" "SELECT content_hash FROM staged_memories;" > "$TEMP_DIR/staged_hashes.txt" # Check if any of these hashes exist in the remote database # Note: This requires knowledge of the remote database schema # For now, we'll just warn about the existence of staged changes echo "$(date): Staged changes will be applied after remote pull" fi # Backup current database if [ -f "$DB_PATH" ]; then cp "$DB_PATH" "$BACKUP_PATH" echo "$(date): Created backup at $BACKUP_PATH" fi # Replace with remote database cp "$TEMP_DIR/remote_database.db" "$DB_PATH" if [ $? -eq 0 ]; then echo "$(date): Successfully pulled database from remote master" # Update staging database with sync timestamp if [ -f "$STAGING_DB" ]; then sqlite3 "$STAGING_DB" " UPDATE sync_status SET value = datetime('now'), updated_at = CURRENT_TIMESTAMP WHERE key = 'last_remote_sync'; " fi # Remove backup on success rm -f "$BACKUP_PATH" # Show database info echo "$(date): Database size: $(du -h "$DB_PATH" | cut -f1)" echo "$(date): Database modified: $(stat -f "%Sm" "$DB_PATH")" if [ "$STAGED_COUNT" -gt 0 ]; then echo "$(date): NOTE: You have $STAGED_COUNT staged changes to apply" echo "$(date): Run ./apply_local_changes.sh to merge them" fi else echo "$(date): ERROR: Failed to replace database with remote version" # Restore backup on failure if [ -f "$BACKUP_PATH" ]; then mv "$BACKUP_PATH" "$DB_PATH" echo "$(date): Restored backup" fi rm -rf "$TEMP_DIR" exit 1 fi # Cleanup rm -rf "$TEMP_DIR" echo "$(date): Remote pull completed successfully"

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