如何利用 OpenMemory MCP 增强客户端的上下文感知能力

2025-06-08

如何利用 OpenMemory MCP 增强客户端的上下文感知能力

人工智能发展日新月异,大型语言模型 (LLM) 让事情变得简单得多。然而,它们也面临一个根本性的限制: 它们会在会话间忘记所有信息

如果有一种方法可以实现个人的、可移植的 LLM“内存层”,它位于您的系统本地,并且能够完全控制您的数据,那会怎样?

今天,我们将学习 OpenMemory MCP,这是一个基于 Mem0(AI 代理的内存层)构建的私有、本地优先的内存层。它支持在兼容 MCP 的客户端(例如 Cursor、Claude Desktop、Windsurf、Cline 等)上实现持久且上下文感知的 AI。

本指南讲解了如何安装、配置和操作 OpenMemory MCP 服务器。此外,它还涵盖了内部架构、流程、底层组件以及实际用例。

让我们开始吧。


涵盖哪些内容?

简而言之,我们正在详细介绍这些主题。

  • OpenMemory MCP Server 是什么以及它为什么重要?
  • 设置和运行 OpenMemory 的分步指南。
  • 仪表板中可用的功能(以及 UI 背后的功能)。
  • 安全、访问控制和架构概述。
  • 带有示例的实际用例。

1.什么是OpenMemory?它为什么重要?

OpenMemory MCP是专为 MCP 客户提供的私有本地解决方案 memory layer 。它提供跨平台存储、管理和利用 AI 内存的基础设施,同时将数据存储在本地系统上。

简单来说,它就像是memories使用标准MCP 协议的任何 LLM 客户端的矢量支持层,并且可以与Mem0等工具一起开箱即用

主要功能:

  • 在会话中存储和调用任意文本块(memories),因此您的 AI 无需从零开始。

  • Qdrant使用底层的向量存储( )来执行基于相关性的检索,而不仅仅是关键字匹配。

  • 完全在您的基础设施上运行(Docker + Postgres + Qdrant),无需向外发送任何数据。

  • 暂停或撤销任何客户端的访问app or memory level,并对每次读取或写入进行审计日志。

  • 包括一个仪表板(next.js & redux),显示谁在读/写记忆以及状态变化的历史记录。

 

🔁 工作原理(基本流程)

以下是核心流程:

  1. 您可以使用单个命令启动 OpenMemory(API、Qdrant、Postgres)docker-compose

  2. API 进程本身托管一个 MCP 服务器(在后台使用 Mem0),该服务器通过 SSE 使用标准 MCP 协议。

  3. 您的 LLM 客户端打开一个 SSE 流到 OpenMemory 的/mcp/...端点并调用诸如add_memories()search_memory()之类的方法list_memories()

  4. 其余所有内容,包括向量索引、审计日志和访问控制,均由 OpenMemory 服务处理。

您可以在mem0.ai/openmemory-mcp上观看官方演示并阅读更多内容


2. 设置和运行 OpenMemory 的分步指南。

在本节中,我们将介绍如何设置 OpenMemory 并在本地运行它。

该项目有两个需要运行的主要组件:

  • api/- 后端 API 和 MCP 服务器
  • ui/- 前端 React 应用程序(仪表板)

步骤 1:系统先决条件

在开始之前,请确保你的系统已安装以下软件。我已附上文档链接,方便你查看。

GNU Make 是一个自动化构建工具。我们将使用它来完成安装过程。

在继续下一步之前,请确保 Docker Desktop 正在运行。

 

第 2 步:克隆 repo 并设置你的 OpenAI API 密钥

您需要使用以下命令克隆github.com/mem0ai/mem0上可用的 repo 。

git clone <https://github.com/mem0ai/mem0.git>
cd openmemory
Enter fullscreen mode Exit fullscreen mode

接下来,将您的OpenAI API 密钥设置为环境变量。

export OPENAI_API_KEY=your_api_key_here
Enter fullscreen mode Exit fullscreen mode

OpenAI API密钥

OpenAI API密钥

 

此命令仅针对当前终端会话设置密钥。该密钥仅持续到您关闭该终端窗口为止。

导出 openai api 密钥

 

步骤 3:设置后端

后端在 Docker 容器中运行。要启动后端,请在根目录中运行以下命令:

# Copy the environment file and edit the file to update OPENAI_API_KEY and other secrets
make env

# Build all Docker images
make build

# Start Postgres, Qdrant, FastAPI/MCP server
make up
Enter fullscreen mode Exit fullscreen mode

