A personal semantic memory system — store, search, and manage memories locally with vector embeddings
Project description
recall
A personal semantic memory system. Store, search, and manage memories locally using vector embeddings.
Everything runs on your machine: FastAPI server, Qdrant vector database (Docker), and Ollama for local embeddings. Zero cost, full privacy.
Install
From PyPI
pip install recall-cli
From Homebrew
brew tap anelcanto/recall-cli
brew install recall-cli
From source
git clone https://github.com/anelcanto/recall.git
cd recall
./install.sh
Or the quick version:
make install
Prerequisites
- Docker — runs Qdrant vector database
- Ollama — local embeddings (
brew install ollama && ollama pull nomic-embed-text) - uv — Python package manager (
brew install uv)
Quick start
# One-time setup (creates ~/.recall/.env, starts Qdrant)
recall init
# Start the API server (in a terminal, keep it running)
recall serve
# In another terminal
recall add "The quick brown fox" --tag test
recall search "fox"
recall list
recall status
CLI
recall init # Set up config + start Qdrant
recall serve [--host 127.0.0.1] [--port 8100] [--no-qdrant] # Start API server
recall add "text" --tag work --source cli [--dedupe-key "..."]
recall search "query" --top-k 10 [--no-text] [--output table|json]
recall ingest <file> [--format lines|jsonl] [--source name] [--auto-dedupe]
recall list [--limit 20] [--cursor ...] [--output table|json]
recall delete <id>
recall status
Environment variables
| Variable | Default | Description |
|---|---|---|
RECALL_API_URL |
http://127.0.0.1:8100 |
API server URL |
RECALL_API_TOKEN |
(none) | Bearer token for auth |
Architecture
recall CLI --> FastAPI server (:8100) --> Qdrant (Docker :6333)
|
v
Ollama (:11434)
nomic-embed-text
- FastAPI serves the HTTP API
- Qdrant stores vectors and payloads
- Ollama generates embeddings locally using
nomic-embed-text - CLI talks to the API over HTTP
User config lives in ~/.recall/.env. Qdrant data persists in a Docker volume.
API endpoints
| Method | Path | Description |
|---|---|---|
POST |
/memory |
Store a memory |
POST |
/search |
Semantic search |
POST |
/ingest |
Batch import |
GET |
/memories |
List with pagination |
DELETE |
/memory/{id} |
Delete a memory |
GET |
/health |
Service health check |
Claude Code Plugin
recall ships as a Claude Code plugin — Claude can store and search your memories directly during conversations, with no manual CLI commands needed.
Install via Claude Code plugin marketplace (recommended)
/plugin marketplace add anelcanto/recall
/plugin install recall@recall
That's it. Claude Code handles everything else.
Install manually (MCP only)
If you prefer to wire up just the MCP server without the plugin system:
pip install recall-cli
Then add it to .mcp.json at your project root:
{
"mcpServers": {
"recall": {
"type": "stdio",
"command": "recall-mcp"
}
}
}
Prerequisites
recall serve must be running before Claude can use the MCP tools:
recall serve
Available MCP tools
| Tool | Description |
|---|---|
store_memory(text, tags?, source?, dedupe_key?) |
Store a new memory. Returns ID. |
search_memories(query, top_k?) |
Semantic search. Returns scored results. |
list_memories(limit?) |
List recent memories. |
delete_memory(memory_id) |
Delete a memory by ID. |
check_health() |
Check if recall API, Qdrant, and Ollama are up. |
Usage examples
Once connected, just talk to Claude naturally:
"Remember that I prefer using uv for Python projects"
→ Claude calls store_memory(...)
"What do you know about my React setup?"
→ Claude calls search_memories("React setup")
"Show me all my memories"
→ Claude calls list_memories()
"Forget the last thing you stored"
→ Claude calls delete_memory(id)
Check for updates
From the terminal:
# Refresh the marketplace index first
claude plugin marketplace update recall
# Then update the plugin
claude plugin update recall@recall
Or from inside Claude Code, use the /recall:update command to check for a newer version on PyPI and upgrade.
Configuration
The MCP server reads config from ~/.recall/.env (created by recall init) and respects the same environment variables as the CLI:
| Variable | Default | Description |
|---|---|---|
RECALL_API_URL |
http://127.0.0.1:8100 |
API server URL |
RECALL_API_TOKEN |
(none) | Bearer token for auth |
Development
make test # Unit tests (no services needed)
make test-integration # Integration tests (Qdrant + Ollama required)
make test-degraded # Degraded mode tests (Qdrant only)
make test-all # All tests
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file recall_cli-0.3.2.tar.gz.
File metadata
- Download URL: recall_cli-0.3.2.tar.gz
- Upload date:
- Size: 138.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73aef68166543c4073d39d0227d48af06a621ced5dfda0295da7e02a6ac1396e
|
|
| MD5 |
71761f26b668f637d0cec1e1388baad7
|
|
| BLAKE2b-256 |
3cf211866ad83bf57d3f406ddbf4eb188ddebecfe06011114dfe2c5a90b9b99e
|
File details
Details for the file recall_cli-0.3.2-py3-none-any.whl.
File metadata
- Download URL: recall_cli-0.3.2-py3-none-any.whl
- Upload date:
- Size: 20.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b29f6f2e18f0db49283a3f9fe52fab5436577b65b30eaa35e40b717189b66625
|
|
| MD5 |
1c8ef041c70d0818775e4096f3358549
|
|
| BLAKE2b-256 |
cf811f549031a326ae59951deec61b103dc0788165de90704682db5194990d08
|