Memlord
resmiServer memori MCP yang dihosting sendiri untuk penggunaan pribadi dan tim
Apa yang bisa Anda lakukan dengan Memlord MCP?
- Menyimpan memori dengan tipe dan tag — Simpan fakta, preferensi, instruksi, atau umpan balik menggunakan
store_memory, dengan deteksi duplikat mendekati otomatis. - Mencari memori dengan pengambilan hibrida — Gunakan
retrieve_memoryuntuk menemukan memori melalui pencarian teks lengkap BM25 dan vektor semantik secara gabungan. - Mengingat memori berdasarkan ekspresi waktu — Temukan memori menggunakan kueri waktu bahasa alami seperti "minggu lalu" atau "kemarin" dengan
recall_memory. - Mendaftar dan memfilter memori — Jelajahi memori berdasarkan tipe atau tag dengan
list_memories, atau gabungkan tag dengan logika AND/OR melaluisearch_by_tag. - Mendapatkan konten memori lengkap sesuai permintaan — Ambil memori lengkap berdasarkan nama dengan
get_memorysaat Anda memerlukan detail di luar cuplikan pencarian. - Memperbarui, menghapus, atau memindahkan memori — Ubah konten, tag, atau masa berlaku dengan
update_memory, hapus dengandelete_memory, atau pindahkan antar ruang kerja denganmove_memory.
Dokumentasi
Server memori MCP self-hosted untuk penggunaan pribadi dan tim
Mulai Cepat • Cara Kerja • Alat MCP • Konfigurasi • Persyaratan • Lisensi
✨ Fitur
- 🔍 Pencarian hibrida — BM25 (teks lengkap) + vektor KNN (pgvector) digabungkan melalui Reciprocal Rank Fusion
- 📂 Multi-pengguna — setiap pengguna hanya melihat memorinya sendiri; ruang kerja untuk pengetahuan tim bersama
- 🛠️ 10 alat MCP — simpan, ambil, ingat kembali, daftar, cari berdasarkan tag, dapatkan, perbarui, hapus, pindahkan, daftar ruang kerja
- 🌐 UI Web — jelajahi, cari, edit, dan hapus memori di peramban; ekspor/impor JSON
- 🔒 OAuth 2.1 — server otorisasi dalam proses penuh, selalu diaktifkan
- 🐘 PostgreSQL — pgvector untuk embedding, tsvector untuk pencarian teks lengkap
- 📊 Pengungkapan progresif — pencarian mengembalikan cuplikan ringkas secara default; panggil
get_memory(name)hanya untuk yang Anda butuhkan, mengurangi penggunaan token - 🔁 Deduplikasi — secara otomatis mendeteksi memori yang hampir identik sebelum menyimpan, mencegah akumulasi noise
🆚 Perbandingan Memlord
| Memlord | OpenMemory | mcp-memory-service | basic-memory | |
|---|---|---|---|---|
| Pencarian | BM25 + vektor + RRF | Hanya vektor (Qdrant) | BM25 + vektor + RRF | BM25 + vektor |
| Embedding | ONNX lokal, tanpa konfigurasi | Default OpenAI; Ollama opsional | ONNX lokal, tanpa konfigurasi | FastEmbed lokal |
| Penyimpanan | PostgreSQL + pgvector | PostgreSQL + Qdrant | SQLite-vec / Cloudflare Vectorize | SQLite + file Markdown |
| Multi-pengguna | ✅ | ❌ pengguna tunggal dalam praktik | ⚠️ cakupan ID agen, tanpa isolasi | ❌ |
| Ruang Kerja | ✅ bersama + pribadi, tautan undangan | ⚠️ Namespace "Aplikasi" | ⚠️ tag + conversation_id | ✅ flag per-proyek |
| Autentikasi | ✅ OAuth 2.1 | ❌ tidak ada (self-hosted) | ✅ OAuth 2.0 + PKCE | ❌ |
| UI Web | ✅ jelajahi, edit, ekspor | ✅ Dasbor Next.js | ✅ UI kaya, visualisasi graf, skor kualitas | ❌ lokal; hanya cloud |
| Alat MCP | 10 | 5 | 15+ | ~20 |
| Self-hosted | ✅ proses tunggal | ✅ Docker (3 kontainer) | ✅ | ✅ |
| Input Memori | Manual (penyimpanan eksplisit) | Otomatis diekstrak oleh LLM | Manual | Manual (catatan Markdown) |
| Tipe Memori | fakta / preferensi / instruksi / umpan balik | fakta yang diekstrak otomatis | — | observasi + tautan wiki |
| Pencarian sadar waktu | ✅ tanggal bahasa alami | ⚠️ Hanya REST, tidak dalam alat MCP | — | ✅ recent_activity |
| Efisiensi Token | ✅ pengungkapan progresif | ❌ | — | ✅ penelusuran build_context |
| Impor / Ekspor | ✅ JSON | ✅ ZIP (JSON + JSONL) | — | ✅ Markdown (dapat dibaca manusia) |
| Lisensi | AGPL-3.0 / Komersial | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
Keunggulan nyata pesaing:
- OpenMemory — mengekstrak memori secara otomatis dari teks percakapan mentah; tidak perlu memutuskan apa yang disimpan secara manual; impor/ekspor baik
- mcp-memory-service — UI web lebih kaya (visualisasi graf, penilaian kualitas, 8 tab); lisensi lebih permisif (Apache 2.0); beberapa opsi transport (stdio, SSE, HTTP)
- basic-memory — memori adalah file Markdown yang dapat dibaca manusia, dapat diedit, dikontrol versi, dan dibaca tanpa server apa pun; tautan entitas bergaya wiki membentuk graf pengetahuan lokal; ~20 alat MCP
Kapan memilih Memlord:
- Anda menginginkan embedding lokal tanpa konfigurasi — model ONNX disertakan dengan server, tidak perlu Ollama atau API eksternal
- Anda menjalankan server tim multi-pengguna dengan autentikasi OAuth 2.1 yang tepat dan ruang kerja berbasis undangan
- Anda menginginkan basis data kelas produksi (PostgreSQL) yang dapat diskalakan melampaui SQLite mesin tunggal
- Anda mengelola memori secara eksplisit — simpan tepat apa yang penting, diketik dan ditandai, bukan semua yang diputuskan LLM untuk diekstrak
- Anda menginginkan UI Web self-hosted dengan CRUD penuh dan ekspor JSON, tanpa langganan cloud
🚀 Mulai Cepat
🐳 Docker
cp .env.example .env
docker compose up
Server HTTP (multi-pengguna, UI Web, 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
Buka http://localhost:8000 untuk UI Web. Endpoint MCP berada di /mcp.
🔍 Cara Kerja
Setiap permintaan pencarian menjalankan BM25 dan vektor KNN secara paralel, lalu menggabungkan hasil melalui 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])
⚙️ Konfigurasi
Semua pengaturan menggunakan prefiks MEMLORD_. Lihat .env.example untuk daftar lengkapnya.
| Variabel | Default | Deskripsi |
|---|---|---|
MEMLORD_DB_URL | postgresql+asyncpg://postgres:postgres@localhost/memlord | URL koneksi PostgreSQL |
MEMLORD_PORT | 8000 | Port server |
MEMLORD_BASE_URL | http://localhost:8000 | URL publik untuk OAuth (mode HTTP) |
MEMLORD_OAUTH_JWT_SECRET | memlord-dev-secret-please-change | Rahasia penandatanganan JWT (mode HTTP) |
Atur MEMLORD_BASE_URL ke URL publik Anda dan ubah MEMLORD_OAUTH_JWT_SECRET sebelum menerapkan.
🛠️ Alat MCP
| Alat | Deskripsi |
|---|---|
store_memory | Simpan memori (idempoten berdasarkan konten); memunculkan peringatan jika hampir duplikat; opsional expires_at |
retrieve_memory | Pencarian hibrida semantik + teks lengkap; mengembalikan cuplikan secara default |
recall_memory | Cari berdasarkan ekspresi waktu bahasa alami; mengembalikan cuplikan secara default |
list_memories | Daftar dengan halaman dengan filter tipe/tag |
search_by_tag | Pencarian tag DAN/ATAU |
get_memory | Ambil satu memori berdasarkan nama dengan konten penuh |
update_memory | Perbarui konten, tipe, tag, metadata, atau kedaluwarsa berdasarkan nama (dan opsional ganti nama) |
delete_memory | Hapus berdasarkan nama |
move_memory | Pindahkan memori ke ruang kerja berbeda |
list_workspaces | Daftar ruang kerja di mana Anda menjadi anggota (termasuk pribadi) |
Manajemen ruang kerja (buat, undang, gabung, keluar) ditangani melalui UI Web.
💻 Persyaratan Sistem
- Python 3.12
- PostgreSQL ≥ 15 dengan ekstensi pgvector
- uv — manajer paket Python
👨💻 Pengembangan
pyright src/ # type check
ruff format . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date
📄 Lisensi
Memlord dilisensikan ganda:
- AGPL-3.0 — gratis untuk penggunaan sumber terbuka. Jika Anda menjalankan versi yang dimodifikasi sebagai layanan jaringan, Anda harus mempublikasikan kode sumber Anda.
- Lisensi Komersial — untuk penerapan proprietary atau sumber tertutup. Hubungi sergey@memlord.com atau dmitry@memlord.com untuk membeli.