Memory MCP 解决什么问题
终端编码 Agent(Muse Code、Claude Code、Codex)跑长任务时有个普遍痛点:session 之间是失忆的。昨天和 Agent 讨论好的"这个项目用 dayjs 不用 moment""API 错误码统一走 4xx 语义""auth 模块禁止直接 import utils"——今天新开一个 session,全忘了,又得口头复述一遍。
本地 .claude/CLAUDE.md 或 .muse/context.md 能存一部分,但那是静态文档,不会随对话自动更新,更不会在你说"记住这个决策"时主动提取。Memory MCP 补上这块:它是一个基于知识图谱的持久记忆服务,Agent 能主动调用 create_entities / create_relations / search_memories 工具,把决策、约定、踩坑沉淀成结构化记忆,下次启动直接 search_memories 拉回上下文。
核心能力
| 工具 | 作用 | 典型调用场景 |
|---|---|---|
create_entities | 创建实体(人/模块/决策/约定) | "记住 auth 模块不依赖 utils" |
create_relations | 在实体间建关系(DEPENDS_ON / DECIDED_BY / AVOIDS) | "auth 模块 AVOIDS utils 模块" |
add_observations | 给实体追加观察事实 | "auth 模块昨天改用 zod 校验" |
search_memories | 按关键词召回相关记忆 | 新 session 启动时召回项目约定 |
read_graph | 读全图(调试用) | 检查记忆是否被错误污染 |
delete_entities | 删除实体(记忆纠错) | 过期的架构决策被推翻时 |
记忆存储在本地 JSON 文件(默认 ~/.mcp/memory.json),不联网不上传,敏感约定留在本机。
安装与配置
Claude Code(CLI)
Claude Code 用 claude mcp add 命令注册 MCP server:
# 全局注册(所有项目可用)
claude mcp add memory -- npx -y @modelcontextprotocol/server-memory
# 或带参数:指定记忆文件路径
claude mcp add memory -- npx -y @modelcontextprotocol/server-memory --memory-path ~/.claude/memory.json
# 验证注册成功
claude mcp list
# 期望输出:memory ✓ connected
交互式启动 Claude Code 后,Agent 会自动识别 memory server 的工具。你说"记住这个项目用 dayjs 不用 moment",它会自动调用 create_entities + create_relations 存下来。
Cursor
Cursor 在 Settings → MCP 页面配置,或直接编辑 ~/.cursor/mcp.json:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"],
"env": {
"MEMORY_FILE": "/Users/you/.cursor/memory.json"
}
}
}
}
保存后重启 Cursor,在 Composer 里就能触发记忆工具。
VS Code(Continue / Cline 插件)
以 Cline 插件为例,编辑 ~/.cline/mcp_settings.json:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"],
"env": {},
"disabled": false,
"alwaysAllow": ["create_entities", "create_relations", "search_memories"]
}
}
}
alwaysAllow 把三个高频工具设为免确认,避免每次存记忆都要点同意。
Muse Code
Muse Code 的 MCP 配置写在 ~/.muse/config.toml:
[mcp.memory]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-memory"]
env = { MEMORY_FILE = "~/.muse/memory.json" }
auto_recall = true
auto_recall = true 让 Muse Code 在生成 plan 前自动 search_memories 召回项目约定,plan 文件会带一个"已召回记忆"段。
实战场景
场景 1:跨 session 保留架构决策
第一次接入项目时,把关键决策显式存入记忆:
claude
> 记住这个项目的几个约定:
> 1. 时间库统一用 dayjs,禁止引入 moment
> 2. auth 模块不依赖 utils,避免循环引用
> 3. API 错误码 4xx 表示客户端错误,5xx 表示服务端
Claude Code 会调用 create_entities 创建三个约定实体,并用 create_relations 关联到项目实体。下次新开 session:
claude
> 帮我加一个登录接口
Agent 启动时会 search_memories "登录 auth",拉回上述约定,写代码时自动遵守 dayjs、auth 不依赖 utils、错误码语义。
场景 2:踩坑沉淀,避免重复排查
> 记住昨天那个 bug:orderService 的 getUserOrders 里有 N+1,根因是循环内查 orderItemRepo.findByOrderId,修复是用 batch find
存成实体后,下次遇到类似性能问题,Agent search_memories "N+1 性能" 会把这条记忆拉回来,直接套用 batch find 模式,不用重新排查。
场景 3:记忆与 append-only 日志协同
Muse Code 的事件日志(short-term,session 内)和 Memory MCP(long-term,跨 session)是互补的:
- 事件日志:单 session 内的工具调用轨迹,重启可 resume,session 结束就归档
- Memory MCP:跨 session 的决策与约定,永久存储,每个新 session 都 recall
推荐工作流:session 结束前让 Agent 把"这次值得长期记住的决策"从事件日志沉淀到 Memory:
muse
> 这个 session 结束前,把值得长期记住的决策(不是临时操作)存到 memory
注意事项
- 记忆不是越多越好:记忆图谱膨胀后
search_memories噪音变大。定期read_graph审查,过期的决策用delete_entities清掉。经验值:单个项目记忆实体不超过 50 个。 - 记忆可能被污染:Agent 误把临时讨论当成永久决策存入。重要决策建议人工确认后再存,或在 config 里把
create_entities设为需审批(非alwaysAllow)。 - 敏感信息别入记忆:Memory MCP 存本地 JSON 无加密,密钥、客户数据、内部 IP 不要存。只存架构约定、命名规范、踩坑结论这类非敏感知识。
- 记忆文件要纳入备份:
~/.mcp/memory.json是长期积累的资产,纳入定期备份。换机器时记得迁移。 - 多项目记忆隔离:不同项目用不同 MEMORY_FILE 路径,避免 A 项目的约定污染 B 项目的代码生成。
与其他 MCP 的搭配
Memory MCP 和以下 MCP 搭配能形成更强的长任务能力:
| MCP | 协同点 |
|---|---|
| Filesystem MCP | Filesystem 读当前代码,Memory 存历史决策,两者交叉验证 |
| GitHub MCP | Memory 存 PR 讨论结论,下次写代码自动遵守 |
| Puppeteer MCP | Memory 存前端测试约定,Puppeteer 跑 E2E 时套用 |
接入完成后,建议第一个 session 就把项目的核心约定(技术栈、模块依赖、命名规范、踩过的坑)显式存入 Memory,后续每个 session 都能自动召回,省掉反复口头复述的成本。