MCP持久记忆服
一种模型上下文协议服务器,通过Mem0为AI代理提供持久内存功能,使它们能够存储、检索和语义搜索记忆。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"mem0": {
"args": [
"run",
"--rm",
"-i",
"-e",
"TRANSPORT",
"-e",
"LLM_PROVIDER",
"-e",
"LLM_BASE_URL",
"-e",
"LLM_API_KEY",
"-e",
"LLM_CHOICE",
"-e",
"EMBEDDING_MODEL_CHOICE",
"-e",
"DATABASE_URL",
"mcp/mem0"
],
"command": "docker",
"env": {
"DATABASE_URL": "YOUR-DATABASE-URL",
"EMBEDDING_MODEL_CHOICE": "text-embedding-3-small",
"LLM_API_KEY": "YOUR-API-KEY",
"LLM_BASE_URL": "https://api.openai.com/v1",
"LLM_CHOICE": "gpt-4o-mini",
"LLM_PROVIDER": "openai",
"TRANSPORT": "stdio"
}
}
}
}
服务介绍
这是一个 Model Context Protocol (MCP) 服务器的模板实现,集成了 Mem0,为AI代理提供持久的记忆功能。
你可以将其作为构建自己的MCP服务器的参考点,或者将此示例提供给AI编码助手,并告诉它按照这个示例来组织结构和代码正确性!
概述
本项目演示了如何构建一个MCP服务器,使AI代理能够通过语义搜索存储、检索和搜索记忆。它作为一个实用模板,用于使用Mem0创建你自己的MCP服务器。
该实现遵循Anthropic为构建MCP服务器制定的最佳实践,允许与任何MCP兼容客户端无缝集成。
功能
服务器提供了三个基本的记忆管理工具:
save_memory: 使用语义索引将任何信息存储在长期记忆中get_all_memories: 检索所有存储的记忆以获得全面的上下文search_memories: 使用语义搜索查找相关记忆
先决条件
- Python 3.12+
- Supabase 或任何 PostgreSQL 数据库(用于记忆的向量存储)
- 为你选择的LLM提供商(OpenAI、OpenRouter或Ollama)的API密钥
- 如果以容器形式运行MCP服务器,则需要Docker(推荐)
安装
使用 uv
-
如果还没有安装uv,请先安装:
pip install uv -
克隆此仓库:
git clone https://github.com/coleam00/mcp-mem0.git cd mcp-mem0 -
安装依赖项:
uv pip install -e . -
根据
.env.example创建一个.env文件:cp .env.example .env -
在
.env文件中配置环境变量(参见配置部分)
使用 Docker(推荐)
-
构建Docker镜像:
docker build -t mcp/mem0 --build-arg PORT=8050 . -
根据
.env.example创建一个.env文件并配置你的环境变量
配置
以下环境变量可以在你的 .env 文件中进行配置:
| 变量 | 描述 | 示例 |
|---|---|---|
TRANSPORT |
传输协议 (sse 或 stdio) | sse |
HOST |
使用 SSE 传输时绑定的主机 | 0.0.0.0 |
PORT |
使用 SSE 传输时监听的端口 | 8050 |
LLM_PROVIDER |
LLM 提供者 (openai, openrouter, 或 ollama) | openai |
LLM_BASE_URL |
LLM API 的基础 URL | https://api.openai.com/v1 |
LLM_API_KEY |
LLM 提供者的 API 密钥 | sk-... |
LLM_CHOICE |
要使用的 LLM 模型 | gpt-4o-mini |
EMBEDDING_MODEL_CHOICE |
要使用的嵌入模型 | text-embedding-3-small |
DATABASE_URL |
PostgreSQL 连接字符串 | postgresql://user:pass@host:port/db |
运行服务器
使用 uv
SSE 传输
# Set TRANSPORT=sse in .env then:
uv run src/main.py
MCP 服务器基本上将作为您可以连接到的 API 端点运行,配置如下所示。
Stdio 传输
使用 stdio 时,MCP 客户端本身可以启动 MCP 服务器,因此此时无需运行任何内容。
使用 Docker
SSE 传输
docker run --env-file .env -p:8050:8050 mcp/mem0
MCP 服务器基本上将在容器内作为 API 端点运行,然后您可以使用以下配置连接到它。
Stdio 传输
使用 stdio 时,MCP 客户端本身可以启动 MCP 服务器容器,因此此时无需运行任何内容。
与 MCP 客户端集成
SSE 配置
一旦您使用 SSE 传输运行了服务器,您可以使用此配置连接到它:
{
"mcpServers": {
"mem0": {
"transport": "sse",
"url": "http://localhost:8050/sse"
}
}
}
对于 Windsurf 用户的注意事项:在您的配置中使用
serverUrl而不是url:{ "mcpServers": { "mem0": { "transport": "sse", "serverUrl": "http://localhost:8050/sse" } } }
对于 n8n 用户的注意事项:由于 n8n 必须从其自己的容器外部到达主机机器,请使用 host.docker.internal 代替 localhost:
因此,在 MCP 节点中的完整 URL 为: http://host.docker.internal:8050/sse
如果您使用的是默认 8050 以外的其他端口号,请确保更新端口。
Python 使用 Stdio 配置
将此服务器添加到您的 MCP 配置中以用于 Claude Desktop、Windsurf 或任何其他 MCP 客户端:
{
"mcpServers": {
"mem0": {
"command": "your/path/to/mcp-mem0/.venv/Scripts/python.exe",
"args": ["your/path/to/mcp-mem0/src/main.py"],
"env": {
"TRANSPORT": "stdio",
"LLM_PROVIDER": "openai",
"LLM_BASE_URL": "https://api.openai.com/v1",
"LLM_API_KEY": "YOUR-API-KEY",
"LLM_CHOICE": "gpt-4o-mini",
"EMBEDDING_MODEL_CHOICE": "text-embedding-3-small",
"DATABASE_URL": "YOUR-DATABASE-URL"
}
}
}
}
Docker 使用 Stdio 配置
{
"mcpServers": {
"mem0": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "TRANSPORT",
"-e", "LLM_PROVIDER",
"-e", "LLM_BASE_URL",
"-e", "LLM_API_KEY",
"-e", "LLM_CHOICE",
"-e", "EMBEDDING_MODEL_CHOICE",
"-e", "DATABASE_URL",
"mcp/mem0"],
"env": {
"TRANSPORT": "stdio",
"LLM_PROVIDER": "openai",
"LLM_BASE_URL": "https://api.openai.com/v1",
"LLM_API_KEY": "YOUR-API-KEY",
"LLM_CHOICE": "gpt-4o-mini",
"EMBEDDING_MODEL_CHOICE": "text-embedding-3-small",
"DATABASE_URL": "YOUR-DATABASE-URL"
}
}
}
}
构建您自己的服务器
此模板为构建更复杂的 MCP 服务器提供了基础。要构建您自己的服务器:
- 通过创建带有
@mcp.tool()装饰器的方法来添加您自己的工具。 - 创建您自己的生命周期函数以添加您自己的依赖项(客户端、数据库连接等)。
- 根据需要修改
utils.py文件,为您的 MCP 服务器添加任何辅助函数。 - 也可以自由地使用
@mcp.resource()和@mcp.prompt()添加提示和资源。