Memlord

官方

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

你可以用 Memlord MCP 做什么?

  • 按类型和标签存储记忆 — 使用 store_memory 保存事实、偏好、指令或反馈,并自动检测近似重复。
  • 通过混合检索搜索记忆 — 使用 retrieve_memory 通过结合 BM25 全文搜索和语义向量搜索来查找记忆。
  • 按时间表达式回忆记忆 — 使用 recall_memory 通过自然语言时间查询(如 "last week" 或 "yesterday")查找记忆。
  • 列出并筛选记忆 — 使用 list_memories 按类型或标签浏览记忆,或通过 search_by_tag 使用 AND/OR 逻辑组合标签。
  • 按需获取完整记忆内容 — 当需要超出搜索摘要的详细信息时,使用 get_memory 按名称获取完整记忆。
  • 更新、删除或移动记忆 — 使用 update_memory 修改内容、标签或过期时间,使用 delete_memory 删除,或使用 move_memory 在工作空间之间移动。

文档

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

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

License Python Version MCP Ruff MCP score

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


✨ 功能特性

  • 🔍 混合搜索 — 通过倒数排名融合(RRF)结合 BM25(全文)与向量 KNN(pgvector)
  • 📂 多用户 — 每个用户只能看到自己的记忆;工作区用于共享团队知识
  • 🛠️ 10 个 MCP 工具 — 存储、检索、回忆、列表、按标签搜索、获取、更新、删除、移动、列出工作区
  • 🌐 Web 界面 — 在浏览器中浏览、搜索、编辑和删除记忆;支持 JSON 导出/导入
  • 🔒 OAuth 2.1 — 完整的进程内授权服务器,始终启用
  • 🐘 PostgreSQL — pgvector 用于嵌入,tsvector 用于全文搜索
  • 📊 渐进式信息披露 — 搜索默认返回紧凑摘要;仅在需要时调用 get_memory(name),减少令牌消耗
  • 🔁 去重 — 保存前自动检测近乎相同的记忆,防止噪音积累

🆚 Memlord 对比

MemlordOpenMemorymcp-memory-servicebasic-memory
搜索BM25 + 向量 + RRF仅向量(Qdrant)BM25 + 向量 + RRFBM25 + 向量
嵌入本地 ONNX,零配置默认 OpenAI;可选 Ollama本地 ONNX,零配置本地 FastEmbed
存储PostgreSQL + pgvectorPostgreSQL + QdrantSQLite-vec / Cloudflare VectorizeSQLite + Markdown 文件
多用户❌ 实际为单用户⚠️ 代理 ID 范围,无隔离
工作区✅ 共享 + 个人,邀请链接⚠️ “应用”命名空间⚠️ 标签 + conversation_id✅ 按项目标志
身份验证✅ OAuth 2.1❌ 无(自托管)✅ OAuth 2.0 + PKCE
Web 界面✅ 浏览、编辑、导出✅ Next.js 仪表板✅ 丰富的界面、图形可视化、质量评分❌ 本地;仅云端
MCP 工具10515+~20
自托管✅ 单进程✅ Docker(3 个容器)
记忆输入手动(显式存储)由 LLM 自动提取手动手动(Markdown 笔记)
记忆类型事实 / 偏好 / 指令 / 反馈自动提取的事实观察 + wiki 链接
时间感知搜索✅ 自然语言日期⚠️ 仅 REST,不在 MCP 工具中✅ recent_activity
令牌效率✅ 渐进式信息披露✅ 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 界面,具有完整的 CRUD 和 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\nall-MiniLM-L6-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列出你所属的工作区(包括个人工作区)

工作区管理(创建、邀请、加入、离开)通过 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 采用双重许可: