close

Self-hosted memory for
AI assistants & teams

MCP-compatible memory server with hybrid BM25 + semantic search, backed by PostgreSQL + pgvector. Self-host or use our cloud. Local ONNX embeddings, no external API keys.

MCP Compatible AGPL-3.0 / Commercial Python 3.12 PostgreSQL + pgvector

Who is it for?

Three reasons people run their own memory server.

Your AI that actually remembers

Your AI that actually remembers

One memory, all your AI tools. Claude Code, claude.ai, ChatGPT, Cursor — they all read and write the same store. Switch apps mid-task and your context comes with you.

Family knowledge base

Family knowledge base

Separate workspaces for school, vacations, household — shared with the whole family. Everyone’s AI assistant stays in sync, without group chats or repeated explanations.

Project decisions that outlive the chat

Project decisions that outlive the chat

Document why something is built the way it is. “This workaround exists because…” doesn’t get lost when team members change, chats expire, or a new AI session starts.

How Memlord compares

Side-by-side with the most popular self-hosted MCP memory alternatives.

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 Local ONNX, zero config Local FastEmbed
Storage PostgreSQL + pgvector PostgreSQL + Qdrant SQLite-vec SQLite + Markdown
Multi-user ✓ Full isolation ✗ single-user ⚠ agent-ID scoping
Workspaces ✓ shared + invites ⚠ "Apps" namespace ⚠ tags + conv_id ✓ per-project flag
Authentication ✓ OAuth 2.1 ✗ none ✓ OAuth 2.0 + PKCE
Web UI ✓ browse, edit, export ✓ Next.js dashboard ✓ graph viz, scoring ✗ cloud only
MCP tools 10 5 15+ ~20
Self-hosted ✓ single process ⚠ 3 containers
Time-aware search ✓ natural language ⚠ REST only ✓ recent_activity
Token efficiency ✓ progressive disclosure ✓ build_context
License AGPL-3.0 / Commercial Apache 2.0 Apache 2.0 AGPL-3.0

Get up and running

Two files and one command. Or run bare metal with uv.

1 Deploy the server

No setup needed — already running at app.memlord.com.

Sign up and get your MCP endpoint at app.memlord.com/mcp. Skip to step 2.

# Grab the two files you need
curl -O https://raw.githubusercontent.com/MyrikLD/memlord/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/MyrikLD/memlord/main/.env.example

# Configure BASE_URL and JWT_SECRET
mv .env.example .env
$EDITOR .env

# PostgreSQL + pgvector + app — all in one
docker compose up -d

Web UI at http://localhost:8000  ·  MCP endpoint at /mcp

# 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

Web UI at http://localhost:8000  ·  MCP endpoint at /mcp

2 Connect your client

Run in terminal:

claude mcp add --transport http memlord https://app.memlord.com/mcp

Then inside Claude Code run /mcp, select memlord and complete the OAuth flow.

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "memlord": {
      "type": "http",
      "url": "https://app.memlord.com/mcp"
    }
  }
}

Restart Claude Desktop — it will prompt you to sign in on first use.

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

Go to claude.ai → Settings → Connectors and add this URL:

https://app.memlord.com/mcp

Authorize the OAuth flow when prompted. The server must be publicly reachable — localhost won't work.

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):

{
  "mcpServers": {
    "memlord": {
      "url": "https://app.memlord.com/mcp"
    }
  }
}

Restart Cursor — OAuth flow will open automatically on first use.

Go to Settings → Apps → Add and enter this URL:

https://app.memlord.com/mcp

Authorize the OAuth flow when prompted. Requires Pro/Plus/Business/Enterprise. The server must be publicly reachable — localhost won't work.

How it works

Each search runs BM25 and vector KNN in parallel, then fuses results for best relevance.

INPUT Query FULL-TEXT BM25 tsquery EMBEDDING ONNX MiniLM-L6 · 384d VECTOR SEARCH KNN pgvector <-> op FUSION RRF 1/(k+rank) · k=60 Top-N Results
1

Store typed memories

Save facts, preferences, instructions and feedback with tags. Content is embedded locally on write.

2

Search by meaning or keywords

Hybrid retrieval finds what you mean even when you don't remember exact wording.

3

Recall by time

Natural-language date expressions like "last week" or "yesterday" filter results temporally.

4

Fetch full content on demand

Progressive disclosure keeps context windows lean — expand only the memory you need.

Built to actually work

Under the hood: what makes Memlord reliable, private, and fast.

🔍

Hybrid Search

BM25 full-text and vector KNN run in parallel, merged via Reciprocal Rank Fusion. Best of both worlds — exact keyword matches and semantic similarity.

📂

Multi-user & Workspaces

Each user sees only their own memories. Shared workspaces for team knowledge with invite links. Full isolation between users.

🔒

OAuth 2.1 Built-in

Full in-process authorization server, always enabled. No external auth dependency. Connect any MCP client securely.

🧠

Zero-config Embeddings

Local ONNX model (all-MiniLM-L6-v2, 384d) ships with the server. No Ollama, no OpenAI API key, no internet required for inference.

🌐

Web UI

Browse, search, edit and delete memories in the browser. Export and import as JSON. Manage workspace invites. No CLI required.

🐘

PostgreSQL Backend

pgvector for embeddings, tsvector for full-text. A production-grade database that scales beyond a single machine’s SQLite.

📊

Progressive Disclosure

Search returns compact snippets by default. Call get_memory(id) only for what you need, keeping token usage low.

🔁

Deduplication

Automatically detects near-identical memories before saving. Prevents noise accumulation when the same fact is stored repeatedly.

10 MCP Tools

A complete toolkit for memory management, exposed as MCP tools ready for any compatible AI client.

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 ("last week", "yesterday")
list_memories Paginated list with type/tag filters
search_by_tag AND/OR tag search across your memories
get_memory Fetch a single memory by ID with full content
update_memory Update content, type, tags, or metadata by ID
delete_memory Delete a memory by ID
move_memory Move a memory to a different workspace
list_workspaces List workspaces you are a member of (including personal)

Dual Licensed

Free for open-source. Commercial license for proprietary deployments.

Open Source
AGPL-3.0

Free for personal use and open-source projects. If you run a modified version as a network service, you must publish your source code.