.env.local文件将具有以下约定。

OPENAI_API_KEY=your_api_key
Enter fullscreen mode Exit fullscreen mode

进行构建

化妆品

设置完成后,您的 API 将在 上线http://localhost:8000

您还应该看到在 Docker Desktop 中运行的容器。

码头工人

以下是您可以使用的一些其他有用的后端命令:

# Run database migrations
make migrate

# View logs
make logs

# Open a shell in the API container
make shell

# Run tests
make test

# Stop the services
make down
Enter fullscreen mode Exit fullscreen mode

 

步骤 4:设置前端

前端是一个 Next.js 应用程序。要启动它,只需运行:

# Installs dependencies using pnpm and runs Next.js development server
make ui
Enter fullscreen mode Exit fullscreen mode

设置前端

安装成功后,您可以导航到http://localhost:3000OpenMemory 仪表板,它将指导您在 MCP 客户端中安装 MCP 服务器。

仪表板的外观如下。

仪表板

对于上下文,您的 MCP 客户端打开一个 SSE 通道到GET /mcp/{client_name}/sse/{user_id},该通道连接两个上下文变量(user_idclient_name)。

在仪表板上,您将找到根据您选择的客户端偏好(如 Cursor、Claude、Cline、Windsurf)安装 MCP 服务器的单行命令。

让我们在 Cursor 中安装它,命令看起来像这样。

npx install-mcp i https://mcp.openmemory.ai/xyz_id/sse --client cursor
Enter fullscreen mode Exit fullscreen mode

install-mcp如果尚未安装,它将提示您安装,然后您只需为服务器提供一个名称。

我目前使用的是虚拟命令,所以请忽略它。打开光标设置,检查侧边栏中的 MCP 选项以验证连接。

光标

在 Cursor 中打开一个新聊天并提供示例提示,就像我要求它记住一些关于我的事情(我从我的 GitHub 个人资料中获取的)。

最终节省

这将触发add_memories()调用并存储记忆。刷新仪表板并转到选项Memories卡以检查所有这些记忆。

系统会自动为记忆创建类别,这些类别就像可选标签(通过 GPT-4o 分类)。

回忆

您还可以连接其他 MCP 客户端,如 Windsurf。

风帆冲浪安装

每个 MCP 客户端可以“调用”四个标准内存操作之一:

  • add_memories(text)→ 在 Qdrant 中存储文本,插入/更新Memory行和审计条目

  • search_memory(query)→ 嵌入查询,使用可选的 ACL 过滤器运行向量搜索,记录每次访问

  • list_memories()→ 检索用户的所有存储向量(通过 ACL 过滤)并记录列表

  • delete_all_memories():清除所有记忆

所有响应都通过同一个 SSE 连接进行传输。仪表板显示所有活动连接、哪些应用正在访问内存以及读/写操作的详细信息。

有多少应用程序与访问详细信息相关

有多少应用程序与访问/创建的记忆的详细信息相关联

 


3. 仪表板中可用的功能(以及 UI 背后的内容)

OpenMemory 仪表板包括三个主要路线:

  • /- 仪表板
  • /memories– 查看和管理存储的记忆
  • /apps– 查看已连接的应用程序

简而言之,让我们看看仪表板上的所有可用功能,以便您了解基本概念。

1)安装OpenMemory客户端

  • 获取您唯一的 SSE 端点或使用单行安装命令
  • 在各种客户端选项卡之间切换MCP Link(Claude、Cursor、Cline 等)

2)查看内存和应用程序统计信息

  • 查看你存储了多少回忆
  • 查看已连接的应用程序数量
  • 输入任意文本即可在所有记忆中进行实时搜索(去抖动)

代码可在 处获取ui/components/dashboard/Stats.tsx,其中:

  • 从 Redux 读取(profile.totalMemories, profile.totalApps, profile.apps[]
  • 调用useStats().fetchStats()mount 来填充存储
  • 呈现“总记忆数”和“已连接的应用程序总数”,最多可显示 4 个应用程序图标

搜索

3)刷新或手动创建记忆

  • Refresh button(重新调用当前路线的适当获取器)
  • Create Memory按钮(从 CreateMemoryDialog 打开模式)

创造记忆

5)您可以打开过滤器面板进行选择:

  • 包含哪些应用程序
  • 包括哪些类别
  • 是否显示已归档项目
  • 按哪一列排序(内存、应用程序名称、创建日期)
  • 一键清除所有过滤器

