自托管记忆服务器

Memlord是一款自托管的MCP记忆服务器,支持混合BM25+语义搜索,适用于个人和团队使用,提供多用户支持、工作空间管理和OAuth 2.1认证。

  • by MyrikLD
  • Python
  • 本地部署
  • 29 星标
  • 更新于
在 GitHub 查看 MyrikLD/mnemos

使用说明

Self-hosted MCP memory server for personal use and teams

Quickstart • How It Works • MCP Tools • Configuration • Requirements • License


✨ 特性

  • 🔍 混合搜索 --BM25(全文)+通过互易秩融合融合的向量KNN(pgvector)
  • 📂 多用户 --每个用户只看到自己的记忆;共享团队知识的工作区
  • 🛠️ 11个MCP工具 --存储、检索、调用、列表、按标签搜索、获取、更新、删除、移动、列出工作区、梦想报告
  • 💤 梦想 --有指导的巩固通行证(dream MCP提示+ 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拥有双重许可:

  • AGPL-3.0 --免费开源使用。如果将修改后的版本作为网络服务运行,则必须 发布你的源代码。
  • 商业许可证 --用于专有或闭源部署。联系 sergey@memlord.com或dmitry@memlord.com购买。