Skip to main content
Glama

MCP Memory Service

migration.md10.6 kB
# ChromaDB to SQLite-vec Migration Guide This guide walks you through migrating your existing ChromaDB memories to the new SQLite-vec backend. > **⚠️ Important Update (v5.0.1):** We've identified and fixed critical migration issues. If you experienced problems with v5.0.0 migration, please use the enhanced migration script or update to v5.0.1. ## Why Migrate? SQLite-vec offers several advantages over ChromaDB for the MCP Memory Service: - **Lightweight**: Single file database, no external dependencies - **Faster startup**: No collection initialization overhead - **Better performance**: Optimized for small to medium datasets - **Simpler deployment**: No persistence directory management - **Cross-platform**: Works consistently across all platforms - **HTTP/SSE support**: New web interface only works with SQLite-vec ## Migration Methods ### Method 1: Automated Migration Script (Recommended) Use the provided migration script for a safe, automated migration: ```bash # Run the migration script python scripts/migrate_chroma_to_sqlite.py ``` The script will: - ✅ Check your existing ChromaDB data - ✅ Count all memories to migrate - ✅ Ask for confirmation before proceeding - ✅ Migrate memories in batches with progress tracking - ✅ Skip duplicates if running multiple times - ✅ Verify migration completed successfully - ✅ Provide next steps ### Method 2: Manual Configuration Switch If you want to start fresh with SQLite-vec (losing existing memories): ```bash # Set the storage backend to SQLite-vec export MCP_MEMORY_STORAGE_BACKEND=sqlite_vec # Optionally set custom database path export MCP_MEMORY_SQLITE_PATH=/path/to/your/memory.db # Restart MCP Memory Service ``` ## Step-by-Step Migration ### 1. Backup Your Data (Optional but Recommended) ```bash # Create a backup of your ChromaDB data cp -r ~/.mcp_memory_chroma ~/.mcp_memory_chroma_backup ``` ### 2. Run Migration Script ```bash cd /path/to/mcp-memory-service python scripts/migrate_chroma_to_sqlite.py ``` **Example Output:** ``` 🚀 MCP Memory Service - ChromaDB to SQLite-vec Migration ============================================================ 📂 ChromaDB source: /Users/you/.mcp_memory_chroma 📂 SQLite-vec destination: /Users/you/.mcp_memory/memory_migrated.db 🔍 Checking ChromaDB data... ✅ Found 1,247 memories in ChromaDB ⚠️ About to migrate 1,247 memories from ChromaDB to SQLite-vec 📝 Destination file: /Users/you/.mcp_memory/memory_migrated.db Proceed with migration? (y/N): y 🔌 Connecting to ChromaDB... 🔌 Connecting to SQLite-vec... 📥 Fetching all memories from ChromaDB... 🔄 Processing batch 1/25 (50 memories)... ✅ Batch 1 complete. Progress: 50/1,247 ... (migration progress) ... 🎉 Migration completed successfully! 📊 MIGRATION SUMMARY ==================================== Total memories found: 1,247 Successfully migrated: 1,247 Duplicates skipped: 0 Failed migrations: 0 Migration duration: 45.32 seconds ``` ### 3. Update Configuration After successful migration, update your environment: ```bash # Switch to SQLite-vec backend export MCP_MEMORY_STORAGE_BACKEND=sqlite_vec # Set the database path (use the path shown in migration output) export MCP_MEMORY_SQLITE_PATH=/path/to/memory_migrated.db ``` **For permanent configuration, add to your shell profile:** ```bash # Add to ~/.bashrc, ~/.zshrc, or ~/.profile echo 'export MCP_MEMORY_STORAGE_BACKEND=sqlite_vec' >> ~/.bashrc echo 'export MCP_MEMORY_SQLITE_PATH=/path/to/memory_migrated.db' >> ~/.bashrc ``` ### 4. Restart and Test ```bash # If using Claude Desktop, restart Claude Desktop application # If using MCP server directly, restart the server # Test that migration worked python scripts/verify_environment.py ``` ### 5. Enable HTTP/SSE Interface (Optional) To use the new web interface: ```bash # Enable HTTP server export MCP_HTTP_ENABLED=true export MCP_HTTP_PORT=8000 # Start HTTP server python scripts/run_http_server.py # Open browser to http://localhost:8000 ``` ## Configuration Reference ### Environment Variables | Variable | Description | Default | |----------|-------------|---------| | `MCP_MEMORY_STORAGE_BACKEND` | Storage backend (`chroma` or `sqlite_vec`) | `chroma` | | `MCP_MEMORY_SQLITE_PATH` | SQLite-vec database file path | `~/.mcp_memory/sqlite_vec.db` | | `MCP_HTTP_ENABLED` | Enable HTTP/SSE interface | `false` | | `MCP_HTTP_PORT` | HTTP server port | `8000` | ### Claude Desktop Configuration Update your `claude_desktop_config.json`: ```json { "mcpServers": { "memory": { "command": "uv", "args": [ "--directory", "/path/to/mcp-memory-service", "run", "memory" ], "env": { "MCP_MEMORY_STORAGE_BACKEND": "sqlite_vec", "MCP_MEMORY_SQLITE_PATH": "/path/to/memory_migrated.db" } } } } ``` ## Troubleshooting ### Common Migration Issues (v5.0.0) > **If you're experiencing issues with v5.0.0 migration, please use the enhanced migration script:** > ```bash > python scripts/migrate_v5_enhanced.py --help > ``` #### Issue 1: Custom Data Locations Not Recognized **Problem:** Migration script uses hardcoded paths and ignores custom ChromaDB locations. **Solution:** ```bash # Specify custom paths explicitly python scripts/migrate_chroma_to_sqlite.py \ --chroma-path /your/custom/chroma/path \ --sqlite-path /your/custom/sqlite.db # Or use environment variables export MCP_MEMORY_CHROMA_PATH=/your/custom/chroma/path export MCP_MEMORY_SQLITE_PATH=/your/custom/sqlite.db python scripts/migrate_chroma_to_sqlite.py ``` #### Issue 2: Content Hash Errors **Problem:** Migration fails with "NOT NULL constraint failed: memories.content_hash" **Solution:** This has been fixed in v5.0.1. The migration script now generates proper SHA256 hashes. If you encounter this: 1. Update to latest version: `git pull` 2. Use the enhanced migration script: `python scripts/migrate_v5_enhanced.py` #### Issue 3: Malformed Tags (60% Corruption) **Problem:** Tags become corrupted during migration, appearing as `['tag1', 'tag2']` instead of `tag1,tag2` **Solution:** The enhanced migration script includes tag validation and correction: ```bash # Validate existing migration python scripts/validate_migration.py /path/to/sqlite.db # Re-migrate with fix python scripts/migrate_v5_enhanced.py --force ``` #### Issue 4: Migration Hangs **Problem:** Migration appears to hang with no progress indication **Solution:** Use verbose mode and batch size control: ```bash # Run with progress indicators pip install tqdm # For progress bars python scripts/migrate_v5_enhanced.py --verbose --batch-size 10 ``` #### Issue 5: Dependency Conflicts **Problem:** SSL certificate errors, version conflicts with ChromaDB/sentence-transformers **Solution:** ```bash # Clean install dependencies pip uninstall chromadb sentence-transformers -y pip install --upgrade chromadb sentence-transformers # If SSL issues persist export REQUESTS_CA_BUNDLE="" export SSL_CERT_FILE="" ``` ### Validation and Recovery #### Validate Your Migration After migration, always validate the data: ```bash # Basic validation python scripts/validate_migration.py # Compare with original ChromaDB python scripts/validate_migration.py --compare --chroma-path ~/.mcp_memory_chroma ``` #### Recovery Options If migration failed or corrupted data: 1. **Restore from backup:** ```bash # If you created a backup python scripts/restore_memories.py migration_backup.json ``` 2. **Rollback to ChromaDB:** ```bash # Temporarily switch back export MCP_MEMORY_STORAGE_BACKEND=chroma # Your ChromaDB data is unchanged ``` 3. **Re-migrate with enhanced script:** ```bash # Clean the target database rm /path/to/sqlite_vec.db # Use enhanced migration python scripts/migrate_v5_enhanced.py \ --chroma-path /path/to/chroma \ --sqlite-path /path/to/new.db \ --backup backup.json ``` ### Getting Help If you continue to experience issues: 1. **Check logs:** Add `--verbose` flag for detailed output 2. **Validate data:** Use `scripts/validate_migration.py` 3. **Report issues:** [GitHub Issues](https://github.com/doobidoo/mcp-memory-service/issues) 4. **Emergency rollback:** Your ChromaDB data remains untouched ### Migration Best Practices 1. **Always backup first:** ```bash cp -r ~/.mcp_memory_chroma ~/.mcp_memory_chroma_backup ``` 2. **Test with dry-run:** ```bash python scripts/migrate_v5_enhanced.py --dry-run ``` 3. **Validate after migration:** ```bash python scripts/validate_migration.py ``` 4. **Keep ChromaDB data until confirmed:** - Don't delete ChromaDB data immediately - Test the migrated database thoroughly - Keep backups for at least a week **"Migration verification failed"** - Some memories may have failed to migrate - Check error summary in migration output - Consider re-running migration ### Runtime Issues **"Storage backend not found"** - Ensure `MCP_MEMORY_STORAGE_BACKEND=sqlite_vec` - Check that SQLite-vec dependencies are installed **"Database file not found"** - Verify `MCP_MEMORY_SQLITE_PATH` points to migrated database - Check file permissions ### Performance Comparison | Aspect | ChromaDB | SQLite-vec | |--------|----------|------------| | Startup time | ~2-3 seconds | ~0.5 seconds | | Memory usage | ~100-200MB | ~20-50MB | | Storage | Directory + files | Single file | | Dependencies | chromadb, sqlite | sqlite-vec only | | Scalability | Better for >10k memories | Optimal for <10k memories | ## Rollback Plan If you need to switch back to ChromaDB: ```bash # Switch back to ChromaDB export MCP_MEMORY_STORAGE_BACKEND=chroma unset MCP_MEMORY_SQLITE_PATH # Restart MCP Memory Service ``` Your original ChromaDB data remains unchanged during migration. ## Next Steps After successful migration: 1. ✅ Test memory operations (store, retrieve, search) 2. ✅ Try the HTTP/SSE interface for real-time updates 3. ✅ Update any scripts or tools that reference storage paths 4. ✅ Consider backing up your new SQLite-vec database regularly 5. ✅ Remove old ChromaDB data after confirming migration success ## Support If you encounter issues: 1. Check the migration output and error messages 2. Verify environment variables are set correctly 3. Test with a small subset of data first 4. Review logs for detailed error information The migration preserves all your data including: - Memory content and metadata - Tags and timestamps - Content hashes (for deduplication) - Semantic embeddings (regenerated with same model)

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