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_memory to 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 via search_by_tag.
  • Get full memory content on demand — Fetch a complete memory by name with get_memory when you need details beyond search snippets.
  • Update, delete, or move memories — Modify content, tags, or expiry with update_memory, remove with delete_memory, or relocate between workspaces with move_memory.

เอกสาร

เซิร์ฟเวอร์หน่วยความจำ MCP แบบโฮสต์เองพร้อมการค้นหาแบบผสม BM25 + semantic รองรับโดย PostgreSQL +
pgvector

เซิร์ฟเวอร์หน่วยความจำ MCP แบบโฮสต์เองสำหรับการใช้งานส่วนตัวและทีม

License Python Version MCP Ruff MCP score

เริ่มต้นอย่างรวดเร็ววิธีการทำงานเครื่องมือ MCPการกำหนดค่าข้อกำหนดใบอนุญาต


✨ คุณสมบัติ

  • 🔍 การค้นหาแบบผสม — BM25 (ข้อความเต็ม) + vector KNN (pgvector) ผสานผ่าน Reciprocal Rank Fusion
  • 📂 ผู้ใช้หลายคน — ผู้ใช้แต่ละคนเห็นเฉพาะความทรงจำของตนเอง; พื้นที่ทำงานสำหรับความรู้ที่แชร์กันในทีม
  • 🛠️ 10 เครื่องมือ MCP — จัดเก็บ, ดึงข้อมูล, เรียกคืน, แสดงรายการ, ค้นหาตามแท็ก, รับ, อัปเดต, ลบ, ย้าย, แสดงรายการพื้นที่ทำงาน
  • 🌐 เว็บ UI — เรียกดู, ค้นหา, แก้ไข และลบความทรงจำในเบราว์เซอร์; ส่งออก/นำเข้า JSON
  • 🔒 OAuth 2.1 — เซิร์ฟเวอร์การอนุญาตในกระบวนการเต็มรูปแบบ, เปิดใช้งานตลอดเวลา
  • 🐘 PostgreSQL — pgvector สำหรับ embeddings, tsvector สำหรับการค้นหาข้อความเต็ม
  • 📊 การเปิดเผยแบบก้าวหน้า — การค้นหาส่งคืนตัวอย่างย่อตามค่าเริ่มต้น; เรียก get_memory(name) เฉพาะสิ่งที่คุณต้องการ, ลดการใช้โทเค็น
  • 🔁 การขจัดรายการซ้ำ — ตรวจจับความทรงจำที่เกือบเหมือนกันโดยอัตโนมัติก่อนบันทึก, ป้องกันการสะสมของสัญญาณรบกวน

🆚 การเปรียบเทียบ Memlord

MemlordOpenMemorymcp-memory-servicebasic-memory
การค้นหาBM25 + vector + RRFVector เท่านั้น (Qdrant)BM25 + vector + RRFBM25 + vector
EmbeddingsONNX ในเครื่อง, ไม่ต้องกำหนดค่าOpenAI ค่าเริ่มต้น; Ollama เป็นตัวเลือกONNX ในเครื่อง, ไม่ต้องกำหนดค่าFastEmbed ในเครื่อง
พื้นที่จัดเก็บPostgreSQL + pgvectorPostgreSQL + QdrantSQLite-vec / Cloudflare VectorizeSQLite + ไฟล์ Markdown
ผู้ใช้หลายคน❌ ในทางปฏิบัติเป็นผู้ใช้คนเดียว⚠️ การกำหนดขอบเขต agent-ID, ไม่มีการแยก
พื้นที่ทำงาน✅ แชร์ + ส่วนตัว, ลิงก์เชิญ⚠️ เนมสเปซ "Apps"⚠️ แท็ก + conversation_id✅ แฟล็กต่อโปรเจกต์
การรับรองความถูกต้อง✅ OAuth 2.1❌ ไม่มี (โฮสต์เอง)✅ OAuth 2.0 + PKCE
เว็บ UI✅ เรียกดู, แก้ไข, ส่งออก✅ แดชบอร์ด Next.js✅ UI สมบูรณ์, กราฟแสดงผล, คะแนนคุณภาพ❌ ในเครื่อง; คลาวด์เท่านั้น
เครื่องมือ MCP10515+~20
โฮสต์เอง✅ กระบวนการเดียว✅ Docker (3 คอนเทนเนอร์)
อินพุตหน่วยความจำด้วยตนเอง (จัดเก็บอย่างชัดแจ้ง)สกัดอัตโนมัติโดย LLMด้วยตนเองด้วยตนเอง (บันทึก Markdown)
ประเภทหน่วยความจำข้อเท็จจริง / การตั้งค่า / คำแนะนำ / ข้อเสนอแนะข้อเท็จจริงที่สกัดอัตโนมัติการสังเกต + ลิงก์วิกิ
การค้นหาตามเวลา✅ วันที่ภาษาธรรมชาติ⚠️ REST เท่านั้น, ไม่ใช่ในเครื่องมือ MCP✅ recent_activity
ประสิทธิภาพโทเค็น✅ การเปิดเผยแบบก้าวหน้า✅ การท่อง build_context
นำเข้า / ส่งออก✅ JSON✅ ZIP (JSON + JSONL)✅ Markdown (อ่านได้โดยมนุษย์)
ใบอนุญาตAGPL-3.0 / เชิงพาณิชย์Apache 2.0Apache 2.0AGPL-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_URLpostgresql+asyncpg://postgres:postgres@localhost/memlordURL การเชื่อมต่อ PostgreSQL
MEMLORD_PORT8000พอร์ตเซิร์ฟเวอร์
MEMLORD_BASE_URLhttp://localhost:8000URL สาธารณะสำหรับ OAuth (โหมด HTTP)
MEMLORD_OAUTH_JWT_SECRETmemlord-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] เพื่อซื้อ