mcp memory service
Provides semantic memory and persistent storage for Claude, leveraging ChromaDB and sentence transformers for enhanced search and retrieval capabilities.
Provides semantic memory and persistent storage for Claude, leveraging ChromaDB and sentence transformers for enhanced search and retrieval capabilities.
An MCP server providing semantic memory and persistent storage capabilities for Claude Desktop using ChromaDB and sentence transformers. This service enables long-term memory storage with semantic search capabilities, making it ideal for maintaining context across conversations and instances.
For the fastest way to get started:
# Install UV if not already installed
pip install uv
# Clone and install
git clone https://github.com/doobidoo/mcp-memory-service.git
cd mcp-memory-service
uv venv
source .venv/bin/activate # On Windows: .venvScriptsactivate
uv pip install -r requirements.txt
uv pip install -e .
# Run the service
uv run memory
The service can be run in a Docker container for better isolation and deployment:
# Build the Docker image
docker build -t mcp-memory-service .
# Run the container
# Note: On macOS, paths must be within Docker's allowed file sharing locations
# Default allowed locations include:
# - /Users
# - /Volumes
# - /private
# - /tmp
# - /var/folders
# Example with proper macOS paths:
docker run -it
-v $HOME/mcp-memory/chroma_db:/app/chroma_db
-v $HOME/mcp-memory/backups:/app/backups
mcp-memory-service
# For production use, you might want to run it in detached mode:
docker run -d
-v $HOME/mcp-memory/chroma_db:/app/chroma_db
-v $HOME/mcp-memory/backups:/app/backups
--name mcp-memory
mcp-memory-service
To configure Docker's file sharing on macOS: 1. Open Docker Desktop 2. Go to Settings (Preferences) 3. Navigate to Resources -> File Sharing 4. Add any additional paths you need to share 5. Click "Apply & Restart"
The service is configured for Smithery integration through smithery.yaml
. This configuration enables stdio-based communication with MCP clients like Claude Desktop.
To use with Smithery:
Ensure your claude_desktop_config.json
points to the correct paths:
{
"memory": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v", "$HOME/mcp-memory/chroma_db:/app/chroma_db",
"-v", "$HOME/mcp-memory/backups:/app/backups",
"mcp-memory-service"
],
"env": {
"MCP_MEMORY_CHROMA_PATH": "/app/chroma_db",
"MCP_MEMORY_BACKUPS_PATH": "/app/backups"
}
}
}
The smithery.yaml
configuration handles stdio communication and environment setup automatically.
To verify your Docker-based memory service is working correctly with Claude Desktop:
docker build -t mcp-memory-service .
mkdir -p $HOME/mcp-memory/chroma_db $HOME/mcp-memory/backups
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%Claudeclaude_desktop_config.json
~/.config/Claude/claude_desktop_config.json
MCP Memory Service initialization completed
If you experience any issues: - Check the Claude Desktop console for error messages - Verify Docker has the necessary permissions to access the mounted directories - Ensure the Docker container is running with the correct parameters - Try running the container manually to see any error output
For detailed installation instructions, platform-specific guides, and troubleshooting, see our documentation:
Add the following to your claude_desktop_config.json
file to use UV (recommended for best performance):
{
"memory": {
"command": "uv",
"args": [
"--directory",
"your_mcp_memory_service_directory", // e.g., "C:REPOSITORIESmcp-memory-service"
"run",
"memory"
],
"env": {
"MCP_MEMORY_CHROMA_PATH": "your_chroma_db_path", // e.g., "C:UsersJohn.DoeAppDataLocalmcp-memorychroma_db"
"MCP_MEMORY_BACKUPS_PATH": "your_backups_path" // e.g., "C:UsersJohn.DoeAppDataLocalmcp-memorybackups"
}
}
}
For Windows users, we recommend using the wrapper script to ensure PyTorch is properly installed. See our Windows Setup Guide for detailed instructions.
{
"memory": {
"command": "python",
"args": [
"C:pathtomcp-memory-servicememory_wrapper.py"
],
"env": {
"MCP_MEMORY_CHROMA_PATH": "C:UsersYourUsernameAppDataLocalmcp-memorychroma_db",
"MCP_MEMORY_BACKUPS_PATH": "C:UsersYourUsernameAppDataLocalmcp-memorybackups"
}
}
}
The wrapper script will: 1. Check if PyTorch is installed and properly configured 2. Install PyTorch with the correct index URL if needed 3. Run the memory server with the appropriate configuration
Platform | Architecture | Accelerator | Status |
---|---|---|---|
macOS | Apple Silicon (M1/M2/M3) | MPS | ✅ Fully supported |
macOS | Apple Silicon under Rosetta 2 | CPU | ✅ Supported with fallbacks |
macOS | Intel | CPU | ✅ Fully supported |
Windows | x86_64 | CUDA | ✅ Fully supported |
Windows | x86_64 | DirectML | ✅ Supported |
Windows | x86_64 | CPU | ✅ Supported with fallbacks |
Linux | x86_64 | CUDA | ✅ Fully supported |
Linux | x86_64 | ROCm | ✅ Supported |
Linux | x86_64 | CPU | ✅ Supported with fallbacks |
Linux | ARM64 | CPU | ✅ Supported with fallbacks |
The memory service provides the following operations through the MCP server:
store_memory
- Store new information with optional tagsretrieve_memory
- Perform semantic search for relevant memoriesrecall_memory
- Retrieve memories using natural language time expressions search_by_tag
- Find memories using specific tagsexact_match_retrieve
- Find memories with exact content matchdebug_retrieve
- Retrieve memories with similarity scoresFor detailed information about tag storage and management, see our Tag Storage Documentation.
create_backup
- Create database backupget_stats
- Get memory statisticsoptimize_db
- Optimize database performancecheck_database_health
- Get database health metricscheck_embedding_model
- Verify model statusdelete_memory
- Delete specific memory by hashdelete_by_tag
- Delete all memories with specific tagcleanup_duplicates
- Remove duplicate entriesConfigure through environment variables:
CHROMA_DB_PATH: Path to ChromaDB storage
BACKUP_PATH: Path for backups
AUTO_BACKUP_INTERVAL: Backup interval in hours (default: 24)
MAX_MEMORIES_BEFORE_OPTIMIZE: Threshold for auto-optimization (default: 10000)
SIMILARITY_THRESHOLD: Default similarity threshold (default: 0.7)
MAX_RESULTS_PER_QUERY: Maximum results per query (default: 10)
BACKUP_RETENTION_DAYS: Number of days to keep backups (default: 7)
LOG_LEVEL: Logging level (default: INFO)
# Hardware-specific environment variables
PYTORCH_ENABLE_MPS_FALLBACK: Enable MPS fallback for Apple Silicon (default: 1)
MCP_MEMORY_USE_ONNX: Use ONNX Runtime for CPU-only deployments (default: 0)
MCP_MEMORY_USE_DIRECTML: Use DirectML for Windows acceleration (default: 0)
MCP_MEMORY_MODEL_NAME: Override the default embedding model
MCP_MEMORY_BATCH_SIZE: Override the default batch size
If you encounter any issues: 1. Check our Troubleshooting Guide 2. Review the Installation Guide 3. For Windows-specific issues, see our Windows Setup Guide 4. Contact the developer via Telegram: t.me/doobeedoo
mcp-memory-service/
├── src/mcp_memory_service/ # Core package code
│ ├── __init__.py
│ ├── config.py # Configuration utilities
│ ├── models/ # Data models
│ ├── storage/ # Storage implementations
│ ├── utils/ # Utility functions
│ └── server.py # Main MCP server
├── scripts/ # Helper scripts
│ ├── convert_to_uv.py # Script to migrate to UV
│ └── install_uv.py # UV installation helper
├── .uv/ # UV configuration
├── memory_wrapper.py # Windows wrapper script
├── memory_wrapper_uv.py # UV-based wrapper script
├── uv_wrapper.py # UV wrapper script
├── install.py # Enhanced installation script
└── tests/ # Test suite
MIT License - See LICENSE file for details
[
{
"description": "Store new information with optional tags",
"inputSchema": {
"properties": {
"content": {
"type": "string"
},
"metadata": {
"properties": {
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"type": {
"type": "string"
}
},
"type": "object"
}
},
"required": [
"content"
],
"type": "object"
},
"name": "store_memory"
},
{
"description": "Find relevant memories based on query",
"inputSchema": {
"properties": {
"n_results": {
"default": 5,
"type": "number"
},
"query": {
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "retrieve_memory"
},
{
"description": "Search memories by tags",
"inputSchema": {
"properties": {
"tags": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"tags"
],
"type": "object"
},
"name": "search_by_tag"
}
]