Provides AI assistants with local-first graph memory using SQLite and semantic search to recall, connect, and learn from long-term context.
Also known as SimoneB79/memory-engine-mcp, memory-engine-mcp
- Stars
- 1
- Tools
- 36
- Downloads, 30 days
- —
- Latest version
- 1.5.3
- Last commit
- Oct 22, 2026
- License
- MIT
What is Memory Engine MCP?
Memory Engine provides AI assistants with local-first graph memory using SQLite and semantic search to recall, connect, and learn from long-term context. It exposes 36 tools, such as remember, recall, working_set.
Summary generated from the project's README
About Memory Engine MCP server
Providing AI assistants with long-term continuity is what Memory Engine MCP enables through a local-first graph memory system. It allows developers to give agents like Claude Desktop, Cursor, or Windsurf the ability to recall, connect, and learn from past interactions using a combination of SQLite and semantic search. By modeling information as typed atoms connected by typed bonds, the system moves beyond simple key-value storage to create a structured knowledge graph.
Users can deploy this server via Docker or local Python environments, connecting to MCP clients through SSE or stdio. The system utilizes SQLite FTS5 for full-text search and can integrate with local Ollama embeddings using the nomic-embed-text model for meaning-based retrieval. It includes specialized tools for managing memory health, such as the curator_run for maintenance and error_log for recording mistakes. This setup ensures that context remains relevant through decay cycles and automated duplicate detection without requiring cloud-based API keys.
What you can do with it
- 1Maintain long-term project contextAsk your AI assistant to retrieve specific architectural decisions or project facts from previous sessions.
- 2Organize knowledge into a graphHave the assistant create relationships between different pieces of information to build a structured knowledge base.
Written from the project's README. Every use case is checked against a quote from it.
How to install Memory Engine MCP
Formats verified 10 Nov 2026Install Memory Engine MCP in Claude Code
$ claude mcp add memory-engine-mcp -- docker run -i --rm ghcr.io/simoneb79/memory-engine-mcp:1.5.3Install Memory Engine MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"memory-engine-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/simoneb79/memory-engine-mcp:1.5.3"
]
}
}
}Install Memory Engine MCP in VS Code
.vscode/mcp.json
{
"servers": {
"memory-engine-mcp": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/simoneb79/memory-engine-mcp:1.5.3"
]
}
}
}Install Memory Engine MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"memory-engine-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/simoneb79/memory-engine-mcp:1.5.3"
]
}
}
}Install Memory Engine MCP in Codex
~/.codex/config.toml
[mcp_servers.memory-engine-mcp] command = "docker" args = ["run", "-i", "--rm", "ghcr.io/simoneb79/memory-engine-mcp:1.5.3"]
Install Memory Engine MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"memory-engine-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/simoneb79/memory-engine-mcp:1.5.3"
]
}
}
}Memory Engine MCP tools 36
Detected from the READMErememberrecallworking_setsemantic_searchget_atomlist_atomsmerge_atomsexport_atomsearch_graphsuggest_bondssuggest_bonds_allcurator_run
| remember | — | |
| recall | — | |
| working_set | — | |
| semantic_search | — | |
| get_atom | — | |
| list_atoms | — | |
| merge_atoms | — | |
| export_atom | — | |
| search_graph | — | |
| suggest_bonds | — | |
| suggest_bonds_all | — | |
| curator_run | — |
Show all 36 toolsShow fewer tools
cognitive_statuslearning_rundecay_runcleanup_sessionscleanup_duplicatesreindex_embeddingserror_checkerror_logerror_listpreference_searchimport_markdownmemory_summarystatsversionrecall_sessionsession_summarymemory_contradictlist_contradictionsclassify_memory_tiermemory_impactbackup_databaserestore_databaseexport_allimport_data
| cognitive_status | — | |
| learning_run | — | |
| decay_run | — | |
| cleanup_sessions | — | |
| cleanup_duplicates | — | |
| reindex_embeddings | — | |
| error_check | — | |
| error_log | — | |
| error_list | — | |
| preference_search | — | |
| import_markdown | — | |
| memory_summary | — | |
| stats | — | |
| version | — | |
| recall_session | — | |
| session_summary | — | |
| memory_contradict | — | |
| list_contradictions | — | |
| classify_memory_tier | — | |
| memory_impact | — | |
| backup_database | — | |
| restore_database | — | |
| export_all | — | |
| import_data | — |
Configuration
MARKDOWN_SOURCEOptional directory for one-way markdown import.
MEMORY_API_TOKENMEMORY_DB_PATHSQLite database path inside the container.
MEMORY_PORTSSE server port. Default: 8085.
| Name | Description | |
|---|---|---|
| MARKDOWN_SOURCE | Optional directory for one-way markdown import. | |
| MEMORY_API_TOKEN | — | |
| MEMORY_DB_PATH | SQLite database path inside the container. | |
| MEMORY_PORT | SSE server port. Default: 8085. |
Automated checks
Ran Nov 12, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)Pass
- Commit or release in the last yearPass
- Package name not close to a popular packageNot checked
- Remote endpoint uses HTTPSNot checked
- Destructive tools are labelledPass
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesNot checked
README
View on GitHubWhy Memory Engine?
Most MCP memory servers are either simple key-value stores or plain text search wrappers.
Memory Engine is different: it models memory as typed atoms connected by typed bonds, then retrieves context with a hybrid ranking pipeline that combines:
- full-text search (SQLite FTS5)
- semantic similarity via local Ollama embeddings
- confidence, recency, and weight
- graph expansion from related memories
The goal is not just storage. The goal is a memory system that can recall, connect, decay, curate, and learn over time.
Highlights
- Local-first — SQLite database, optional local embeddings via Ollama, no required cloud API.
- MCP-native — exposes 35 tools through FastMCP.
- Graph-aware recall — expands top hits through bidirectional bonds for richer context.
- Semantic search — meaning-based retrieval with
nomic-embed-text. - Markdown coexistence — import existing notes one-way without replacing your human-readable memory.
- Error memory — remembers mistakes and corrections, with auto-promotion to preferences after repeated failures.
- Cognitive curator — non-destructive maintenance pass for compaction, bond suggestions, duplicate detection, and isolated atom classification.
- Session watcher — canonical OpenClaw SQLite ingestion (schema 17), reset-aware digests, and JSONL legacy fallback.
- Backup & restore — full SQLite snapshots, JSON export/import, verified restores with automatic safety backups.
- Auth & hardening — optional API token, secure bind, input validation, rate limiting.
- Test suite — 144 tests covering CRUD, ranking, migrations, auth, backup, concurrency, and transcript ingestion.
- Benchmark — CLI recall quality suite with Precision@K, MRR, latency percentiles.
Architecture
AI assistant / MCP client
│
▼
FastMCP server — 35 tools
│
▼
Memory engine — hybrid ranking, graph recall, decay, learning
│
├── SQLite — atoms, bonds, FTS5, JSON metadata, versions
├── Ollama — optional local embeddings
├── Curator — conservative maintenance
└── Session watcher — OpenClaw SQLite + JSONL fallback
MCP Tools
Memory
| Tool | Purpose |
|---|---|
remember |
Create or update an atom |
recall |
Smart hybrid recall with graph expansion |
working_set |
Build a task-oriented context pack |
semantic_search |
Pure semantic search |
get_atom |
Read one atom with bonds |
list_atoms |
Browse atoms by domain/type/status |
merge_atoms |
Merge duplicate atoms |
export_atom |
Export one atom as markdown |
Knowledge graph
| Tool | Purpose |
|---|---|
link / unlink |
Create or remove typed bonds |
search_graph |
Traverse the graph from one atom |
suggest_bonds |
Suggest bonds for one atom |
suggest_bonds_all |
Suggest or create bonds in bulk |
Learning and maintenance
| Tool | Purpose |
|---|---|
curator_run |
Conservative curation pass |
cognitive_status |
Graph and memory health metrics |
learning_run |
Detect contradictions, weak atoms, merge candidates, gaps |
ask_pending / answer_human |
Human-in-the-loop clarification |
decay_run |
Run decay cycle |
cleanup_sessions |
Remove expired session atoms |
cleanup_duplicates |
Remove duplicate session atoms |
reindex_embeddings |
Rebuild embeddings |
Error memory and preferences
| Tool | Purpose |
|---|---|
error_check |
Check past failures before doing a task |
error_log |
Record a mistake and the correction |
error_list |
Browse unresolved/resolved errors |
preference_search |
Search structured preferences |
Import and introspection
| Tool | Purpose |
|---|---|
import_markdown |
Import markdown notes into atoms |
memory_summary |
3-level summary: global → domain → detail |
stats |
Database statistics |
version |
Server version |
recall_session |
Search one OpenClaw session |
session_summary |
Summarize one OpenClaw session |
memory_contradict |
Supersede an old atom with a newer contradictory one |
list_contradictions |
List explicit contradiction/supersession records |
classify_memory_tier |
Infer the 3-tier class (episodic/semantic/procedural) |
memory_impact |
Impact analysis: what depends on this atom |
Backup, restore & export
| Tool | Purpose |
|---|---|
backup_database |
Create, list, verify, or clean up SQLite snapshots |
restore_database |
Restore from a backup (with automatic safety backup) |
export_all |
Export all memory data as portable JSON |
import_data |
Import from JSON (merge or replace mode) |
Web UI (optional)
Memory Engine includes an optional web UI for graph exploration, atom inspection, contradiction browsing, and impact analysis.
# In docker-compose.yml, add:
# environment:
# - MEM_UI_PORT=6000
# expose:
# - "6000"
Or run standalone:
python3 web_ui.py
# Open http://localhost:6000
Quick start with Docker
Option A — Use the pre-built image (recommended)
# docker-compose.yml
services:
memory-engine:
image: ghcr.io/simoneb79/memory-engine-mcp:2.1.0
ports:
- "8085:8085"
volumes:
- memory-data:/data
restart: unless-stopped
volumes:
memory-data:
docker compose up -d
Pin the version. Use an explicit tag like
:1.7.0in production. Avoid:latest— it can change without notice.
Option B — Build from source
git clone https://github.com/SimoneB79/memory-engine-mcp.git
cd memory-engine-mcp
cp docker-compose.yml docker-compose.local.yml
# Edit volume paths in docker-compose.local.yml if needed
docker compose -f docker-compose.local.yml up -d --build
Default endpoint:
http://localhost:8085/sse
Example MCP client config:
{
"mcpServers": {
"memory-engine": {
"url": "http://localhost:8085/sse",
"transport": "sse"
}
}
}
See docs/INSTALL.md for Docker, local Python, Claude Desktop, Cursor, and OpenClaw examples.
Local Python
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python server.py
Configuration
Main configuration file: config.json
Important environment variables:
| Variable | Default | Purpose |
|---|---|---|
MEMORY_DB_PATH |
/data/memory.db |
SQLite database path |
MARKDOWN_SOURCE |
/workspace/memory |
Markdown directory for import |
MEMORY_HOST |
127.0.0.1 |
Server bind address (secure default) |
MEMORY_PORT |
8085 |
SSE port |
MEMORY_API_TOKEN |
(none) | Optional API token for auth (see Security) |
OPENCLAW_AGENT_DB |
(none) | Preferred per-agent OpenClaw SQLite DB (schema 17) |
OPENCLAW_SESSIONS_DIR |
/sessions |
Legacy JSONL fallback when no agent DB is configured |
SESSION_DIGEST_DIR |
/data/session_digests |
Optional session digest output |
For the SQLite mount, WAL/SHM handling, filtering, and security boundary, see OpenClaw transcript ingestion.
Semantic search requires Ollama reachable from the container or host. Default:
{
"ollama": {
"enabled": true,
"host": "http://ollama:11434",
"model": "nomic-embed-text"
}
}
If you do not use Ollama, set ollama.enabled to false; FTS recall still works.
Memory model
Atoms have:
titlebodytype:fact,decision,event,preference,log,procedure,note, etc.domain: project or topic namespaceconfidenceweighttags- optional TTL
Bonds connect atoms with relation types:
is_a · part_of · depends_on · contradicts · refines · derived_from · detail_of · related_to
Example usage
remember(
title="Use PostgreSQL for analytics",
body="SQLite is kept for local memory, PostgreSQL is used for multi-user analytics.",
type="decision",
domain="project:analytics",
confidence=0.9,
tags=["database", "architecture"]
)
recall(query="what database did we choose for analytics?", limit=5)
working_set(
query="continue the analytics backend work",
domain="project:analytics",
limit=8,
graph_depth=1
)
Security
By default, Memory Engine runs in open mode (no auth) — safe for stdio or trusted local environments.
To enable API token auth:
// config.json
{
"security": {
"api_token": "your-secret-token",
"allow_remote": false
}
}
Or via environment variable:
MEMORY_API_TOKEN=your-secret-token
When auth is enabled:
- MCP SSE requests must include
Authorization: Bearer <token> - Web UI API endpoints require
?token=<token>or Bearer header - Server binds to
127.0.0.1unlessallow_remote: true - Input validation (title/body size limits) and rate limiting are always active
See CHANGELOG.md for the full list of security features.
Publishing and registries
This repository is prepared for MCP discovery:
- MCP Registry name:
io.github.simoneb79/memory-engine-mcp - Registry metadata:
server.json - Docker/OCI verification label: included in
Dockerfile - Client config example:
mcp.json
See docs/PUBLISHING.md for the publication checklist.
Repository status
- Public GitHub repository: https://github.com/SimoneB79/memory-engine-mcp
- Existing listing: https://mcpmarket.com/server/memory-engine
- License: MIT
License
MIT — see LICENSE.
Memory Engine MCP questions
How do I add Memory Engine MCP to Claude Code?
Run claude mcp add memory-engine-mcp -- docker run -i --rm ghcr.io/simoneb79/memory-engine-mcp:1.5.3 in your terminal. Add --scope user to make it available in every project.
How do I add Memory Engine MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does Memory Engine MCP provide?
It exposes 36 tools, including remember, recall, working_set, semantic_search, get_atom.
Does Memory Engine require a cloud API?
No, it is a local-first system using a SQLite database and optional local embeddings via Ollama, requiring no cloud API.
Can I use my existing Markdown notes?
Yes, you can import existing notes one-way into the memory system without replacing your human-readable files.
Is there a way to visualize the memory graph?
Yes, an optional web UI is available for graph exploration, atom inspection, and impact analysis.