Memlord
Utilizes PostgreSQL with the pgvector extension as the primary storage backend to provide persistent memory storage, full-text search, and vector-based semantic retrieval.
โจ Features
๐ Hybrid search โ BM25 (full-text) + vector KNN (pgvector) fused via Reciprocal Rank Fusion
๐ Multi-user โ each user sees only their own memories; workspaces for shared team knowledge
๐ ๏ธ 10 MCP tools โ store, retrieve, recall, list, search by tag, get, update, delete, move, list workspaces
๐ Web UI โ browse, search, edit and delete memories in the browser; export/import JSON
๐ OAuth 2.1 โ full in-process authorization server, always enabled
๐ PostgreSQL โ pgvector for embeddings, tsvector for full-text search
๐ Progressive disclosure โ search returns compact snippets by default; call
get_memory(id)only for what you need, reducing token usage๐ Deduplication โ automatically detects near-identical memories before saving, preventing noise accumulation
Related MCP server: Memory MCP Server
๐ How Memlord compares
Memlord | ||||
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:
OpenMemory โ auto-extracts memories from raw conversation text; no need to decide what to store manually; good import/export
mcp-memory-service โ richer web UI (graph visualization, quality scoring, 8 tabs); more permissive license (Apache 2.0); multiple transport options (stdio, SSE, HTTP)
basic-memory โ memories are human-readable Markdown files you can edit, version-control, and read without any server; wiki-style entity links form a local knowledge graph; ~20 MCP tools
When to pick Memlord:
You want zero-config local embeddings โ ONNX model ships with the server, no Ollama or external API needed
You run a multi-user team server with proper OAuth 2.1 auth and invite-based workspaces
You want a production-grade database (PostgreSQL) that scales beyond a single machine's SQLite
You manage memories explicitly โ store exactly what matters, typed and tagged, not everything the LLM decides to extract
You want a self-hosted Web UI with full CRUD and JSON export, without a cloud subscription
๐ Quickstart
๐ณ Docker
cp .env.example .env
docker compose upHTTP server (multi-user, Web UI, OAuth)
# 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
memlordOpen http://localhost:8000 for the Web UI. The MCP endpoint is at /mcp.
STDIO (local single-user, no OAuth)
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 memlordCreate .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"
}
}
}
}๐ How It Works
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])โ๏ธ Configuration
All settings use the MEMLORD_ prefix. See .env.example for the full list.
Variable | Default | Description |
|
| PostgreSQL connection URL |
|
| Server port |
|
| Public URL for OAuth (HTTP mode) |
|
| JWT signing secret (HTTP mode) |
| โ | 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.
๐ ๏ธ MCP Tools
Tool | Description |
| Save a memory (idempotent by content); raises on near-duplicates |
| Hybrid semantic + full-text search; returns snippets by default |
| Search by natural-language time expression; returns snippets by default |
| Paginated list with type/tag filters |
| AND/OR tag search |
| Fetch a single memory by ID with full content |
| Update content, type, tags, or metadata by ID |
| Delete by ID |
| Move a memory to a different workspace |
| List workspaces you are a member of (including personal) |
Workspace management (create, invite, join, leave) is handled via the Web UI.
๐ป System Requirements
Python 3.12
PostgreSQL โฅ 15 with pgvector extension
uv โ Python package manager
๐จโ๐ป Development
pyright src/ # type check
black . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date๐ License
Memlord is dual-licensed:
AGPL-3.0 โ free for open-source use. If you run a modified version as a network service, you must publish your source code.
Commercial License โ for proprietary or closed-source deployments. Contact sergey@memlord.com or dmitry@memlord.com to purchase.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MyrikLD/memlord'
If you have feedback or need assistance with the MCP directory API, please join our Discord server