Memlord
ทางการเซิร์ฟเวอร์หน่วยความจำ MCP ที่โฮสต์เอง สำหรับการใช้งานส่วนตัวและทีม
คุณทำอะไรได้บ้างด้วย Memlord MCP?
- Store a memory with type and tags — Save facts, preferences, instructions, or feedback using
store_memory, with automatic near-duplicate detection. - Search memories with hybrid retrieval — Use
retrieve_memoryto find memories via combined BM25 full-text and semantic vector search. - Recall memories by time expression — Find memories using natural-language time queries like "last week" or "yesterday" with
recall_memory. - List and filter memories — Browse memories by type or tag with
list_memories, or combine tags with AND/OR logic viasearch_by_tag. - Get full memory content on demand — Fetch a complete memory by name with
get_memorywhen you need details beyond search snippets. - Update, delete, or move memories — Modify content, tags, or expiry with
update_memory, remove withdelete_memory, or relocate between workspaces withmove_memory.
เอกสาร
เซิร์ฟเวอร์หน่วยความจำ MCP แบบโฮสต์เองสำหรับการใช้งานส่วนตัวและทีม
เริ่มต้นอย่างรวดเร็ว • วิธีการทำงาน • เครื่องมือ MCP • การกำหนดค่า • ข้อกำหนด • ใบอนุญาต
✨ คุณสมบัติ
- 🔍 การค้นหาแบบผสม — BM25 (ข้อความเต็ม) + vector KNN (pgvector) ผสานผ่าน Reciprocal Rank Fusion
- 📂 ผู้ใช้หลายคน — ผู้ใช้แต่ละคนเห็นเฉพาะความทรงจำของตนเอง; พื้นที่ทำงานสำหรับความรู้ที่แชร์กันในทีม
- 🛠️ 10 เครื่องมือ MCP — จัดเก็บ, ดึงข้อมูล, เรียกคืน, แสดงรายการ, ค้นหาตามแท็ก, รับ, อัปเดต, ลบ, ย้าย, แสดงรายการพื้นที่ทำงาน
- 🌐 เว็บ UI — เรียกดู, ค้นหา, แก้ไข และลบความทรงจำในเบราว์เซอร์; ส่งออก/นำเข้า JSON
- 🔒 OAuth 2.1 — เซิร์ฟเวอร์การอนุญาตในกระบวนการเต็มรูปแบบ, เปิดใช้งานตลอดเวลา
- 🐘 PostgreSQL — pgvector สำหรับ embeddings, tsvector สำหรับการค้นหาข้อความเต็ม
- 📊 การเปิดเผยแบบก้าวหน้า — การค้นหาส่งคืนตัวอย่างย่อตามค่าเริ่มต้น; เรียก
get_memory(name)เฉพาะสิ่งที่คุณต้องการ, ลดการใช้โทเค็น - 🔁 การขจัดรายการซ้ำ — ตรวจจับความทรงจำที่เกือบเหมือนกันโดยอัตโนมัติก่อนบันทึก, ป้องกันการสะสมของสัญญาณรบกวน
🆚 การเปรียบเทียบ Memlord
| Memlord | OpenMemory | mcp-memory-service | basic-memory | |
|---|---|---|---|---|
| การค้นหา | BM25 + vector + RRF | Vector เท่านั้น (Qdrant) | BM25 + vector + RRF | BM25 + vector |
| Embeddings | ONNX ในเครื่อง, ไม่ต้องกำหนดค่า | OpenAI ค่าเริ่มต้น; Ollama เป็นตัวเลือก | ONNX ในเครื่อง, ไม่ต้องกำหนดค่า | FastEmbed ในเครื่อง |
| พื้นที่จัดเก็บ | PostgreSQL + pgvector | PostgreSQL + Qdrant | SQLite-vec / Cloudflare Vectorize | SQLite + ไฟล์ Markdown |
| ผู้ใช้หลายคน | ✅ | ❌ ในทางปฏิบัติเป็นผู้ใช้คนเดียว | ⚠️ การกำหนดขอบเขต agent-ID, ไม่มีการแยก | ❌ |
| พื้นที่ทำงาน | ✅ แชร์ + ส่วนตัว, ลิงก์เชิญ | ⚠️ เนมสเปซ "Apps" | ⚠️ แท็ก + conversation_id | ✅ แฟล็กต่อโปรเจกต์ |
| การรับรองความถูกต้อง | ✅ OAuth 2.1 | ❌ ไม่มี (โฮสต์เอง) | ✅ OAuth 2.0 + PKCE | ❌ |
| เว็บ UI | ✅ เรียกดู, แก้ไข, ส่งออก | ✅ แดชบอร์ด Next.js | ✅ UI สมบูรณ์, กราฟแสดงผล, คะแนนคุณภาพ | ❌ ในเครื่อง; คลาวด์เท่านั้น |
| เครื่องมือ MCP | 10 | 5 | 15+ | ~20 |
| โฮสต์เอง | ✅ กระบวนการเดียว | ✅ Docker (3 คอนเทนเนอร์) | ✅ | ✅ |
| อินพุตหน่วยความจำ | ด้วยตนเอง (จัดเก็บอย่างชัดแจ้ง) | สกัดอัตโนมัติโดย LLM | ด้วยตนเอง | ด้วยตนเอง (บันทึก Markdown) |
| ประเภทหน่วยความจำ | ข้อเท็จจริง / การตั้งค่า / คำแนะนำ / ข้อเสนอแนะ | ข้อเท็จจริงที่สกัดอัตโนมัติ | — | การสังเกต + ลิงก์วิกิ |
| การค้นหาตามเวลา | ✅ วันที่ภาษาธรรมชาติ | ⚠️ REST เท่านั้น, ไม่ใช่ในเครื่องมือ MCP | — | ✅ recent_activity |
| ประสิทธิภาพโทเค็น | ✅ การเปิดเผยแบบก้าวหน้า | ❌ | — | ✅ การท่อง build_context |
| นำเข้า / ส่งออก | ✅ JSON | ✅ ZIP (JSON + JSONL) | — | ✅ Markdown (อ่านได้โดยมนุษย์) |
| ใบอนุญาต | AGPL-3.0 / เชิงพาณิชย์ | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
จุดที่คู่แข่งมีข้อได้เปรียบจริง:
- OpenMemory — สกัดความทรงจำจากข้อความสนทนาดิบโดยอัตโนมัติ; ไม่ต้องตัดสินใจว่าจะจัดเก็บอะไรด้วยตนเอง; นำเข้า/ส่งออกดี
- mcp-memory-service — เว็บ UI สมบูรณ์ยิ่งขึ้น (การแสดงกราฟ, การให้คะแนนคุณภาพ, 8 แท็บ); ใบอนุญาตที่อนุญาตมากกว่า (Apache 2.0); ตัวเลือกการขนส่งหลายแบบ (stdio, SSE, HTTP)
- basic-memory — ความทรงจำเป็นไฟล์ Markdown ที่อ่านได้โดยมนุษย์ คุณสามารถแก้ไข, ควบคุมเวอร์ชัน, และอ่านได้โดยไม่ต้องใช้เซิร์ฟเวอร์; ลิงก์เอนทิตีสไตล์วิกิสร้างกราฟความรู้ในเครื่อง; ~20 เครื่องมือ MCP
เมื่อใดควรเลือก Memlord:
- คุณต้องการ embeddings ในเครื่องที่ไม่ต้องกำหนดค่า — โมเดล ONNX มาพร้อมกับเซิร์ฟเวอร์, ไม่ต้องใช้ Ollama หรือ API ภายนอก
- คุณใช้งาน เซิร์ฟเวอร์ทีมผู้ใช้หลายคน พร้อมการรับรองความถูกต้อง OAuth 2.1 ที่เหมาะสมและพื้นที่ทำงานแบบเชิญ
- คุณต้องการ ฐานข้อมูลระดับการผลิต (PostgreSQL) ที่ขยายขนาดได้เกินกว่า SQLite ของเครื่องเดียว
- คุณจัดการความทรงจำ อย่างชัดแจ้ง — จัดเก็บสิ่งที่สำคัญ, มีประเภทและแท็ก, ไม่ใช่ทุกสิ่งที่ LLM ตัดสินใจสกัด
- คุณต้องการ เว็บ UI แบบโฮสต์เอง พร้อม CRUD เต็มรูปแบบและการส่งออก JSON, โดยไม่ต้องสมัครสมาชิกคลาวด์
🚀 เริ่มต้นอย่างรวดเร็ว
🐳 Docker
cp .env.example .env
docker compose up
เซิร์ฟเวอร์ HTTP (ผู้ใช้หลายคน, เว็บ 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
เปิด http://localhost:8000 สำหรับเว็บ UI ปลายทาง MCP อยู่ที่ /mcp
🔍 วิธีการทำงาน
แต่ละคำขอค้นหาทำงาน BM25 และ vector KNN แบบขนาน, จากนั้นผสานผลลัพธ์ผ่าน 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])
⚙️ การกำหนดค่า
การตั้งค่าทั้งหมดใช้คำนำหน้า MEMLORD_ ดู .env.example สำหรับรายการทั้งหมด
| ตัวแปร | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
MEMLORD_DB_URL | postgresql+asyncpg://postgres:postgres@localhost/memlord | URL การเชื่อมต่อ PostgreSQL |
MEMLORD_PORT | 8000 | พอร์ตเซิร์ฟเวอร์ |
MEMLORD_BASE_URL | http://localhost:8000 | URL สาธารณะสำหรับ OAuth (โหมด HTTP) |
MEMLORD_OAUTH_JWT_SECRET | memlord-dev-secret-please-change | ความลับการลงนาม JWT (โหมด HTTP) |
ตั้งค่า MEMLORD_BASE_URL เป็น URL สาธารณะของคุณและเปลี่ยน MEMLORD_OAUTH_JWT_SECRET ก่อนการปรับใช้
🛠️ เครื่องมือ MCP
| เครื่องมือ | คำอธิบาย |
|---|---|
store_memory | บันทึกความทรงจำ (idempotent โดยเนื้อหา); แจ้งเตือนเมื่อเกือบซ้ำ; expires_at ตัวเลือก |
retrieve_memory | การค้นหา semantic + ข้อความเต็มแบบผสม; ส่งคืนตัวอย่างย่อตามค่าเริ่มต้น |
recall_memory | ค้นหาด้วยนิพจน์เวลาภาษาธรรมชาติ; ส่งคืนตัวอย่างย่อตามค่าเริ่มต้น |
list_memories | รายการแบบแบ่งหน้าพร้อมตัวกรองประเภท/แท็ก |
search_by_tag | การค้นหาแท็ก AND/OR |
get_memory | ดึงข้อมูลความทรงจำเดี่ยวตามชื่อพร้อมเนื้อหาเต็ม |
update_memory | อัปเดตเนื้อหา, ประเภท, แท็ก, ข้อมูลเมตา, หรือวันหมดอายุตามชื่อ (และเปลี่ยนชื่อได้ตามต้องการ) |
delete_memory | ลบตามชื่อ |
move_memory | ย้ายความทรงจำไปยังพื้นที่ทำงานอื่น |
list_workspaces | แสดงรายการพื้นที่ทำงานที่คุณเป็นสมาชิก (รวมถึงส่วนตัว) |
การจัดการพื้นที่ทำงาน (สร้าง, เชิญ, เข้าร่วม, ออก) จัดการผ่านเว็บ UI
💻 ความต้องการของระบบ
- Python 3.12
- PostgreSQL ≥ 15 พร้อมส่วนขยาย pgvector
- uv — ตัวจัดการแพ็คเกจ Python
👨💻 การพัฒนา
pyright src/ # type check
ruff format . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date
📄 ใบอนุญาต
Memlord มีใบอนุญาตคู่:
- AGPL-3.0 — ฟรีสำหรับการใช้งานโอเพนซอร์ส หากคุณเรียกใช้เวอร์ชันที่แก้ไขเป็นบริการเครือข่าย คุณต้องเผยแพร่ซอร์สโค้ดของคุณ
- ใบอนุญาตเชิงพาณิชย์ — สำหรับการปรับใช้แบบกรรมสิทธิ์หรือซอร์สปิด ติดต่อ [email protected] หรือ [email protected] เพื่อซื้อ