筛选

6)您可以检查和管理个人记忆

单击任意内存即可:

  • 存档、暂停、恢复或删除记忆
  • 检查访问日志和相关记忆

个人记忆

您还可以选择多个记忆并执行批量操作。

批量操作

🖥️ UI 背后:关键组件

以下是涉及的一些重要前端组件:

  • ui/app/memories/components/MemoryFilters.tsx:处理搜索输入、过滤对话框触发以及存档/暂停/删除等批量操作。同时管理行的选择状态。

  • ui/app/memories/components/MemoriesSection.tsx:加载、分页和显示记忆列表的主要容器。

  • ui/app/memories/components/MemoryTable.tsx– 呈现实际的记忆表(ID、内容、客户端、标签、创建日期、状态)。每行都可以通过 MemoryActions 进行相应的操作(编辑、删除、复制链接)。

对于状态管理和 API 调用,它使用干净的钩子:

  • useStats.ts:加载高级统计数据,如总内存和应用程序数量。
  • useMemoriesApi.ts:处理获取、删除和更新记忆。
  • useAppsApi.ts:检索应用程序信息和每个应用程序的内存详细信息。
  • useFiltersApi.ts:支持获取类别和更新过滤器状态。

这些部分共同构成了一个响应迅速的实时仪表板,让您可以控制 AI 内存层的各个方面。


4. 安全、访问控制和架构概述。

在使用 MCP 协议或任何 AI 代理系统时,安全性是不可妥协的。因此,我们来简单讨论一下。

🎯 安全

OpenMemory 的设计遵循隐私优先原则。它存储所有内存数据均本地存储在您的基础设施中,使用 Dockerized 组件(FastAPIPostgresQdrant)。

敏感输入通过 SQLAlchemy 进行安全处理,并带有参数绑定功能,以防止注入攻击。每次内存交互(包括添加、检索和状态更改)都会记录下来,以便通过MemoryStatusHistoryMemoryAccessLog表进行追溯。

虽然身份验证不是内置的,但所有端点都需要user_id并准备在外部身份验证网关(如 OAuth 或 JWT)后面进行保护。

FastAPI 上的 CORSallow_origins=["*"]对于本地/开发来说是完全开放的( ),但对于生产环境,您应该将其从默认开放状态收紧,以限制对受信任客户端的访问。

 

🎯 访问控制

细粒度的访问控制是 OpenMemory 的核心关注点之一。从高层次上讲,该access_controls表定义了应用程序与特定内存之间的允许/拒绝规则。

这些规则通过函数强制执行check_memory_access_permissions,该函数考虑内存状态(activepaused等等)、应用程序活动状态(is_active)和现有的 ACL 规则。

在实际应用中,您可以暂停整个应用(禁用写入)、归档或暂停单个内存,或按类别或用户应用过滤器。已暂停或非活动状态的条目将被隐藏,无法通过工具访问和搜索。这种分层访问模型确保您能够自信地控制任何级别的内存访问。

正如你所看到的,我暂停了对记忆的访问,这导致了一种inactive状态。

暂停访问

 

🎯 建筑

让我们简要介绍一下系统架构。您可以随时参考代码库了解更多详细信息。

1)后端(FastAPI + FastMCP over SSE):

  • 公开普通的 REST 表面(/api/v1/memories/api/v1/apps/api/v1/stats)和
  • 代理使用MCP“工具”接口(/mcp/messages, )通过服务器发送事件 (SSE)调用( , )。/mcp/sse/<client>/<user>add_memoriessearch_memorylist_memories
  • 它连接到 Postgres 获取关系元数据,并连接到 Qdrant 获取向量搜索。

2)向量存储(Qdrant via the mem0 client):所有记忆均在 Qdrant 中进行语义索引,并在查询时应用用户和应用程序特定的过滤器。

3)关系元数据(SQLAlchemy + Alembic):

  • 跟踪用户、应用程序、内存条目、访问日志、类别和访问控制。
  • Alembic 管理模式迁移。
  • 默认数据库是 SQLite (openmemory.db),但您可以指向DATABASE_URLPostgres

4)前端仪表板(Next.js):

  • Redux 支持实时可观察性界面
  • Hooks + Redux Toolkit 管理状态,Axios 与 FastAPI 端点通信
  • 实时图表(Recharts)、轮播、表单(React Hook Form)探索你的记忆

