loading…
Search for a command to run...
loading…
Self-hosted MCP memory server for personal use and teams
Self-hosted MCP memory server for personal use and teams
Quickstart • How It Works • MCP Tools • Configuration • Requirements • License
get_memory(id) only for what you
need, reducing token usage| Memlord | OpenMemory | mcp-memory-service | basic-memory | |
|---|---|---|---|---|
| Search | BM25 + vector + RRF | Vector only (Qdrant) | BM25 + vector + RRF | BM25 + vector |
| Embeddings | Local ONNX, zero config | OpenAI default; Ollama optional | Local ONNX, zero config | Local FastEmbed |
| Storage | PostgreSQL + pgvector | PostgreSQL + Qdrant | SQLite-vec / Cloudflare Vectorize | SQLite + Markdown files |
| Multi-user | ✅ | ❌ single-user in practice | ⚠️ agent-ID scoping, no isolation | ❌ |
| Workspaces | ✅ shared + personal, invite links | ⚠️ "Apps" namespace | ⚠️ tags + conversation_id | ✅ per-project flag |
| Authentication | ✅ OAuth 2.1 | ❌ none (self-hosted) | ✅ OAuth 2.0 + PKCE | ❌ |
| Web UI | ✅ browse, edit, export | ✅ Next.js dashboard | ✅ rich UI, graph viz, quality scores | ❌ local; cloud only |
| MCP tools | 10 | 5 | 15+ | ~20 |
| Self-hosted | ✅ single process | ✅ Docker (3 containers) | ✅ | ✅ |
| Memory input | Manual (explicit store) | Auto-extracted by LLM | Manual | Manual (Markdown notes) |
| Memory types | fact / preference / instruction / feedback | auto-extracted facts | — | observations + wiki links |
| Time-aware search | ✅ natural language dates | ⚠️ REST only, not in MCP tools | — | ✅ recent_activity |
| Token efficiency | ✅ progressive disclosure | ❌ | — | ✅ build_context traversal |
| Import / Export | ✅ JSON | ✅ ZIP (JSON + JSONL) | — | ✅ Markdown (human-readable) |
| License | AGPL-3.0 / Commercial | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
Where competitors have a real edge:
When to pick Memlord:
cp .env.example .env
docker compose up
# Install dependencies
uv sync --dev
# Download ONNX model (~23 MB)
uv run python scripts/download_model.py
# Run migrations
alembic upgrade head
# Start the server
memlord
Open http://localhost:8000 for the Web UI. The MCP endpoint is at /mcp.
STDIO mode runs the MCP server over stdin/stdout — no HTTP port, no OAuth. Ideal for local use with Claude Desktop or Claude Code.
Set MEMLORD_STDIO_USER_ID to your user ID (created after first HTTP login, or 1 for a fresh DB) so all memories are
scoped to your account.
pip install memlord
Create .mcp.json and adjust the paths and env vars:
{
"mcpServers": {
"memlord-local": {
"command": "python",
"args": [
"memlord",
"--stdio"
],
"env": {
"MEMLORD_DB_URL": "postgresql+asyncpg://postgres:postgres@localhost/memlord",
"MEMLORD_STDIO_USER_ID": "1"
}
}
}
}
Each search request runs BM25 and vector KNN in parallel, then merges results via Reciprocal Rank Fusion:
flowchart TD
Q([query]) --> BM25["BM25\nsearch_vector @@ websearch_to_tsquery"]
Q --> EMB["ONNX embed\nall-MiniLM-L6-v2 · 384d · local"]
EMB --> KNN["KNN\nembedding <=> query_vector\ncosine distance"]
BM25 --> RRF["RRF fusion\nscore = 1/(k+rank_bm25) + 1/(k+rank_vec)\nk=60"]
KNN --> RRF
RRF --> R([top-N results])
All settings use the MEMLORD_ prefix. See .env.example for the full list.
| Variable | Default | Description |
|---|---|---|
MEMLORD_DB_URL |
postgresql+asyncpg://postgres:postgres@localhost/memlord |
PostgreSQL connection URL |
MEMLORD_PORT |
8000 |
Server port |
MEMLORD_BASE_URL |
http://localhost:8000 |
Public URL for OAuth (HTTP mode) |
MEMLORD_OAUTH_JWT_SECRET |
memlord-dev-secret-please-change |
JWT signing secret (HTTP mode) |
MEMLORD_STDIO_USER_ID |
— | User ID to use in STDIO mode (required for stdio) |
In HTTP mode, set MEMLORD_BASE_URL to your public URL and change MEMLORD_OAUTH_JWT_SECRET before deploying.
In STDIO mode, OAuth is skipped — set MEMLORD_STDIO_USER_ID to your numeric user ID instead.
| Tool | Description |
|---|---|
store_memory |
Save a memory (idempotent by content); raises on near-duplicates |
retrieve_memory |
Hybrid semantic + full-text search; returns snippets by default |
recall_memory |
Search by natural-language time expression; returns snippets by default |
list_memories |
Paginated list with type/tag filters |
search_by_tag |
AND/OR tag search |
get_memory |
Fetch a single memory by ID with full content |
update_memory |
Update content, type, tags, or metadata by ID |
delete_memory |
Delete by ID |
move_memory |
Move a memory to a different workspace |
list_workspaces |
List workspaces you are a member of (including personal) |
Workspace management (create, invite, join, leave) is handled via the Web UI.
pyright src/ # type check
ruff format . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date
Memlord is dual-licensed:
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"memlord": {
"command": "npx",
"args": []
}
}
}