store_memoryLABSCO SUMMARY
Domain separation is the reason to pick the heavier build.
Both builds remember; only the PostgreSQL one keeps work, health and personal memory in separate contexts an agent can switch between, which is the difference between a memory store and a memory pile. Start on the SQLite image — one command, one directory — and move when you need isolation or concurrent access. Ollama is worth installing either way; without it, search is keyword-only.
What it is
A memory server you host yourself, in two interchangeable builds. The SQLite + FAISS build is a single directory with no database server. The PostgreSQL + pgvector build adds domain segmentation — separate memory contexts for work, health, personal — and concurrent access. Both expose the same core tools; both run as self-contained Docker images.
What you get
- Facts written into memory with an optional source and importance, indexed for semantic search as they land —
store_memory - Stored memories changed without losing their place in the index —
update_memory - Relevant memories retrieved by meaning or by keyword, with a limit you set —
search_memories - On the PostgreSQL build, separate contexts you can switch between and enumerate —
list_memory_domains, withdomainaccepted by the store and search calls - Memory reachable as a resource without a tool call:
memory://queryon SQLite,memory://domain/queryon PostgreSQL - A prompt that turns a set of retrieved memories into a structured summary —
summarize_memories - Graceful degradation: with Ollama present, search is vector-based; without it, the system falls back to text search rather than failing
Requirements
Docker, or Python 3.12+ for a local install. The quickest path is one command with a volume for your data — docker run --rm -i -v ./memory-data:/app/data cunicopia/local-memory-mcp:sqlite, or the :postgres tag, which brings its own database. Ollama with nomic-embed-text is optional but recommended; without it you get keyword search instead of semantic. Configuration is by environment: OLLAMA_API_URL (default http://localhost:11434), OLLAMA_EMBEDDING_MODEL, and MCP_DATA_DIR on SQLite. The PostgreSQL image runs its own database and already sets its password, so the Docker entry needs nothing extra. A manual PostgreSQL install needs POSTGRES_PASSWORD and takes DEFAULT_MEMORY_DOMAIN; in that case, change the example user and password in sql/create_user.sql — the repository says so in bold, twice.
Setup effort
One command — docker run --rm -i -v ./memory-data:/app/data cunicopia/local-memory-mcp:sqlite
USE CASES
Stopping an assistant from asking the same thing every session
Store preferences and project facts as they come up, with an importance value, and let search surface them next time instead of re-explaining.
Keeping personal and work context apart
On the PostgreSQL build, write into named domains and search within one, so a health note never surfaces in a work conversation.
Correcting something the memory has wrong
Update the stored entry in place — the search index follows the edit rather than keeping the stale version.
Getting a briefing out of scattered memories
Retrieve what is relevant, then use the summarise prompt to turn the set into a structured overview instead of a list.
4 tools
Listed in project docs. Your client may show a different list.
update_memorysearch_memorieslist_memory_domainsBEFORE YOU INSTALL
What to know first
Tools you get
4 tools named in the project's documentation.
INSTALLATION
Connect your client
Server setup
docker run --rm -i -v ./memory-data:/app/data cunicopia/local-memory-mcp:sqliteMCP Clients
Claude Desktop
{
"mcpServers": {
"localMemoryMCP-SQLite": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-v",
"<YOUR_PATH_TO_MEMORY_DATA>:/app/data",
"cunicopia/local-memory-mcp:sqlite"
]
},
"localMemoryMCP-PostgreSQL": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-v",
"<YOUR_PATH_TO_POSTGRES_DATA>:/var/lib/postgresql/data",
"cunicopia/local-memory-mcp:postgres"
]
}
}
}