Memlord
ทางการเซิร์ฟเวอร์หน่วยความจำ MCP ที่โฮสต์เอง สำหรับการใช้งานส่วนตัวและทีม
คุณทำอะไรได้บ้างด้วย Memlord MCP?
- จัดเก็บความทรงจำพร้อมประเภทและแท็ก — ใช้
store_memoryเพื่อบันทึกข้อเท็จจริง ความชอบ คำแนะนำ ข้อเสนอแนะ การตัดสินใจ หรือข้อมูลเชิงลึก โดยสามารถกำหนดวันหมดอายุได้ - ค้นหาความทรงจำด้วยการดึงข้อมูลแบบไฮบริด — ใช้
retrieve_memoryเพื่อค้นหาความทรงจำที่เกี่ยวข้องโดยใช้การค้นหาแบบข้อความเต็ม BM25 และการค้นหาเชิงความหมายแบบเวกเตอร์ร่วมกัน โดยส่งคืนข้อมูลสั้นๆ ที่กระชับ - เรียกคืนความทรงจำตามนิพจน์เวลา — ใช้
recall_memoryเพื่อค้นหาความทรงจำที่ตรงกับคำค้นหาเวลาที่เป็นภาษาธรรมชาติ เช่น "สัปดาห์ที่แล้ว" หรือ "เมื่อวาน" - เรียกดูและกรองความทรงจำทั้งหมด — เรียก
list_memoriesพร้อมตัวกรองประเภทและแท็กเพื่อแบ่งหน้าความทรงจำที่จัดเก็บไว้ - รวมความทรงจำผ่านการฝัน — ใช้พรอมต์
dreamเพื่อให้ผู้ช่วยตรวจสอบผู้สมัครdream_reportรวมรายการที่เกือบซ้ำกันเป็นข้อมูลเชิงลึก และปลดระวางความทรงจำที่ถูกแทนที่โดยไม่ทำลายข้อมูล
เอกสาร
เซิร์ฟเวอร์หน่วยความจำ MCP แบบโฮสต์เองสำหรับการใช้งานส่วนตัวและทีม
เริ่มต้นอย่างรวดเร็ว • วิธีการทำงาน • เครื่องมือ MCP • การกำหนดค่า • ข้อกำหนด • ใบอนุญาต
✨ คุณสมบัติ
- 🔍 การค้นหาแบบไฮบริด — BM25 (ข้อความเต็ม) + vector KNN (pgvector) ผสานผ่าน Reciprocal Rank Fusion
- 📂 ผู้ใช้หลายคน — ผู้ใช้แต่ละคนเห็นเฉพาะความทรงจำของตนเอง; พื้นที่ทำงานสำหรับความรู้ทีมที่ใช้ร่วมกัน
- 🛠️ เครื่องมือ MCP 11 รายการ — จัดเก็บ, ดึงข้อมูล, เรียกคืน, แสดงรายการ, ค้นหาตามแท็ก, รับ, อัปเดต, ลบ, ย้าย, แสดงรายการพื้นที่ทำงาน, รายงานการฝัน
- 💤 การฝัน — ขั้นตอนการรวมข้อมูลแบบมีคำแนะนำ (พรอมต์ MCP
dream+ เครื่องมือdream_report): ค้นหาความทรงจำที่เกือบซ้ำและขัดแย้งกัน, รวมเป็นข้อมูลเชิงลึกโดยไม่ทำลาย, ขับเคลื่อนโดย LLM ของไคลเอนต์ - 🌐 เว็บ 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 | 11 | 5 | 15+ | ~20 |
| โฮสต์เอง | ✅ กระบวนการเดียว | ✅ Docker (3 คอนเทนเนอร์) | ✅ | ✅ |
| อินพุตหน่วยความจำ | ด้วยตนเอง (จัดเก็บอย่างชัดเจน) | สกัดอัตโนมัติโดย LLM | ด้วยตนเอง | ด้วยตนเอง (บันทึก Markdown) |
| ประเภทหน่วยความจำ | ข้อเท็จจริง / การตั้งค่า / คำแนะนำ / ข้อเสนอแนะ / การตัดสินใจ / ข้อมูลเชิงลึก | ข้อเท็จจริงที่สกัดอัตโนมัติ | — | การสังเกต + ลิงก์วิกิ |
| การค้นหาตามเวลา | ✅ วันที่ภาษาธรรมชาติ | ⚠️ REST เท่านั้น, ไม่ใช่ในเครื่องมือ MCP | — | ✅ recent_activity |
| ประสิทธิภาพโทเค็น | ✅ การเปิดเผยแบบก้าวหน้า | ❌ | — | ✅ build_context traversal |
| นำเข้า / ส่งออก | ✅ 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 ที่อ่านได้โดยมนุษย์ คุณสามารถแก้ไข, ควบคุมเวอร์ชัน, และอ่านได้โดยไม่ต้องใช้เซิร์ฟเวอร์; ลิงก์เอนทิตีสไตล์วิกิสร้างกราฟความรู้ในเครื่อง; เครื่องมือ MCP ~20 รายการ
เมื่อใดควรเลือก 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\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])
⚙️ การกำหนดค่า
การตั้งค่าทั้งหมดใช้คำนำหน้า 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 | แสดงรายการพื้นที่ทำงานที่คุณเป็นสมาชิก (รวมถึงส่วนตัว) |
dream_report | ตัวเลือกการรวมแบบอ่านอย่างเดียว: คู่ความทรงจำที่คล้ายกัน, ความทรงจำที่หมดอายุและกำลังจะหมดอายุ |
พรอมต์ MCP dream นำทาง LLM ของไคลเอนต์ผ่านขั้นตอนการรวมทั้งหมดเหนือ
เอาต์พุต dream_report: จำแนกคู่ที่คล้ายกัน (ซ้ำ / เสริม / ขัดแย้ง), รวม
เป็นความทรงจำ insight, เลิกใช้ความทรงจำที่ถูกแทนที่ผ่าน expires_at — ไม่เคยทำลาย
การจัดการพื้นที่ทำงาน (สร้าง, เชิญ, เข้าร่วม, ออก) จัดการผ่านเว็บ 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 — ฟรีสำหรับการใช้งานโอเพนซอร์ส หากคุณเรียกใช้เวอร์ชันที่แก้ไขเป็นบริการเครือข่าย คุณต้องเผยแพร่ซอร์สโค้ดของคุณ
- ใบอนุญาตเชิงพาณิชย์ — สำหรับการปรับใช้ที่เป็นกรรมสิทธิ์หรือแบบปิด ติดต่อ sergey@memlord.com หรือ dmitry@memlord.com เพื่อซื้อ