5)基础设施和开发工作流程

  • docker-compose.yml(api/docker-compose.yml)包括 Qdrant 服务和 API 服务
  • Makefile提供迁移、测试、热重载的快捷方式
  • 测试与后端逻辑同时存在(通过pytest

总的来说,这给了你自托管 LLM 内存平台:

⚡ 在关系数据库和向量索引中存储和版本控制您的聊天内存
⚡ 使用每个应用程序的 ACL 和状态转换(活动/暂停/存档)来保护它
⚡ 通过 Qdrant 进行语义搜索
⚡ 通过丰富的 Next.js UI 进行观察和控制。

在下一部分中,我们将探讨可以使用 OpenMemory 构建的一些高级用例和创造性的工作流程。


5. 带有示例的实际用例。

一旦你熟悉了 OpenMemory,你就会意识到它可以用在任何你想要 AIremember跨交互的地方,这使得它非常个性化。

以下是一些可以使用 OpenMemory 的先进且有创意的方法。

✅ 具有记忆层的多智能体研究助理

想象一下构建一个工具,其中不同的 LLM 代理专门负责不同的研究领域(例如,一个负责学术论文,一个负责 GitHub 存储库,另一个负责新闻)。

每个代理都会存储其发现的内容add_memories(text),然后主代理会运行search_memory(query)所有先前的结果。

技术流程可以是:

  • 每个子代理都是一个 MCP 客户端:
       - 将检索到的数据摘要添加到 OpenMemory。-
       使用自动分类 (GPT) 标记记忆。

  • 主代理打开 SSE 通道并使用:
       -search_memory("latest papers on diffusion models")提取所有相关上下文。
       

  • 仪表板显示哪个代理存储了什么,您可以使用 ACL 限制代理之间的内存访问。

如果您仍然好奇,可以查看这个 GitHub repo,其中展示了如何使用 Gemini 2.0 构建研究多代理系统 - 设计模式概述

提示:我们可以添加一个 LangGraph 编排层,其中每个代理都是一个节点,内存的写入/读取操作会随时间推移被跟踪。这样,我们就可以可视化每个研究线程的知识流和来源。

 

✅ 具有持久跨会话记忆的智能会议助理

我们可以构建类似会议笔记记录器(Zoom、Google Meet 等)的东西,它可以:

  • 通过 LLM 提取摘要。
  • 记住通话过程中的行动事项。
  • 在未来的会议中自动检索相关背景。

我们来看看技术流程是什么样的:

  • add_memories(text)每次通话后,提供通话记录和行动事项。
  • 下次会议:search_memory("open items for Project X")在通话开始前运行。
  • 相关内存(标有appropriate category)显示在 UI 中,并且审计日志会跟踪读取了哪个内存以及何时读取。

提示:与工具(如 Google Drive、Notion、GitHub)集成,以便存储的行动项链接回实时文档和任务。

 

✅ 随着使用而不断发展的代理编码助手

基于 CLI 的编码助手可以通过存储使用模式、重复问题、编码偏好和项目特定的提示来了解您的工作方式。

技术流程如下:

  • 当您问:“为什么我的 SQLAlchemy 查询失败?”时,它会通过存储错误和修复来存储add_memories

  • 下次您输入:“SQLAlchemy 连接再次出现问题”时,助手会自动运行search_memory("sqlalchemy join issue")并检索之前的修复。

  • 您可以通过仪表板检查所有存储的内存/memories,并暂停任何过时或不正确的内存。

提示:它甚至可以连接到 codemod 工具(如jscodeshift),以便在代码库发展时根据您存储的偏好自动重构代码。

 

在每种情况下,OpenMemory 的矢量搜索(用于semantic recall)、关系元数据(用于audit/logging)和实时仪表板(用于observability和动态)的组合可让您构建感觉像记忆一样的access control上下文感知应用程序。


现在您的 MCP 客户端拥有真正的内存。

您可以在一个仪表板上追踪每次访问,暂停所需的操作并审核所有内容。最棒的是,所有内容都本地存储在您的系统上。

如果您有任何问题或反馈,请告诉我。

祝你今天过得愉快!下次再见 :)

你可以在anmolbaranwal.com
查看 我的作品 感谢阅读!🥰
叽叽喳喳 GitHub 领英

结尾挥手告别的 GIF

链接链接 https://dev.to/anmolbaranwal/how-to-make-your-clients-more-context-aware-with-openmemory-mcp-4h71
PREV
DEV 上 50 多个创造有价值内容的组织列表
NEXT
如何用一行代码在 Next.js 中实现无头 CMS