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 — Gunakan
store_memoryuntuk menyimpan fakta, preferensi, instruksi, umpan balik, keputusan, atau wawasan, dengan opsi menetapkan masa berlaku. - Mencari memori dengan pengambilan hibrida — Minta
retrieve_memoryuntuk menemukan memori yang relevan menggunakan gabungan pencarian teks lengkap BM25 dan semantik vektor, yang mengembalikan cuplikan ringkas. - Mengingat memori berdasarkan ekspresi waktu — Gunakan
recall_memoryuntuk menemukan memori yang cocok dengan kueri waktu bahasa alami seperti "minggu lalu" atau "kemarin." - Menelusuri dan memfilter semua memori — Panggil
list_memoriesdengan filter tipe dan tag untuk menelusuri memori yang tersimpan secara bertahap. - Mengonsolidasikan memori melalui mimpi — Jalankan perintah
dreamagar asisten meninjau kandidatdream_report, menggabungkan duplikat yang hampir sama menjadi wawasan, dan menonaktifkan memori yang sudah digantikan tanpa merusak data.
Dokumentasi
Server memori MCP self-hosted untuk penggunaan pribadi dan tim
Mulai Cepat • Cara Kerja • Alat MCP • Konfigurasi • Persyaratan • Lisensi
✨ Fitur
- 🔍 Pencarian hybrid — 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
- 🛠️ 11 alat MCP — simpan, ambil, ingat, daftar, cari berdasarkan tag, dapatkan, perbarui, hapus, pindahkan, daftar ruang kerja, laporan dream
- 💤 Dreaming — proses konsolidasi terpandu (
dreamprompt MCP +dream_reportalat): menemukan memori yang hampir duplikat dan bertentangan, menggabungkannya menjadi wawasan secara non-destruktif, didorong oleh LLM klien - 🌐 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 embeddings, 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 |
| Embeddings | ONNX lokal, tanpa konfigurasi | OpenAI default; 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 agent-ID, tanpa isolasi | ❌ |
| Ruang Kerja | ✅ bersama + pribadi, tautan undangan | ⚠️ Namespace "Apps" | ⚠️ 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 | 11 | 5 | 15+ | ~20 |
| Self-hosted | ✅ proses tunggal | ✅ Docker (3 kontainer) | ✅ | ✅ |
| Input Memori | Manual (penyimpanan eksplisit) | Diekstrak otomatis oleh LLM | Manual | Manual (catatan Markdown) |
| Tipe Memori | fakta / preferensi / instruksi / umpan balik / keputusan / wawasan | fakta yang diekstrak otomatis | — | observasi + tautan wiki |
| Pencarian sadar waktu | ✅ tanggal bahasa alami | ⚠️ Hanya REST, tidak di alat MCP | — | ✅ recent_activity |
| Efisiensi Token | ✅ pengungkapan progresif | ❌ | — | ✅ build_context traversal |
| 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 gaya wiki membentuk graf pengetahuan lokal; ~20 alat MCP
Kapan memilih Memlord:
- Anda menginginkan embeddings 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 ada 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\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])
⚙️ Konfigurasi
Semua pengaturan menggunakan awalan 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; expires_at opsional |
retrieve_memory | Pencarian hybrid semantik + teks lengkap; mengembalikan cuplikan secara default |
recall_memory | Cari berdasarkan ekspresi waktu bahasa alami; mengembalikan cuplikan secara default |
list_memories | Daftar dengan halaman dan filter tipe/tag |
search_by_tag | Pencarian tag AND/OR |
get_memory | Ambil satu memori berdasarkan nama dengan konten lengkap (termasuk yang kedaluwarsa) |
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) |
dream_report | Kandidat konsolidasi hanya-baca: pasangan memori serupa, memori kedaluwarsa dan yang akan segera kedaluwarsa |
Prompt MCP dream memandu LLM klien melalui proses konsolidasi penuh atas
output dream_report: klasifikasikan pasangan serupa (duplikat / komplementer / konflik), gabungkan
menjadi memori insight, pensiunkan yang digantikan melalui expires_at — tidak pernah secara destruktif.
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.