Memlord
Memlord is a self-hosted, multi-user MCP memory server with hybrid search, typed memory management, and workspace support via an MCP API and web UI (backed by PostgreSQL + pgvector).
Store memories (
store_memory): Save typed memories (fact,preference,instruction,feedback,decision) with tags, metadata, and workspace assignment. Includes automatic near-duplicate detection.Hybrid search (
retrieve_memory): Semantic (vector KNN) + full-text (BM25) search fused via Reciprocal Rank Fusion, with filtering by memory type, workspace, and similarity threshold. Returns compact snippets by default.Time-based search (
recall_memory): Find memories using natural-language time expressions (e.g., "last week", "about Python last month") combined with semantic search.Fetch a memory (
get_memory): Retrieve full content of a specific memory by numeric ID.List memories (
list_memories): Paginated listing ordered by creation date, filterable by type or tag.Tag search (
search_by_tag): Find memories by exact tag match with AND/OR logic.Update memory (
update_memory): Modify content, type, tags, or metadata of an existing memory by ID.Delete memory (
delete_memory): Permanently remove a memory by ID, including from vector and full-text indexes.Move memory (
move_memory): Transfer a memory between workspaces (requires write access).List workspaces (
list_workspaces): View all personal and shared workspaces you belong to, with roles and member counts.Web UI: Browse, search, edit, delete, import, and export memories in a browser interface.
Local embeddings: Zero-config local ONNX models — no external API dependencies.
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
🛠️ 11 MCP tools — store, retrieve, recall, list, search by tag, get, update, delete, move, list workspaces, dream report
💤 Dreaming — a guided consolidation pass (
dreamMCP prompt +dream_reporttool): finds near-duplicate and conflicting memories, merges them into insights non-destructively, driven by the client LLM🌐 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(name)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 | 11 | 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 / decision / insight | 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.
🔍 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\nparaphrase-multilingual-MiniLM-L12-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) |
Set MEMLORD_BASE_URL to your public URL and change MEMLORD_OAUTH_JWT_SECRET before deploying.
🛠️ MCP Tools
Tool | Description |
| Save a memory (idempotent by content); raises on near-duplicates; optional |
| 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 name with full content (expired included) |
| Update content, type, tags, metadata, or expiry by name (and optionally rename) |
| Delete by name |
| Move a memory to a different workspace |
| List workspaces you are a member of (including personal) |
| Read-only consolidation candidates: similar memory pairs, expired and expiring-soon memories |
The dream MCP prompt walks the client LLM through a full consolidation pass over the
dream_report output: classify similar pairs (duplicate / complementary / conflict), merge
into insight memories, retire superseded ones via expires_at — never destructively.
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
ruff format . # 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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseAqualityFmaintenanceAn MCP server that integrates with mem0.ai to help users store, retrieve, and search coding preferences for more consistent programming practices.Last updated9658Apache 2.0- AlicenseBqualityDmaintenanceProvides dynamic short-term and long-term memory management with keyword-based relevance scoring, time-decay models, and trigger-based recall. Optimized for Chinese language support with jieba segmentation.Last updated21161BSD 3-Clause

Memory Nexusofficial
Alicense-qualityDmaintenancePersistent memory and handoff intelligence layer for MCP agents. Most memory servers retrieve text — Memory Nexus compounds operational context, learning from usage and progressively synthesizing observations into higher-order intelligence across sessions and tools.Last updatedMIT- Flicense-qualityDmaintenanceProvides persistent AI agent memory using a local vector database for long-term semantic storage and short-term session scratchpads. It enables low-latency memory operations including search, storage, and bulk management without external cloud dependencies.Last updated
Related MCP Connectors
Cloud-hosted MCP server for durable AI memory
Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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