返回市场
内存0-MCP

内存0-MCP

作者:pinkpixel-dev81 星标更新:2025-09-29

项目介绍

@pinkpixel/mem0-mcp MCP 服务器 ✨

一个与 Mem0.ai 集成的模型上下文协议(MCP)服务器,为大语言模型(LLMs)提供持久记忆能力。它允许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 (字符串)
    • 永久移除指定的记忆。

先决条件 🔑

此服务器支持三种存储模式:

  1. 云存储模式 ☁️ (推荐用于生产环境)

    • 需要一个 Mem0 API 密钥(作为 MEM0_API_KEY 环境变量提供)
    • 记忆持久存储在 Mem0 的云服务器上
    • 不需要本地数据库
    • 支持全部功能,包括高级过滤和搜索
  2. Supabase 存储模式 🗄️ (推荐用于自托管)

    • 需要 Supabase 凭证SUPABASE_URLSUPABASE_KEY 环境变量)
    • 需要 OpenAI API 密钥(作为 OPENAI_API_KEY 环境变量)用于嵌入
    • 记忆持久存储在您的 Supabase 数据库中
    • 提供免费层级,可自托管选项
    • 需要初始数据库设置(提供 SQL 迁移)
  3. 本地存储模式 💾 (仅限开发/测试)

    • 需要 OpenAI API 密钥(作为 OPENAI_API_KEY 环境变量提供)
    • 记忆存储在一个内存向量数据库中(默认非持久化)
    • 除非配置为持久存储,否则数据会在服务器重启时丢失

安装与配置 ⚙️

您可以以三种主要方式运行此服务器:

通过 Smithery 安装

要通过 Smithery 自动安装 Mem0 记忆服务器:

npx -y @smithery/cli install @pinkpixel-dev/mem0-mcp-server --client claude

1. 全局安装(推荐频繁使用)

全局安装包并使用 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"
      ]
    }
  }
}

Supabase 存储配置(全局安装)

{
  "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"
      ]
    }
  }
}

Supabase 存储配置(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 clone https://github.com/pinkpixel-dev/mem0-mcp
cd mem0-mcp
npm install
npm run build

然后,配置您的 MCP 客户端直接使用 node 运行构建脚本:

云存储配置(克隆的仓库)

{
  "mcpServers": {
    "mem0-mcp": {
      "command": "node",
      "args": [
        "/绝对路径到/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"
      ]
    }
  }
}

Supabase 存储配置(克隆的仓库)

{
  "mcpServers": {
    "mem0-mcp": {
      "command": "node",
      "args": [
        "/绝对路径到/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": [
        "/绝对路径到/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"
      ]
    }
  }
}

重要提示:

  1. /绝对路径到/mem0-mcp/ 替换为您实际克隆的仓库的绝对路径
  2. 使用 build/index.js 文件,而不是 src/index.ts 文件
  3. MCP 服务器需要干净的 stdout 用于协议通信 - 任何写入 stdout 的库或代码可能会干扰协议

Supabase 设置 🗄️

如果您选择使用 Supabase 存储模式,您需要设置您的 Supabase 数据库所需的表。

1. 创建 Supabase 项目

  1. 转到 supabase.com 并创建一个新的项目
  2. 记下您的项目 URL 和匿名密钥

2. 运行 SQL 迁移

在 Supabase SQL 编辑器中运行这些 SQL 命令:

-- 启用向量扩展
create extension if not exists vector;

-- 创建 memories 表
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 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;
$$;

-- 创建 memory_history 表以跟踪历史记录
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 参数

服务器使用四个关键参数来组织和限定记忆:

  1. userId - 标识用户(必需)
  2. agentId - 标识调用工具的 LLM/代理(可选)
  3. appId - 标识用户的项目/应用程序 - 这控制项目范围!(可选)
  4. sessionId - 标识对话会话(映射到 Mem0 中的 run_id)(可选)

环境变量回退 🔄

MCP 服务器支持环境变量回退以识别用户和项目设置:

  • DEFAULT_USER_ID: 当工具调用中未提供时使用的回退用户 ID
  • DEFAULT_AGENT_ID: 用于标识 LLM/代理的回退代理 ID
  • DEFAULT_APP_ID: 用于项目限定的回退应用 ID

优先级顺序(重要!)

  1. 工具参数(最高优先级) - LLM 在工具调用中提供的值
  2. 环境变量(回退) - 您 MCP 配置中的值

示例行为:

// 您的 MCP 配置
"env": {
  "DEFAULT_USER_ID": "john-doe",
  "DEFAULT_AGENT_ID": "my-assistant",
  "DEFAULT_APP_ID": "my-project"
}

如果 LLM 提供参数:

{
  "tool": "add_memory",
  "arguments": {
    "content": "记住这个",
    "userId": "session-123",        // ← 覆盖 DEFAULT_USER_ID
    "agentId": "different-agent",   // ← 覆盖 DEFAULT_AGENT_ID
    "appId": "special-project"      // ← 覆盖 DEFAULT_APP_ID
    // sessionId 省略           // ← 没有回退,将是未定义的
  }
}

结果:使用 session-123different-agentspecial-project

如果 LLM 省略参数:

{
  "tool": "add_memory",
  "arguments": {
    "content": "记住这个"
    // 所有 ID 省略 - 使用环境变量
  }
}

结果:使用 john-doemy-assistantmy-project

控制 LLM 行为

为了确保使用您的环境变量,请指示您的 LLM:

  • "使用环境中配置的默认用户 ID"
  • "不要指定 userId, agentId 或 appId 参数"
  • "让服务器使用配置的默认值"

系统提示建议

为了获得最佳效果,在您的系统提示中包含如下指令:

当创建记忆时,使用:
- agentId: "my-assistant"
- appId: "my-project"
- sessionId: "当前对话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": [
        "路径到/mem0-mcp/build/index.js"
      ],
      "env": {
        "OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
        "DEFAULT_USER_ID": "user123"
      }
    }
  }
}

存储模式比较 🔄

云存储(Mem0 API) ☁️

  • 默认持久 - 您的记忆在会话和服务器重启之间仍然可用
  • 不需要本地数据库 - 所有数据都存储在 Mem0 的服务器上
  • 更高的检索质量 - 使用 Mem0 的优化搜索算法
  • 额外字段 - 支持 `agent