Memlord

官方

自托管的MCP内存服务器,适用于个人和团队使用

你可以用 Memlord MCP 做什么?

  • 存储带有类型和标签的记忆 — 使用 store_memory 保存事实、偏好、指令、反馈、决策或见解,并可选择设置过期时间。
  • 通过混合检索搜索记忆 — 调用 retrieve_memory 使用结合了 BM25 全文搜索和向量语义搜索的方式查找相关记忆,返回简洁的片段。
  • 按时间表达式回忆记忆 — 使用 recall_memory 查找匹配自然语言时间查询(如“上周”或“昨天”)的记忆。
  • 浏览并筛选所有记忆 — 调用 list_memories 并传入类型和标签过滤器,以分页方式浏览已存储的记忆。
  • 通过梦境整合记忆 — 运行 dream 提示,让助手审查 dream_report 候选内容,将近似重复项合并为见解,并以非破坏性方式淘汰已被取代的记忆。

文档

自托管 MCP 记忆服务器,采用混合 BM25 + 语义搜索,由 PostgreSQL + pgvector 提供支持

面向个人和团队的自托管 MCP 记忆服务器

License Python Version MCP Ruff MCP score

快速入门工作原理MCP 工具配置系统要求许可证


✨ 功能特性

  • 🔍 混合搜索 — 通过倒数排名融合(RRF)结合 BM25(全文搜索)和向量 KNN(pgvector)
  • 📂 多用户支持 — 每个用户只能看到自己的记忆;工作区用于共享团队知识
  • 🛠️ 11 个 MCP 工具 — 存储、检索、回忆、列表、按标签搜索、获取、更新、删除、移动、列出工作区、梦境报告
  • 💤 梦境功能 — 引导式整合过程(dream MCP 提示词 + dream_report 工具):查找近似重复和冲突的记忆,由客户端 LLM 驱动,以非破坏性方式将其合并为洞察
  • 🌐 Web 界面 — 在浏览器中浏览、搜索、编辑和删除记忆;支持 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
Web 界面✅ 浏览、编辑、导出✅ Next.js 仪表盘✅ 丰富的界面、图谱可视化、质量评分❌ 本地;仅云端
MCP 工具11515+~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 — 更丰富的 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_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列出您所属的工作区(包括个人工作区)
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 采用双重许可: