Memlord
官方自託管MCP記憶伺服器,適用於個人使用與團隊協作
你可以用 Memlord MCP 做什麼?
- 儲存帶有類型和標籤的記憶 — 使用
store_memory儲存事實、偏好、指示、回饋、決策或見解,並可選擇設定到期時間。 - 使用混合檢索搜尋記憶 — 呼叫
retrieve_memory透過結合 BM25 全文檢索與向量語意搜尋來尋找相關記憶,並回傳簡潔的片段。 - 依時間表達式回憶記憶 — 使用
recall_memory尋找符合自然語言時間查詢(例如 "last week" 或 "yesterday")的記憶。 - 瀏覽與篩選所有記憶 — 呼叫
list_memories並搭配類型和標籤篩選條件,以分頁方式瀏覽已儲存的記憶。 - 透過夢境整合記憶 — 執行
dream提示,讓助手審查dream_report候選項目,將近似重複的內容合併為見解,並以非破壞性方式淘汰已被取代的記憶。
文件
適用於個人和團隊的自託管 MCP 記憶伺服器
快速入門 • 運作方式 • MCP 工具 • 設定 • 系統需求 • 授權條款
✨ 功能特色
- 🔍 混合搜尋 — 透過倒數排名融合 (Reciprocal Rank Fusion) 結合 BM25(全文檢索)與向量 KNN(pgvector)
- 📂 多使用者 — 每位使用者僅能看到自己的記憶;工作區則用於共享團隊知識
- 🛠️ 11 個 MCP 工具 — 儲存、擷取、回想、列出、依標籤搜尋、取得、更新、刪除、移動、列出工作區、夢境報告
- 💤 夢境 — 一個引導式的整合流程(
dreamMCP 提示詞與dream_report工具):找出近乎重複和衝突的記憶,並在客戶端 LLM 的驅動下,以非破壞性方式將其合併為洞察 - 🌐 網頁介面 — 在瀏覽器中瀏覽、搜尋、編輯和刪除記憶;匯出/匯入 JSON
- 🔒 OAuth 2.1 — 完整的內建授權伺服器,始終啟用
- 🐘 PostgreSQL — 使用 pgvector 處理嵌入向量,使用 tsvector 進行全文檢索
- 📊 漸進式揭露 — 搜尋預設回傳精簡摘要;僅在需要時呼叫
get_memory(name),以減少 token 用量 - 🔁 去重 — 儲存前自動偵測近乎相同的記憶,防止雜訊累積
🆚 Memlord 與其他方案的比較
| Memlord | OpenMemory | mcp-memory-service | basic-memory | |
|---|---|---|---|---|
| 搜尋 | BM25 + 向量 + RRF | 僅向量 (Qdrant) | BM25 + 向量 + RRF | BM25 + 向量 |
| 嵌入模型 | 本機 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 | ❌ |
| 網頁介面 | ✅ 瀏覽、編輯、匯出 | ✅ Next.js 儀表板 | ✅ 豐富的 UI、圖形視覺化、品質分數 | ❌ 本機;僅限雲端 |
| MCP 工具 | 11 | 5 | 15+ | ~20 |
| 自託管 | ✅ 單一處理程序 | ✅ Docker (3 個容器) | ✅ | ✅ |
| 記憶輸入 | 手動 (明確儲存) | 由 LLM 自動擷取 | 手動 | 手動 (Markdown 筆記) |
| 記憶類型 | 事實 / 偏好 / 指示 / 回饋 / 決策 / 洞察 | 自動擷取的事實 | — | 觀察 + wiki 連結 |
| 時間感知搜尋 | ✅ 自然語言日期 | ⚠️ 僅限 REST,不在 MCP 工具中 | — | ✅ recent_activity |
| Token 效率 | ✅ 漸進式揭露 | ❌ | — | ✅ build_context 遍歷 |
| 匯入 / 匯出 | ✅ JSON | ✅ ZIP (JSON + JSONL) | — | ✅ Markdown (人類可讀) |
| 授權條款 | AGPL-3.0 / 商業 | Apache 2.0 | Apache 2.0 | AGPL-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\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 | PostgreSQL 連線 URL |
MEMLORD_PORT | 8000 | 伺服器連接埠 |
MEMLORD_BASE_URL | http://localhost:8000 | OAuth 的公開 URL (HTTP 模式) |
MEMLORD_OAUTH_JWT_SECRET | memlord-dev-secret-please-change | JWT 簽署密鑰 (HTTP 模式) |
部署前,請將 MEMLORD_BASE_URL 設定為您的公開 URL,並變更 MEMLORD_OAUTH_JWT_SECRET。
🛠️ MCP 工具
| 工具 | 說明 |
|---|---|
store_memory | 儲存記憶(基於內容的冪等操作);若近乎重複則引發提示;可選的 expires_at |
retrieve_memory | 混合語義與全文搜尋;預設回傳摘要 |
recall_memory | 依自然語言時間表達式搜尋;預設回傳摘要 |
list_memories | 具備類型/標籤篩選的分頁清單 |
search_by_tag | AND/OR 標籤搜尋 |
get_memory | 依名稱取得單一記憶的完整內容(包含已過期的) |
update_memory | 依名稱更新內容、類型、標籤、中繼資料或到期日(並可選擇重新命名) |
delete_memory | 依名稱刪除 |
move_memory | 將記憶移動到不同的工作區 |
list_workspaces | 列出您所屬的工作區(包含個人工作區) |
dream_report | 唯讀的整合候選項目:相似的記憶對、已過期和即將過期的記憶 |
dream MCP 提示詞會引導客戶端 LLM 對 dream_report 的輸出進行完整的整合流程:分類相似的記憶對(重複 / 互補 / 衝突),合併為 insight 記憶,並透過 expires_at 淘汰被取代的記憶 — 全程為非破壞性操作。
工作區管理(建立、邀請、加入、離開)則透過網頁介面處理。
💻 系統需求
- 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 購買。