Mem0 Python SDK
Learn more · Join Discord · Demo
Mem0 gives AI assistants and agents persistent memory. It extracts useful facts from conversations, scopes them to a user, agent, or run, and retrieves the relevant facts for later interactions. The Python package includes MemoryClient for the hosted Mem0 Platform and Memory for open-source, in-process memory.
Requirements
- Python 3.10 or later
- Hosted Platform:
MEM0_API_KEYfrom the Mem0 dashboard - Open source with the default providers:
OPENAI_API_KEY
Install
pip install mem0ai
For enhanced hybrid search with BM25 keyword matching and entity extraction:
pip install "mem0ai[nlp]"
python -m spacy download en_core_web_sm
Platform or open source
Platform (MemoryClient) |
Open source (Memory) |
|
|---|---|---|
| Import | from mem0 import MemoryClient |
from mem0 import Memory |
| Where memories live | Mem0's hosted API | Your configured vector store |
| Required key | MEM0_API_KEY |
OPENAI_API_KEY with the defaults, or keys for your chosen providers |
| Extraction | Managed and asynchronous | Runs synchronously against your configured LLM |
| Best for | Zero-ops production use | Local development and custom infrastructure |
Platform quickstart
Set MEM0_API_KEY, then add a conversation:
import os
from mem0 import MemoryClient
client = MemoryClient(api_key=os.environ["MEM0_API_KEY"])
messages = [
{"role": "user", "content": "I am vegetarian and allergic to nuts."},
{"role": "assistant", "content": "I will remember that."},
]
result = client.add(messages, user_id="alex")
print(result)
Hosted add() queues extraction and usually returns an event_id with status: "PENDING". Do not search immediately after add(). Wait for processing to finish in the dashboard, or use a memory_add webhook, then search:
import os
from mem0 import MemoryClient
client = MemoryClient(api_key=os.environ["MEM0_API_KEY"])
results = client.search(
"What does Alex eat?",
filters={"user_id": "alex"},
top_k=5,
)
print(results["results"])
search() and get_all() take entity IDs inside filters. add() and delete_all() take user_id, agent_id, or run_id as top-level keyword arguments.
Open-source quickstart
Set OPENAI_API_KEY before using the default OpenAI LLM and embedder:
from mem0 import Memory
memory = Memory()
messages = [
{"role": "user", "content": "I am vegetarian and allergic to nuts."},
{"role": "assistant", "content": "I will remember that."},
]
memory.add(messages, user_id="alex")
results = memory.search(
"What does Alex eat?",
filters={"user_id": "alex"},
top_k=5,
)
print(results["results"])
The default Memory configuration uses OpenAI gpt-5-mini, OpenAI text-embedding-3-small, local Qdrant storage, and a SQLite history database. Pass a MemoryConfig or use Memory.from_config() to change the LLM, embedder, vector store, history path, or reranker.
Configuration and features
| Feature | Documentation |
|---|---|
Memory operations: add, search, get, get_all, update, delete, delete_all, history |
Python quickstart |
Entity scoping with user_id, agent_id, and run_id |
Entity-scoped memory |
| Metadata and filters | Metadata filtering |
Async clients: AsyncMemory and AsyncMemoryClient |
Async memory |
| LLMs, embedders, vector stores, and rerankers | Components |
| Graph memory | Graph memory |
| Custom instructions | Custom instructions |
| Multimodal input | Multimodal support |
| Platform webhooks, export, feedback, expiration, and custom categories | Platform features |
Benchmarks
Benchmarking Mem0's token-efficient memory algorithm
| Benchmark | Old | New | Tokens | Latency p50 |
|---|---|---|---|---|
| LoCoMo | 71.4 | 92.5 | 7.0K | 0.88s |
| LongMemEval | 67.8 | 94.4 | 6.8K | 1.09s |
| BEAM (1M) | n/a | 64.1 | 6.7K | 1.00s |
| BEAM (10M) | n/a | 48.6 | 6.9K | 1.05s |
All benchmarks use the same production-representative model stack, single-pass retrieval, and a top-200 retrieval budget. Scores reflect the managed Platform, which includes proprietary optimizations not available in the open-source SDK. Open-source results should show similar directional gains, but may not match these scores.
The current algorithm uses single-pass ADD-only extraction, first-class agent facts, entity linking, multi-signal retrieval, and temporal reasoning. Read the research paper, the migration guide, or the open-source evaluation framework.
Self-hosted server
Run Mem0 as a FastAPI service with PostgreSQL, pgvector, and Neo4j:
# Recommended: start the stack, create an admin, and issue the first API key.
cd server && make bootstrap
# Manual: start the stack, then finish setup in the browser wizard.
cd server && docker compose up -d
Self-hosted authentication is enabled by default. See the self-hosted documentation and upgrade notes.
CLI
Manage hosted memories from your terminal:
pip install mem0-cli
mem0 init
mem0 add "Prefers dark mode and vim keybindings" --user-id alice
mem0 search "What does Alice prefer?" --user-id alice
AI agents can create an account without email or a dashboard:
mem0 init --agent --agent-caller claude-code
The human owner can claim the account later with mem0 init --email <their-email>. The API key and memories remain unchanged. See the CLI documentation and agent signup guide.
Agent skills
Install reference skills to give compatible coding assistants Mem0 context:
npx skills add https://github.com/mem0ai/mem0 --skill mem0
npx skills add https://github.com/mem0ai/mem0 --skill mem0-cli
Install pipeline skills for end-to-end workflows:
npx skills add https://github.com/mem0ai/mem0 --skill mem0-integrate
npx skills add https://github.com/mem0ai/mem0 --skill mem0-test-integration
npx skills add https://github.com/mem0ai/mem0 --skill mem0-oss-to-platform
See the skills catalog or Vibecoding with Mem0.
Integrations and demos
Documentation and help
Contributing
Read CONTRIBUTING.md before opening an issue or pull request.
Citation
@article{mem0,
title={Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory},
author={Chhikara, Prateek and Khant, Dev and Aryan, Saket and Singh, Taranjeet and Yadav, Deshraj},
journal={arXiv preprint arXiv:2504.19413},
year={2025}
}
License
Apache 2.0. See LICENSE.