](https://badge.fury.io/js/@pinkpixel%2Fmem0-mcp)  ](https://nodejs.org/)    ](https://www.npmjs.com/package/@pinkpixel/mem0-mcp) ](https://github.com/pinkpixel-dev/mem0-mcp) ](https://smithery.ai/server/@pinkpixel-dev/mem0-mcp-server)
@pinkpixel/mem0 mcp mcp服务器✨
一种集成了以下功能的模型上下文协议(MCP)服务器 Mem0.ai 为LLM提供持久存储能力。它允许AI代理跨会话存储和检索信息。
此服务器使用 mem0ai Node.js SDK的核心功能。
特性🧠
工具
add_memory:将一段文本内容存储为与特定内容关联的内存userId.
- 必修的: content (字符串), userId (字符串) - 可选: sessionId (字符串), agentId (字符串), appId (字符串), metadata (对象) - 高级(云API): includes (字符串), excludes (字符串), infer (布尔值), outputFormat (字符串), customCategories (对象), customInstructions (字符串), immutable (布尔值), expirationDate (字符串) - 存储提供的文本,以便在未来的交互中调用。
search_memory:根据自然语言查询搜索存储的记忆中的特定内容userId.
- 必修的: query (字符串), userId (字符串) - 可选: sessionId (字符串), agentId (字符串), appId (字符串), filters (对象), threshold (编号) - 高级(云API): topK (数字), fields (阵列), rerank (布尔值), keywordSearch (布尔值), filterMemories (布尔值) - 基于语义相似性检索相关记忆。
delete_memory:按ID从存储器中删除特定内存。
- 必修的: memoryId (字符串), userId (字符串) - 可选: agentId (字符串), appId (字符串) - 永久删除指定的内存。
先决条件🔑
此服务器支持三种存储模式:
- 云存储模式 ☁️ (推荐用于生产)
- 需要a Mem0 API密钥 (提供为 MEM0_API_KEY 环境变量) - 内存持久存储在Mem0的云服务器上 - 不需要本地数据库 - 具有高级过滤和搜索功能的全功能支持
- Supabase存储模式 🗄️ (建议自住)
- 需要 Supabase凭据 (SUPABASE_URL 和 SUPABASE_KEY 环境变量) - 需要 OpenAI API密钥 (OPENAI_API_KEY 环境变量)用于嵌入 - 记忆会持久存储在您的Supabase数据库中 - 提供免费套餐,可自住选项 - 需要初始数据库设置(下面提供SQL迁移)
- 本地存储模式 💾 (仅用于开发/测试)
- 需要一个 OpenAI API密钥 (提供为 OPENAI_API_KEY 环境变量) - 内存存储在内存向量数据库中(默认情况下为非持久性) - 除非配置为持久存储,否则服务器重新启动时数据会丢失
安装和配置⚙️
您可以通过三种主要方式运行此服务器:
通过Smithery安装
通过以下方式自动安装Claude Desktop的Mem0内存服务器 铁匠铺:
npx -y @smithery/cli install @pinkpixel-dev/mem0-mcp-server --client claude1.全球安装(建议经常使用)
全局安装软件包并使用 mem0-mcp 命令:
npm install -g @pinkpixel/mem0-mcp全局安装后,您可以直接运行服务器:
mem0-mcp配置您的MCP客户端以使用全局命令:
云存储配置(全局安装)
{
"mcpServers": {
"mem0-mcp": {
"command": "mem0-mcp",
"args": [],
"env": {
"MEM0_API_KEY": "YOUR_MEM0_API_KEY_HERE",
"DEFAULT_USER_ID": "user123",
"DEFAULT_AGENT_ID": "your-agent-id",
"DEFAULT_APP_ID": "your-app-id"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}基础存储配置(全局安装)
{
"mcpServers": {
"mem0-mcp": {
"command": "mem0-mcp",
"args": [],
"env": {
"SUPABASE_URL": "YOUR_SUPABASE_PROJECT_URL",
"SUPABASE_KEY": "YOUR_SUPABASE_ANON_KEY",
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
"DEFAULT_USER_ID": "user123",
"DEFAULT_AGENT_ID": "your-agent-id",
"DEFAULT_APP_ID": "your-app-id"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}本地存储配置(全局安装)
{
"mcpServers": {
"mem0-mcp": {
"command": "mem0-mcp",
"args": [],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
"DEFAULT_USER_ID": "user123"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}2.使用 npx (建议偶尔使用)
配置您的MCP客户端(例如,Claude Desktop、Cursor、Cline、Roo Code等)以使用以下命令运行服务器 npx:
云存储配置(npx)
{
"mcpServers": {
"mem0-mcp": {
"command": "npx",
"args": [
"-y",
"@pinkpixel/mem0-mcp"
],
"env": {
"MEM0_API_KEY": "YOUR_MEM0_API_KEY_HERE",
"DEFAULT_USER_ID": "user123",
"DEFAULT_AGENT_ID": "your-agent-id",
"DEFAULT_APP_ID": "your-app-id"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}数据库存储配置(npx)
{
"mcpServers": {
"mem0-mcp": {
"command": "npx",
"args": [
"-y",
"@pinkpixel/mem0-mcp"
],
"env": {
"SUPABASE_URL": "YOUR_SUPABASE_PROJECT_URL",
"SUPABASE_KEY": "YOUR_SUPABASE_ANON_KEY",
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
"DEFAULT_USER_ID": "user123",
"DEFAULT_AGENT_ID": "your-agent-id",
"DEFAULT_APP_ID": "your-app-id"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}本地存储配置(npx)
{
"mcpServers": {
"mem0-mcp": {
"command": "npx",
"args": [
"-y",
"@pinkpixel/mem0-mcp"
],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
"DEFAULT_USER_ID": "user123"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}3.从克隆存储库运行
注意:此方法要求您首先对存储库进行git克隆。
克隆存储库、安装依赖项并构建服务器:
git clone https://github.com/pinkpixel-dev/mem0-mcp
cd mem0-mcp
npm install
npm run build然后,配置您的MCP客户端以直接使用以下命令运行构建的脚本 node:
云存储配置(克隆存储库)
{
"mcpServers": {
"mem0-mcp": {
"command": "node",
"args": [
"/absolute/path/to/mem0-mcp/build/index.js"
],
"env": {
"MEM0_API_KEY": "YOUR_MEM0_API_KEY_HERE",
"DEFAULT_USER_ID": "user123",
"DEFAULT_AGENT_ID": "your-agent-id",
"DEFAULT_APP_ID": "your-app-id"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}上层存储配置(克隆存储库)
{
"mcpServers": {
"mem0-mcp": {
"command": "node",
"args": [
"/absolute/path/to/mem0-mcp/build/index.js"
],
"env": {
"SUPABASE_URL": "YOUR_SUPABASE_PROJECT_URL",
"SUPABASE_KEY": "YOUR_SUPABASE_ANON_KEY",
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
"DEFAULT_USER_ID": "user123",
"DEFAULT_AGENT_ID": "your-agent-id",
"DEFAULT_APP_ID": "your-app-id"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}本地存储配置(克隆存储库)
{
"mcpServers": {
"mem0-mcp": {
"command": "node",
"args": [
"/absolute/path/to/mem0-mcp/build/index.js"
],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
"DEFAULT_USER_ID": "user123"
},
"disabled": false,
"alwaysAllow": [
"add_memory",
"search_memory",
"delete_memory"
]
}
}
}重要提示:
- 替换
/absolute/path/to/mem0-mcp/带有克隆存储库的实际绝对路径 - 使用
build/index.js文件,而不是src/index.ts文件 - MCP服务器需要干净的stdout进行协议通信——任何写入stdout的库或代码都可能干扰协议
Supabase设置🗄️
如果选择使用Supabase存储模式,则需要使用所需的表设置Supabase数据库。
1.创建一个Supabase项目
- 首选 网站 supabase.com 并创建一个新项目
- 注意项目设置中的项目URL和匿名密钥
2.运行SQL迁移
在Supabase SQL编辑器中运行以下SQL命令:
-- Enable the vector extension
create extension if not exists vector;
-- Create the memories table
create table if not exists memories (
id text primary key,
embedding vector(1536),
metadata jsonb,
created_at timestamp with time zone default timezone('utc', now()),
updated_at timestamp with time zone default timezone('utc', now())
);
-- Create the vector similarity search function
create or replace function match_vectors(
query_embedding vector(1536),
match_count int,
filter jsonb default '{}'::jsonb
)
returns table (
id text,
similarity float,
metadata jsonb
)
language plpgsql
as $$
begin
return query
select
t.id::text,
1 - (t.embedding query_embedding) as similarity,
t.metadata
from memories t
where case
when filter::text = '{}'::text then true
else t.metadata @> filter
end
order by t.embedding query_embedding
limit match_count;
end;
$$;
-- Create the memory_history table for history tracking
create table if not exists memory_history (
id text primary key,
memory_id text not null,
previous_value text,
new_value text,
action text not null,
created_at timestamp with time zone default timezone('utc', now()),
updated_at timestamp with time zone,
is_deleted integer default 0
);3.设置环境变量
将以下内容添加到MCP配置中:
SUPABASE_URL:您的Supabase项目URL(例如。,https://your-project.supabase.co)SUPABASE_KEY:您的Supabase匿名密钥OPENAI_API_KEY:您的OpenAI API密钥(用于嵌入)
Supabase模式的好处
✅ 永久存储 -数据在服务器重启后仍然存在 ✅ 免费套餐可用 -丰富的免费开发层 ✅ 可自我托管 -可以运行自己的Supabase实例 ✅ 可扩展的 -随着您的需求而成长 ✅ SQL访问 -直接访问数据库以进行高级查询 ✅ 实时功能 -内置实时订阅
参数配置🎯
了解Mem0参数
服务器使用四个关键参数来组织和范围内存:
userId-标识用户(必填)agentId-标识进行工具调用的LLM/代理(可选)appId-标识用户的项目/应用程序- 这控制了项目范围! (可选)sessionId-标识对话会话(映射到run_id在Mem0中)(可选)
环境变量回退🔄
MCP服务器支持用户标识和项目设置的环境变量回退:
DEFAULT_USER_ID:在工具调用中未提供后备用户ID时DEFAULT_AGENT_ID:用于标识LLM/代理的回退代理IDDEFAULT_APP_ID:用于项目范围界定的后备应用程序ID
优先级顺序(重要!)
- 刀具参数 (最高优先级)-LLM在工具调用中提供的值
- 环境变量 (回退)-来自MCP配置的值
行为示例:
// Your MCP config
"env": {
"DEFAULT_USER_ID": "john-doe",
"DEFAULT_AGENT_ID": "my-assistant",
"DEFAULT_APP_ID": "my-project"
}如果LLM提供参数:
{
"tool": "add_memory",
"arguments": {
"content": "Remember this",
"userId": "session-123", // ← Overrides DEFAULT_USER_ID
"agentId": "different-agent", // ← Overrides DEFAULT_AGENT_ID
"appId": "special-project" // ← Overrides DEFAULT_APP_ID
// sessionId omitted // ← No fallback, will be undefined
}
}结果:用途 session-123, different-agent,以及 special-project
如果LLM省略了参数:
{
"tool": "add_memory",
"arguments": {
"content": "Remember this"
// All IDs omitted - uses environment variables
}
}结果:用途 john-doe, my-assistant,以及 my-project
控制LLM行为
为确保使用环境变量,请指示LLM:
- *“使用环境中配置的默认用户ID”*
- *不要指定userId、agentId或appId参数*
- *“让服务器使用配置的默认值”*
系统提示推荐
为了获得最佳效果,请在系统提示中包含以下说明:
When creating memories, use:
- agentId: "my-assistant"
- appId: "my-project"
- sessionId: "current-conversation-id"示例配置使用 DEFAULT_USER_ID:
{
"mcpServers": {
"mem0-mcp": {
"command": "npx",
"args": [
"-y",
"@pinkpixel/mem0-mcp"
],
"env": {
"MEM0_API_KEY": "YOUR_MEM0_API_KEY_HERE",
"DEFAULT_USER_ID": "user123",
"ORG_ID": "your-org-id",
"PROJECT_ID": "your-project-id"
}
}
}
}或者直接与 node:
git clone https://github.com/pinkpixel-dev/mem0-mcp
cd mem0-mcp
npm install
npm run build{
"mcpServers": {
"mem0-mcp": {
"command": "node",
"args": [
"path/to/mem0-mcp/build/index.js"
],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
"DEFAULT_USER_ID": "user123"
}
}
}
}存储模式比较🔄
云存储(Mem0 API)☁️
- 默认情况下为持久 -您的记忆在会话和服务器重启期间仍然可用
- 不需要本地数据库 -所有数据都存储在Mem0的服务器上
- 更高的检索质量 -使用Mem0的优化搜索算法
- 附加字段 -支持
agent_id和threshold参数 - 完全管理 -无需设置或维护
- 需要 -一个Mem0 API密钥
上层存储🗄️
- 持久存储 -数据存储在您的Supabase PostgreSQL数据库中
- 免费套餐可用 -为开发和小型项目提供丰富的免费层
- 自助式 -可以运行自己的Supabase实例以实现完全控制
- SQL访问 -直接访问数据库以进行高级查询和分析
- 可扩展的 -随着您的需求而增长,从免费版到企业版
- 矢量搜索 -使用pgvector扩展进行高效的相似性搜索
- 实时功能 -内置实时订阅和webhooks
- 需要 -Subabase项目设置和用于嵌入的OpenAI API密钥
本地存储(OpenAI API)💾
- 默认情况下在内存中 -数据仅存储在RAM中 长期不持久。虽然可能会出现一些缓存,但您不应该依赖它进行永久存储。
- 数据丢失风险 -内存数据将在服务器重新启动、系统重新启动或进程终止时丢失
- 推荐 -仅用于开发、测试或临时使用
- 用于持久存储 -如果您需要可靠的长期内存,请使用云存储或Supabase选项
- 使用OpenAI嵌入 -用于矢量搜索功能
- 自足 -所有数据都保留在您的机器上
- 需要 -一个OpenAI API密钥
发展💻
克隆存储库并安装依赖项:
git clone https://github.com/pinkpixel-dev/mem0-mcp
cd mem0-mcp
npm install构建服务器:
npm run build对于在文件更改时自动重建的开发:
npm run watch调试🐞
由于MCP服务器通过stdio进行通信,调试可能具有挑战性。以下是一些方法:
- 使用MCP检查器:此工具可以监控MCP协议通信:
npm run inspector- 控制台的日志:添加控制台日志时,始终使用
console.error()而不是console.log()避免干扰MCP协议
- 环境文件:使用a
.env用于本地开发的文件,以简化设置API密钥和其他配置选项
技术实施说明🔧
高级Mem0 API参数
在使用Mem0 API的云存储模式时,您可以利用其他参数进行更复杂的内存管理。虽然没有在工具模式中明确公开,但这些可以包含在 metadata 添加记忆时的对象:
高级参数 add_memory:
| 参数 | 类型 | 说明 |
|---|---|---|
metadata | object | 存储有关内存的其他上下文(例如,位置、时间、标识符)。这可用于检索过程中的过滤。 |
includes | string | 要包含在内存中的特定首选项。 |
excludes | string | 要从内存中排除的特定首选项。 |
infer | boolean | 是推断记忆还是直接存储消息(默认值:true)。 |
output_format | string | 格式版本,v1.0(默认,已弃用)或v1.1(推荐)。 |
custom_categories | object | 包含名称和描述的类别列表。 |
custom_instructions | string | 处理和组织记忆的项目特定指南。 |
immutable | boolean | 内存是否不可变(默认值:false)。 |
expiration_date | string | 内存何时过期(格式:YYYY-MM-DD)。 |
org_id | string | 与此内存关联的组织ID。 |
project_id | string | 与此内存关联的项目ID。 |
version | string | 内存版本(v1已弃用,v2建议用于新应用程序)。 |
要在MCP服务器上使用这些参数,请在调用时将它们包含在元数据对象中 add_memory 工具。例如:
{
"content": "Important information to remember",
"userId": "user123",
"sessionId": "project-abc",
"metadata": {
"includes": "important context",
"excludes": "sensitive data",
"immutable": true,
"expiration_date": "2025-12-31",
"custom_instructions": "Prioritize this memory for financial questions",
"version": "v2"
}
}高级参数 search_memory:
Mem0 v2搜索API提供强大的过滤功能,可通过 filters 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
filters | object | 具有逻辑运算符和比较条件的复杂筛选器 |
top_k | integer | 要返回的顶部结果数(默认值:10) |
fields | string\[\] | 要包含在响应中的特定字段 |
rerank | boolean | 是否重新排序内存(默认值:false) |
keyword_search | boolean | 是否基于关键字搜索(默认值:false) |
filter_memories | boolean | 是否过滤内存(默认值:false) |
threshold | number | 结果的最小相似性阈值(默认值:0.3) |
org_id | string | 用于筛选内存的组织ID |
project_id | string | 用于筛选内存的项目ID |
这 filters 参数支持复杂的逻辑运算(AND、OR)和各种比较运算符:
| 操作员 | 描述 |
|---|---|
in | 匹配指定的任何值 |
gte | 大于或等于 |
lte | 小于或等于 |
gt | 大于 |
lt | 小于 |
ne | 不等于 |
icontains | 不区分大小写的安全壳检查 |
使用复杂过滤器的示例 search_memory 工具:
{
"query": "What are Alice's hobbies?",
"userId": "user123",
"filters": {
"AND": [
{
"user_id": "alice"
},
{
"agent_id": {"in": ["travel-agent", "sports-agent"]}
}
]
},
"threshold": 0.5,
"top_k": 5
}这将搜索与Alice的爱好相关的记忆,其中user_id是“Alice”,agent_id是“旅行社”或“体育社”,最多返回5个结果,相似性得分至少为0.5。
有关这些参数的更多详细信息,请参阅 Mem0 API文档.
安全记录器
MCP服务器实现了 SafeLogger 类,它选择性地将console.log调用从mem0ai库重定向到stderr,而不会中断MCP协议:
- 拦截console.log调用并检查堆栈跟踪以确定源
- 仅重定向来自mem0ai库或我们自己的代码的日志调用
- 为MCP协议通信保留干净的标准输出
- 进程退出时自动清理资源
这允许在MCP客户端内正常运行,同时保留有用的调试信息。
环境变量
服务器识别控制其行为的几个环境变量:
MEM0_API_KEY:云存储模式的API密钥OPENAI_API_KEY:本地存储模式的API密钥(嵌入)DEFAULT_USER_ID:内存操作的默认用户IDDEFAULT_AGENT_ID:用于标识LLM/代理的默认代理IDDEFAULT_APP_ID:项目范围的默认应用程序ID
重要提示:
- 会话ID 作为工具参数传递(例如。,
"sessionId": "my-session"),不是环境变量 - 当使用工具时。,
agentId,appId,sessionId)优先于环境变量,为您提供最大的灵活性 - org_id和project_id由Mem0自动设置 用户无法更改-使用
appId改为项目范围界定
______________________________________________________________________
由...制作❤️ 由粉红色像素
