Memora is an MCP memory layer for AI agents: structured storage, semantic retrieval, graph relations, and source-backed cross-session context. It stores memories in SQLite with optional cloud sync (S3, R2, Cloudflare D1). Core capabilities include absorb (an LLM classifies each incoming fact against the store as duplicate / update / contradiction / related / new, skips duplicates, links relations, and consolidates related facts), supersession lineage (updates supersede old knowledge instead of deleting it, and retrieval follows the chain to the current version by default), memory_digest(topic) (bundles relevant memories, open TODOs/issues, related edges, and source IDs into one retrieval), semantic search over vector embeddings (TF-IDF, sentence-transformers, or OpenAI backends), LLM-powered deduplication, typed memory linking, structured document storage as searchable fragment trees, an interactive knowledge graph with a built-in live graph server and an optional Cloudflare Pages hosted graph, a RAG-powered chat panel with LLM tool calling, event notifications, statistics and insights, and action history. One process can serve multiple workspaces through the MEMORA_DATABASES registry, with clients selecting a store by URL path (/mcp/<name>).
Setup
Path 1 (pip, local stdio): 1) Run pip install memora-mcp (the PyPI package is memora-mcp; bare memora on PyPI is an unrelated project); for offline local embeddings, pip install "memora-mcp[local]" (~2GB for PyTorch). 2) Add "command": "memora-server" to .mcp.json in your project root, setting MEMORA_DB_PATH, MEMORA_ALLOW_ANY_TAG, MEMORA_GRAPH_PORT and other env vars as needed. 3) Restart your client.
Path 2 (container, HTTP service): the default runtime is Apple's container CLI, which needs Apple silicon and macOS 26. Run container system start; git clone the repo and cd into it; cp instances/example.env instances/myinstance.env and edit PORT plus a backend (STORAGE_URI, VOLUME, or MEMORA_DATABASES); create ~/.config/memora/credentials.mcp.json (an alternative path can be set via CRED_SOURCE) and chmod 600 it; copy scripts/memora_proxy.py to ~/.local/libexec/memora/; then run ./scripts/memora-instance.sh build myinstance, up myinstance, proxy myinstance and run the launchctl commands it prints. The workspace URL is http://127.0.0.1:<PORT>/mcp (append /<name> for a non-default store).
For Codex CLI, add an [mcp_servers.memora] section to ~/.codex/config.toml with command and env.
{"mcpServers":{"memora":{"command":"memora-server","args":[],"env":{"MEMORA_DB_PATH":"~/.local/share/memora/memories.db","MEMORA_ALLOW_ANY_TAG":"1","MEMORA_GRAPH_PORT":"8765"}}}}
Use cases
Share one persistent project memory across multiple agent sessions so context is not re-explained
Use memory_absorb to turn agent output into graph memory with lineage
Retrieve a topic's relevant memories, open TODOs/issues, and source IDs in one call with memory_digest(topic)
Semantically search large historical memory stores for relevant conclusions
Store research reports, architecture decisions, and post-mortems as fragment trees that are searchable claim by claim
Explore the relationship graph, timeline, and action history in the built-in graph UI
Ask questions about the memory store from the RAG chat panel and let the model create, update, or delete memories