Memlord
官方自托管的MCP内存服务器,适用于个人和团队使用
你可以用 Memlord MCP 做什么?
- 存储带有类型和标签的记忆 — 使用
store_memory保存事实、偏好、指令、反馈、决策或见解,并可选择设置过期时间。 - 通过混合检索搜索记忆 — 调用
retrieve_memory使用结合了 BM25 全文搜索和向量语义搜索的方式查找相关记忆,返回简洁的片段。 - 按时间表达式回忆记忆 — 使用
recall_memory查找匹配自然语言时间查询(如“上周”或“昨天”)的记忆。 - 浏览并筛选所有记忆 — 调用
list_memories并传入类型和标签过滤器,以分页方式浏览已存储的记忆。 - 通过梦境整合记忆 — 运行
dream提示,让助手审查dream_report候选内容,将近似重复项合并为见解,并以非破坏性方式淘汰已被取代的记忆。
文档
面向个人和团队的自托管 MCP 记忆服务器
快速入门 • 工作原理 • MCP 工具 • 配置 • 系统要求 • 许可证
✨ 功能特性
- 🔍 混合搜索 — 通过倒数排名融合(RRF)结合 BM25(全文搜索)和向量 KNN(pgvector)
- 📂 多用户支持 — 每个用户只能看到自己的记忆;工作区用于共享团队知识
- 🛠️ 11 个 MCP 工具 — 存储、检索、回忆、列表、按标签搜索、获取、更新、删除、移动、列出工作区、梦境报告
- 💤 梦境功能 — 引导式整合过程(
dreamMCP 提示词 +dream_report工具):查找近似重复和冲突的记忆,由客户端 LLM 驱动,以非破坏性方式将其合并为洞察 - 🌐 Web 界面 — 在浏览器中浏览、搜索、编辑和删除记忆;支持 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 | ❌ |
| Web 界面 | ✅ 浏览、编辑、导出 | ✅ Next.js 仪表盘 | ✅ 丰富的界面、图谱可视化、质量评分 | ❌ 本地;仅云端 |
| 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 — 更丰富的 Web 界面(图谱可视化、质量评分、8 个选项卡);更宽松的许可证(Apache 2.0);多种传输选项(stdio、SSE、HTTP)
- basic-memory — 记忆是人类可读的 Markdown 文件,无需任何服务器即可编辑、版本控制和阅读;wiki 风格的实体链接形成本地知识图谱;约 20 个 MCP 工具
何时选择 Memlord:
- 您需要零配置本地嵌入 — ONNX 模型随服务器提供,无需 Ollama 或外部 API
- 您运行一个多用户团队服务器,具有适当的 OAuth 2.1 身份验证和基于邀请的工作区
- 您需要一个生产级数据库(PostgreSQL),其扩展性超越单机 SQLite
- 您显式地管理记忆 — 精确存储重要内容,分类并标记,而非 LLM 决定提取的所有内容
- 您需要一个自托管 Web 界面,具有完整的增删改查和 JSON 导出功能,无需云订阅
🚀 快速入门
🐳 Docker
cp .env.example .env
docker compose up
HTTP 服务器 (多用户、Web 界面、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 访问 Web 界面。MCP 端点位于 /mcp。
🔍 工作原理
每个搜索请求并行运行 BM25 和向量 KNN,然后通过倒数排名融合合并结果:
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 淘汰被取代的记忆 — 全程非破坏性。
工作区管理(创建、邀请、加入、离开)通过 Web 界面处理。
💻 系统要求
- 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 购买。