Skip to main content
Glama

โœจ 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

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:

  • 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 up

HTTP 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
memlord

Open 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 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"
      }
    }
  }
}

๐Ÿ” 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

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.


๐Ÿ› ๏ธ MCP Tools

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.


๐Ÿ’ป 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:

Install Server
A
security โ€“ no known vulnerabilities
A
license - permissive license
A
quality - A tier

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