使用说明
Self-hosted MCP memory server for personal use and teams
Quickstart • How It Works • MCP Tools • Configuration • Requirements • License
✨ 特性
- 🔍 混合搜索 --BM25(全文)+通过互易秩融合融合的向量KNN(pgvector)
- 📂 多用户 --每个用户只看到自己的记忆;共享团队知识的工作区
- 🛠️ 11个MCP工具 --存储、检索、调用、列表、按标签搜索、获取、更新、删除、移动、列出工作区、梦想报告
- 💤 梦想 --有指导的巩固通行证(
dreamMCP提示+dream_report工具):在客户端LLM的驱动下,发现近乎重复和冲突的记忆,将其无损地合并为见解 - 🌐 Web用户界面 --在浏览器中浏览、搜索、编辑和删除记忆;导出/导入JSON
- 🔒 OAuth 2.1 --始终启用的完整进程内授权服务器
- 🐘 PostgreSQL --pgvector用于嵌入,tsvector用于全文搜索
- 📊 渐进式披露 --默认情况下,搜索返回紧凑的片段;呼叫
get_memory(name)只为你 需要,减少令牌使用 - 🔁 去重 --在保存之前自动检测几乎相同的内存,防止噪音累积
🆚 Memlord如何比较
| Memlord | OpenMemory | mcp存储器服务 | 基本存储器 | |
|---|---|---|---|---|
| 搜索 | BM25+矢量+RRF | 仅矢量 | ||
| 嵌入 | 本地ONNX,零配置 | OpenAI默认;Ollama可选 | 本地ONNX,零配置 | 本地FastEmbed |
| 存储 | PostgreSQL+pgvector | PostgreSQL+Qdrant | SQLite向量/Cloudflare矢量化 | SQLite+Markdown文件 |
| 多用户 | ✅ | ❌ 实践中的单用户 | ⚠️ 代理ID范围,无隔离 | ❌ |
| 工作空间 | ✅ 共享+个人,邀请链接 | ⚠️ “Apps”命名空间 | ⚠️ 标签+对话_id | ✅ 每个项目标志 |
| 认证 | ✅ OAuth 2.1 | ❌ 无(自托管) | ✅ OAuth 2.0+PKCE | ❌ |
| Web用户界面 | ✅ 浏览、编辑、导出 | ✅ Next.js仪表板 | ✅ 丰富的用户界面,即图形,质量分数 | ❌ 地方;仅限云 |
| MCP工具 | 11 | 5 | 15+ | ~20 |
| 自托管 | ✅ 单一进程 | ✅ Docker(3个容器) | ✅ | ✅ |
| 内存输入 | 手动(显式存储) | LLM自动提取 | 手动 | 手动(Markdown注释) |
| 内存类型 | 事实/偏好/指示/反馈/决策/见解 | 自动提取的事实 | -- | 观察+维基链接 |
| 时间感知搜索 | ✅ 自然语言日期 | ⚠️ 仅限REST,不在MCP工具中 | -- | ✅ 最近活动 |
| 代币效率 | ✅ 渐进式披露 | ❌ | — | ✅ build_context遍历 |
| 进口/出口 | ✅ JSON | ✅ ZIP(JSON+JSONL) | -- | ✅ Markdown(人类可读) |
| 许可证 | AGPL-3.0/商用 | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
竞争对手拥有真正优势的地方:
- OpenMemory --自动从原始对话文本中提取记忆;无需手动决定存储什么;好 进口
- mcp存储器服务 --更丰富的网络用户界面(图形可视化、质量评分、8个标签);更宽松的许可证(Apache 2.0);多种传输选项(stdio、SSE、HTTP)
- 基本存储器 --记忆是人类可读的Markdown文件,您可以编辑、版本控制和阅读,而无需任何 服务器;wiki风格的实体链接形成本地知识图;约20个MCP工具
何时选择Memlord:
- 你想要 零配置本地嵌入 -ONNX模型随服务器一起提供,不需要Ollama或外部API
- 你跑了一个 多用户团队服务器 使用适当的OAuth 2.1基于身份验证和邀请的工作区
- 你想要一个 生产级数据库 (PostgreSQL)可以扩展到单台机器的SQLite之外
- 你管理记忆 明确地 --准确存储重要的内容,键入和标记,而不是LLM决定的所有内容 提取
- 你想要一个 自托管Web UI 具有完整的CRUD和JSON导出,无需云订阅
🚀 快速入门
🐳 码头工人
cp .env.example .env
docker compose up
HTTP服务器(多用户、Web 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 对于Web UI。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 UI处理的。
💻 系统要求
- python 3.12
- PostgreSQL ≥15 pg向量 扩展
- 紫外线 --Python包管理器
👨💻 发展
pyright src/ # type check
ruff format . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date
📄 许可证
Memlord拥有双重许可: