Memlord

官方

自託管MCP記憶伺服器,適用於個人使用與團隊協作

你可以用 Memlord MCP 做什麼?

  • 儲存帶有類型和標籤的記憶 — 使用 store_memory 儲存事實、偏好、指示或回饋,並具備自動近似重複偵測功能。
  • 透過混合檢索搜尋記憶 — 使用 retrieve_memory 結合 BM25 全文檢索與語意向量搜尋來尋找記憶。
  • 依時間表達式回憶記憶 — 使用 recall_memory 搭配「上週」或「昨天」等自然語言時間查詢來尋找記憶。
  • 列出與篩選記憶 — 使用 list_memories 依類型或標籤瀏覽記憶,或透過 search_by_tag 以 AND/OR 邏輯組合標籤。
  • 按需取得完整記憶內容 — 當需要搜尋片段以外的詳細資訊時,使用 get_memory 依名稱擷取完整記憶。
  • 更新、刪除或移動記憶 — 使用 update_memory 修改內容、標籤或到期日,使用 delete_memory 移除,或使用 move_memory 在不同工作區之間搬移。

文件

自託管的 MCP 記憶伺服器,採用混合 BM25 + 語義搜尋,並以 PostgreSQL + pgvector 為後端

適用於個人和團隊的自託管 MCP 記憶伺服器

License Python Version MCP Ruff MCP score

快速入門運作方式MCP 工具設定需求授權條款


✨ 功能特色

  • 🔍 混合搜尋 — 透過倒數排名融合 (Reciprocal Rank Fusion) 結合 BM25(全文檢索)與向量 KNN(pgvector)
  • 📂 多使用者 — 每位使用者僅能看見自己的記憶;工作區則用於共享團隊知識
  • 🛠️ 10 個 MCP 工具 — 儲存、檢索、回想、列出、依標籤搜尋、取得、更新、刪除、移動、列出工作區
  • 🌐 網頁介面 — 在瀏覽器中瀏覽、搜尋、編輯和刪除記憶;匯出/匯入 JSON
  • 🔒 OAuth 2.1 — 完整的內建授權伺服器,始終啟用
  • 🐘 PostgreSQL — 使用 pgvector 處理嵌入向量,tsvector 進行全文檢索
  • 📊 漸進式揭露 — 搜尋預設回傳精簡摘要;僅在需要時呼叫 get_memory(name),以減少 token 用量
  • 🔁 去重複 — 儲存前自動偵測近乎相同的記憶,防止雜訊累積

🆚 Memlord 比較

MemlordOpenMemorymcp-memory-servicebasic-memory
搜尋BM25 + 向量 + RRF僅向量 (Qdrant)BM25 + 向量 + RRFBM25 + 向量
嵌入本機 ONNX,無需設定預設 OpenAI;可選 Ollama本機 ONNX,無需設定本機 FastEmbed
儲存PostgreSQL + pgvectorPostgreSQL + QdrantSQLite-vec / Cloudflare VectorizeSQLite + Markdown 檔案
多使用者❌ 實務上為單一使用者⚠️ agent-ID 範圍劃分,無隔離
工作區✅ 共享 + 個人,邀請連結⚠️ "Apps" 命名空間⚠️ 標籤 + conversation_id✅ 每個專案旗標
驗證✅ OAuth 2.1❌ 無 (自託管)✅ OAuth 2.0 + PKCE
網頁介面✅ 瀏覽、編輯、匯出✅ Next.js 儀表板✅ 豐富的 UI、圖形視覺化、品質分數❌ 本機;僅雲端
MCP 工具10515+~20
自託管✅ 單一處理程序✅ Docker (3 個容器)
記憶輸入手動(明確儲存)由 LLM 自動擷取手動手動 (Markdown 筆記)
記憶類型事實 / 偏好 / 指示 / 回饋自動擷取的事實觀察 + wiki 連結
時間感知搜尋✅ 自然語言日期⚠️ 僅 REST,不在 MCP 工具中✅ recent_activity
Token 效率✅ 漸進式揭露✅ build_context 遍歷
匯入 / 匯出✅ JSON✅ ZIP (JSON + JSONL)✅ Markdown (人類可讀)
授權條款AGPL-3.0 / 商業Apache 2.0Apache 2.0AGPL-3.0

競爭對手的真正優勢:

  • OpenMemory — 從原始對話文字自動擷取記憶;無需手動決定儲存內容;良好的匯入/匯出功能
  • mcp-memory-service — 更豐富的網頁介面(圖形視覺化、品質評分、8 個分頁);更寬鬆的授權條款 (Apache 2.0);多種傳輸選項 (stdio、SSE、HTTP)
  • basic-memory — 記憶為人類可讀的 Markdown 檔案,無需伺服器即可編輯、版本控制和閱讀;wiki 風格的實體連結形成本機知識圖譜;約 20 個 MCP 工具

何時選擇 Memlord:

  • 您需要無需設定的本機嵌入 — ONNX 模型隨伺服器提供,無需 Ollama 或外部 API
  • 您運行多使用者團隊伺服器,具備適當的 OAuth 2.1 驗證和基於邀請的工作區
  • 您需要一個生產級資料庫 (PostgreSQL),其擴展性超越單機 SQLite
  • 明確地管理記憶 — 僅儲存重要的內容,並加以分類和標記,而非 LLM 決定擷取的所有內容
  • 您需要一個自託管的網頁介面,具備完整的 CRUD 和 JSON 匯出功能,無需雲端訂閱

🚀 快速入門

🐳 Docker

cp .env.example .env
docker compose up

HTTP 伺服器(多使用者、網頁介面、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 以使用網頁介面。MCP 端點位於 /mcp


🔍 運作方式

每個搜尋請求會並行執行 BM25 和向量 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/memlordPostgreSQL 連線 URL
MEMLORD_PORT8000伺服器連接埠
MEMLORD_BASE_URLhttp://localhost:8000OAuth 的公開 URL (HTTP 模式)
MEMLORD_OAUTH_JWT_SECRETmemlord-dev-secret-please-changeJWT 簽署密鑰 (HTTP 模式)

部署前,請將 MEMLORD_BASE_URL 設定為您的公開 URL,並變更 MEMLORD_OAUTH_JWT_SECRET


🛠️ MCP 工具

工具說明
store_memory儲存記憶(依內容冪等);偵測到近乎重複時引發錯誤;可選的 expires_at
retrieve_memory混合語義與全文檢索;預設回傳摘要
recall_memory依自然語言時間表達式搜尋;預設回傳摘要
list_memories具備類型/標籤篩選的分頁清單
search_by_tagAND/OR 標籤搜尋
get_memory依名稱擷取單一記憶及其完整內容
update_memory依名稱更新內容、類型、標籤、中繼資料或到期日(並可選擇重新命名)
delete_memory依名稱刪除
move_memory將記憶移動到不同的工作區
list_workspaces列出您所屬的工作區(包含個人工作區)

工作區管理(建立、邀請、加入、離開)透過網頁介面處理。


💻 系統需求

  • 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 採用雙重授權: