626
Engram is a self-hosted Model Context Protocol server that gives AI agents persistent memory across sessions and projects. Markdown files as source of truth, hybrid keyword + semantic search, typed graph relations.
GitHub: veronchenko/engram-memory · Website: veronchenko.github.io/engram-memory
Agent conversations end and take their context with them. Engram is the piece that survives: a knowledge base an agent searches before acting and writes to after resolving something non-obvious, so the next session — same project or a different one — starts with what was already learned instead of re-deriving it.
It deliberately stores zero discoverable information. If a fact can be pulled from code, git history, config files, or existing docs, it does not belong in Engram. What belongs is the kind of knowledge a conversation would otherwise lose: a decision and the alternatives it ruled out, a bug's root cause and fix, a procedure learned the hard way, a preference stated once that should hold from then on.
kb://uuid#type links between entries, resolved both directions (outgoing + backlinks) on every recallhub, decision, diagnostic, feature, procedure, integration, pattern, snippet, preference, idea — declared in schema.json, exposed to the client as an enumdoctor integrity pass — schema-driven check over the Markdown files for dangling links, undeclared types, missing template fieldsremember(..., supersede=True) creates a new version instead of overwriting; old versions stay in historyremember matches near-identical titles and returns embedding-similarity suggested_linksrebuild, no data is ever lostYour agent manages the server. Recommended for Claude Code, ChatGPT Desktop, Cursor.
claude mcp add --transport stdio engram -- \
docker run -i --rm -v ./knowledge:/knowledge foreigndmitryi/engram
Persistent server on the network. Share knowledge across multiple agents.
docker run -d --name engram \
-p 8192 \
-v ./knowledge:/knowledge \
foreigndmitryi/engram --transport sse
docker port engram 8192 # host port Docker assigned
claude mcp add --transport sse engram http://your-host:<port>/sse
Stateless, load-balanceable.
docker run -d --name engram \
-p 8192 \
-v ./knowledge:/knowledge \
foreigndmitryi/engram --transport streamable-http
docker port engram 8192
claude mcp add --transport http engram http://your-host:<port>/mcp
| Tool | Description |
|---|---|
remember | Create or update an entry (upsert with duplicate detection, or version it via supersede) |
recall | Read an entry with its graph relations (outgoing + backlinks) |
search | Hybrid keyword + semantic search, filterable by tags/type/part_of |
list | Browse entries sorted by title, filterable by tags/type/part_of |
tags | List all tags with entry counts |
forget | Delete an entry (file and index) |
rebuild | Rebuild search index from Markdown files; also runs doctor |
doctor | Check every entry against schema.json for structural issues |
All options have ENGRAM_* environment variable fallbacks. CLI args take priority.
| Option | Env var | Default | Description |
|---|---|---|---|
--data-path | ENGRAM_DATA_PATH | /knowledge | Root path for knowledge data |
--transport | ENGRAM_TRANSPORT | stdio | MCP transport |
--host | ENGRAM_HOST | 0.0.0.0 | Listen address (SSE/HTTP) |
--port | ENGRAM_PORT | 8192 | Listen port (SSE/HTTP) |
--embedding-model | ENGRAM_EMBEDDING_MODEL | minishlab/potion-multilingual-128M | Model2Vec model for semantic search |
| — | ENGRAM_ENABLE_DASHBOARD | unset (off) | Truthy starts the dashboard as a second process |
See the full README for multi-tenant setup, the dashboard, benchmark results against a plain Markdown wiki, and comparison with Mem0/Zep-Graphiti/LangMem.
Content type
Image
Digest
sha256:63b4f165b…
Size
1 GB
Last updated
about 2 months ago
docker pull foreigndmitryi/engram