claude-mem:用MCP协议为Claude Code打造本地长期记忆 我只说一遍、你也只愿意说一遍的那些话——项目背景、技术栈取舍、代码风格偏好、部署环境约束——在Claude Code里每次新会话都要从头再来。如果你也烦透了这种“金鱼记忆”式的AI协作体验claude-mem就是那个值得花十分钟装上的小工具。它通过MCP协议给Claude家族工具加上一套本地持久化的“长期记忆”让Claude跨会话记住你的偏好、项目信息和背景知识。这篇文章我会从它的记忆抽取机制讲起然后是完整的安装、接入、验证步骤最后分享我实际跑了一周后的效果、踩过的坑和一些顺手的小技巧。不管你是Claude Code的重度用户还是只用Claude Desktop做日常问答这套思路都有参考价值。1. 从“金鱼记忆”到“长期记忆”claude-mem到底解决了什么问题1.1 无状态对话带来的重复劳动用过Claude Code写真实项目的人应该都对这种场景不陌生昨天刚把项目的目录结构、数据库连接方式、错误处理约定说清楚模型也给出了非常贴合的设计方案。今天重新打开终端输入第一句“继续昨天的方案”它一脸茫然反问“请问您说的是哪个项目能提供更多背景吗”这不是Claude变笨了而是底层API的设计本身就是无状态的。每一次请求都是独立的模型只能看到当前会话上下文窗口里的内容。会话一关上下文清空下次对话就是“初见”。于是我们只能反复扮演耐心讲解员再贴一遍README、再说一次“按钮文案要用中文”、再交代一遍“这个服务部署在内网不能走公网”。这种重复劳动在纯聊天的Claude Desktop里感受还不算强烈但在Claude Code这种“替你干活”的编程助手场景里会被放大成每天十几分钟的无谓沟通成本。我自己最早的做法是维护一份非常长的CLAUDE.md把项目约定、代码风格、用户偏好全写进去靠Claude Code启动时自动注入。这条路能走通但很被动所有内容都要你手动更新写漏了就是漏了而且塞进上下文窗口的静态文本又大又占token。1.2 claude-mem的定位把“记忆”从文本升级成工具claude-mem解决的就是这个“静态记忆文件不聪明”的问题。它是一个开源的记忆MCP服务器用LlamaIndex搭了一套本地的记忆知识库核心思路是让模型自己判断哪些信息值得长期记住然后在合适的时候自己取用。具体来说claude-mem不再像CLAUDE.md那样靠“每次全量注入”来提供记忆而是把记忆封装成了一个个MCP工具。Claude在对话中判断“当前任务需要之前的某条信息”时会主动调用claude-mem暴露的“读记忆”工具判断“用户刚才透露了一个重要偏好”时它会调用“写记忆”工具把这个信息落盘。这样一来记忆是按需加载的不会一股脑儿塞进上下文窗口也大大减少了手动维护成本。用生活化的类比就是CLAUDE.md是贴在冰箱门上的便利贴拼盘写什么、撕什么全靠你手动claude-mem则是一个配备图书管理员的小型图书馆模型缺资料时自己查、自己归档你只需要偶尔看看借阅记录。1.3 它适合谁哪些场景投入产出比最高我自己使用下来觉得有三类人最适合花时间搞claude-memClaude Code的日常主力用户。每天开五六个会话处理不同任务反复交代项目背景是最烦的事。claude-mem最直接的价值就在这里。用Claude做知识管理的朋友。把阅读笔记、会议纪要、调研结论通过对话喂给Claude它帮你沉淀成可检索的本地知识库之后随时问、随时答。对MCP协议感兴趣、想找一个真实参考实现的开发者。claude-mem本身就是一个很典型的MCP server读源码能学到“记忆抽取—向量存储—按需检索”的完整链路是怎么落地的。如果你是偶尔玩一下、会话之间没有明显关联需求的轻量用户那claude-mem对你的边际价值可能没那么大毕竟安装配置也有一点点成本。但你要是靠Claude生产力吃饭这十分钟配置时间绝对回本。2. 记忆是怎么被抽出来的事件驱动与MCP运行机制2.1 它凭什么决定“什么值得记”这是所有人问我的第一个问题模型不可能什么都记它怎么知道哪些该记claude-mem的做法不是靠关键词正则也不是靠简单规则扫描而是借助另一个Claude模型默认是成本较低的Haiku级别模型对对话做事后分析与抽取。抽取机制可以理解为事件驱动对话中一旦出现以下几类“值得记忆”的事件就会在后台被提取成记忆条目用户主动提供的事实。比如“我是后端工程师平时用Go和PostgreSQL”“这个项目部署在客户的K8s集群上”。用户对模型行为的纠正。比如“不要用装饰器回调多了难维护”“以后错误日志统一用中文”。纠正往往是最精准的偏好信号。明确指示“记住”的内容。比如“记住上线窗口是周四晚8点到10点”。模型自己问出来、且用户确认过的信息。类似入职填表模型主动采集一次之后就不用反复问。抽取动作通常以对话轮次为单位批量进行而不是每说一句话就触发一次。这样能在记忆质量和API调用成本之间取得平衡。我实测下来一段20轮左右的对话抽取出的有效记忆大约在3到8条之间噪音不算多。2.2 MCP协议记忆变成了“能调用的工具”聊claude-mem之前有必要说清楚MCPModel Context Protocol是什么。它是由Anthropic发布的一项开放协议核心目标是给AI模型提供标准化的方式去连接外部工具和数据源。如果把AI应用比作电脑主机MCP的角色就像USB-C接口——各类外部设备只要遵循同一标准就能即插即用。claude-mem作为一个MCP server对外暴露的核心工具可以简化为两类写记忆add memory和读记忆retrieve memory。Claude在一轮对话中如果判断当前需要历史信息就会自己发起一次“记忆检索”工具调用很像它调用计算器或者搜索插件那样。这个调用的主动权在模型手里所以用户不需要每次都输入什么特殊指令来唤起记忆。由于MCP协议同时支持本地进程和远程服务的接入方式claude-mem也就能同时服务于Claude Code、Claude Desktop以及基于Claude API的自建应用。你只需要把MCP服务器注册进去后面就是统一的标准流程了。2.3 记忆落地之后怎么组织原子记忆与自由笔记记忆提取出来之后不能揉成一团塞进一个文件否则检索的时候就是灾难。claude-mem把记忆分成了两类存储原子记忆atomic memory高结构化的小条目偏向“事实型结论”。例如“用户使用Go 1.22作为主语言”“项目mercury的数据库迁移工具是golang-migrate”。这类记忆方便检索、匹配和更新。笔记notes更自由的长文本块适合写背景综述、需求文档、设计决策这类不便拆成单点事实的内容。从目录结构上看claude-mem的默认存储路径是~/.claude-mem/用户级记忆项目级使用时也可以配置在项目目录下。这个“结构化记忆自由笔记”的双层设计我很喜欢机器可操作的信息走原子记忆人类可读的上下文走笔记两者互补而不是混在一堆Markdown里。2.4 一个值得关注的设计细节按需检索而非全量注入很多“给AI加记忆”的方案翻车是因为把记忆库里的所有内容一股脑丢进上下文窗口上下文一长效果反而稀烂。claude-mem没有走这条路它把记忆库做成一个可检索的向量索引当Claude调用“读记忆”工具时是带着当前对话的语境去检索最相关的若干条记忆而不是把几千条历史全返回。这一点非常关键。我自己的理解是记忆系统的价值不仅在于“存得多”更在于“取对”。存了一大堆但取不准和没有记忆没什么区别。claude-mem的“按需检索”设计本质上是把记忆当作一个外部数据源来做相关性召回这也是它敢把记忆面铺得很宽的原因。3. 安装和密钥准备两条路径的一次性配置3.1 macOS用户首选Homebrew一行命令如果你的开发机是macOS并且已经在用Homebrew安装claude-mem最简单的方式是用第三方tapbrew install teodev/tap/claude-mem因为项目不在Homebrew的核心仓库里所以必须带上teodev/tap前缀。装完之后先用claude-mem --help确认一下命令可用顺便看看当前版本和子命令说明。这一步花不了三十秒但能确认PATH里确实已经多出了这个命令。3.2 跨平台用户pipx隔离安装如果你用的是Linux、WindowsWSL或者不想碰Homebrew可以用pipx装。pipx会把Python包隔离在独立的虚拟环境里不会污染系统全局Python也不会和项目里的依赖打架pipx install claude-mem如果本机没装pipx可以用pip install --user pipx先装一下这是官方推荐的Python CLI工具管理方案。需要注意Python版本建议在3.10及以上太老的版本可能因为依赖兼容性装不上。安装完成后同样用claude-mem --help验证。3.3 Anthropic API密钥记忆抽取的动力源配置这步最容易被人忽略。claude-mem做记忆抽取的时候是拿对话内容去调用Anthropic API让模型判断“哪些值得记”的所以它需要你的API key。这个key和你在网页端使用Claude订阅不是一回事需要到控制台各自生成并且按token计费。先把环境变量配上export ANTHROPIC_API_KEYsk-ant-xxxxx建议把它写进~/.zshrc或者~/.bashrc免得每次重开终端都失效。做项目级隔离的朋友可以用direnv一类的工具按目录加载不同的key这种方式对多账号、多项目的场景更安全。3.4 API成本预期为什么说它是“小模型干活”我自己刚配置的时候最担心的就是成本每次对话做完都要调一次模型做抽取会不会很烧钱实际跑下来还好因为claude-mem用的是轻量级的Haiku级别模型处理的也是已经发生过的对话文本单次抽取的输入和输出量都不大。一天的Claude Code工作下来额外产生的抽取费用大概就是一杯廉价咖啡的水平。不过如果你一天几十个会话而且每个会话都是超长上下文那成本会明显一些建议在能接受一个阈值的前提下定期看看用量。4. 让Claude Code“想起你”插件注册与双文档配置4.1 第一步创建claude-mem.dev插件说明如果你用的是Claude Code安装完claude-mem之后还要让它知道“这个工具存在”。方法是创建一个插件说明文件claude-mem.dev。可以在项目根目录下建也可以放到用户全局目录下效果类似全局插件。文件里面的内容不需要很复杂本质上就是给Claude Code一段说明告诉它这个项目里有一个叫claude-mem的MCP记忆服务器可以通过MCP调用它的读写记忆工具。我这里建议把“启动命令”“MCP服务器名”这些关键信息都写清楚让Claude Code在启动阶段就能识别出来。4.2 第二步把MCP服务器注册进Claude Code插件的说明文件创建好之后还需要把MCP server本身注册给Claude Code这样模型运行时才能真的发起工具调用。不同版本的Claude Code注册入口有所差异但大方向是一致的要么通过CLI命令要么通过设置文件。CLI方式大致是这个形态claude mcp add --transport stdio claude-mem -- claude-mem serve这个命令的逻辑是注册一个名为claude-mem的MCP服务器传输方式为stdio本地标准输入输出启动命令是claude-mem serve。如果你不习惯CLI也可以直接在Claude Code的MCP配置文件里添加对应的server定义格式通常是标准的JSON{ mcpServers: { claude-mem: { command: claude-mem, args: [serve] } } }具体用哪种方式以你当前版本的claude --help输出为准。我自己习惯用CLI命令一是快二是后续改参数方便。4.3 第三步常驻记忆服务器注册好之后还需要保证claude-mem serve这个进程是活着的。一个常见的做法是直接在终端前台跑但这种方案经不起折腾只要终端一关记忆服务就断了Claude Code再调“读记忆”就会失败。我建议用tmux或者nohup把它跑成后台常驻服务。以nohup为例nohup claude-mem serve ~/.claude-mem/server.log 21 把日志单独落到server.log里以后排查问题也有迹可循。如果你对开机自启有要求可以再配一个launchd或systemd服务这一步看各人习惯我属于先跑起来派暂时没做到那一步。4.4 第四步用两轮对话验证记忆真的生效配置完成后强烈建议先做一次双会话验证避免稀里糊涂用了好几天却发现记忆服务根本没生效。第一轮会话明确告诉Claude一个偏好或事实比如“记一下这个项目统一用black格式化行宽88不用双引号。”让对话正常结束然后等几秒让后台抽取逻辑跑完。接着查看存储目录确认有新的记忆文件产生ls -la ~/.claude-mem/第二轮会话开一个新对话直接问“你还记得我对代码格式有什么偏好吗”如果一切正常Claude会通过MCP工具检索到之前那条记忆并给出“black、行宽88”之类的回答。如果它一脸茫然那大概率是抽取还没完成、服务没常驻或者API key有问题直接翻server.log就行。5. 扩展玩法SSE远程模式与Claude Desktop接入5.1 为什么需要SSE模式前面提到的stdio模式走的是本地进程间通信Claude Code和claude-mem在同一台机器上性能好也安全。但有些场景是非远程不行的你有多台开发机希望记忆集中放在一台机器上方便共享你在配一台家庭服务器想让办公室、家里的设备都能访问同一套记忆你想把claude-mem接到跑在远端容器里的Claude服务上。这时候就需要SSEServer-Sent Events模式。SSE是HTTP协议上的一种服务端推送方案claude-mem会启动一个HTTP端口外部客户端通过URL访问它暴露的MCP接口。两种模式的差异可以看这个简表对比项stdio模式SSE模式通信方式标准输入输出HTTP端口适用场景本机、低延迟远程、多设备、多客户端部署复杂度低中安全要求本机文件权限需要自己控制访问范围5.2 启动SSE服务器与端口安全启动SSE模式的命令大致是这样claude-mem serve --with-tools --transport sse --port 8000--with-tools表示把读写记忆的工具也一并暴露出去没有这个参数的话远程客户端能连上但调不了工具。--port按需指定避免占用常用端口。这里必须多说一句安全SSE模式一旦开启意味着任何能访问到你IP和端口的客户端都能尝试调用记忆API。尽量不要把端口直接暴露到公网更不要图方便在云服务器上开一个没有任何鉴权的端口。我的习惯是绑定在内网地址或者配一层简单的防火墙规则只允许自己的设备网段访问。记忆里面往往包含项目敏感信息安全这根弦不能松。5.3 接入Claude Desktop只需改一个JSON文件如果你是Claude Desktop用户接入claude-mem比Claude Code还要少一层插件配置直接改MCP客户端配置就行。macOS上配置文件路径一般在~/Library/Application Support/Claude/claude_desktop_config.jsonWindows和Linux的路径略有差异但文件名都是claude_desktop_config.json。在mcpServers字段里加一段{ mcpServers: { claude-mem: { url: http://localhost:8000/mcp } } }保存后重启Claude Desktop它启动时就会尝试连接claude-mem的SSE服务。之后你在Desktop里问“我之前让你记过哪些项目约定”它就能通过MCP工具把相关记忆取回来。5.4 用户级记忆与项目级记忆别把所有东西都混在一个仓库claude-mem默认把记忆存在~/.claude-mem/下相当于“全局用户记忆”。这种模式适合保存与个人强相关的信息你的名字、职位、通用代码风格偏好。但如果你同时在做A公司和B公司的项目两边的项目背景、依赖约定、部署规范混在一起检索时就会出现“A项目的答案被B项目的背景污染”的情况。我的做法是尽量按项目维度做隔离。CLI模式下可以在项目目录下单独维护一套记忆配置让claude-mem把项目相关的记忆落在项目独立的目录里。成本是多几步配置收益是记忆义务分明——工作项目和个人项目互不串味检索精度明显提升。6. 跑了一周后的真实感受效果、局限与排错清单6.1 记忆效果哪些场景真的变爽了我自己重点验证了几类高频场景效果印象很深代码风格记忆最准。我连续两次在对话里强调“Go的错误处理不要用panic返回error就行”之后后面新会话里再让它写Go函数它写出来的代码真的就带上了这个偏好。我把这种偏好理解成高置信度的结构化事实所以抽取和回读都稳定。用户背景复用省心。“我是后端常写Go和Python数据库用PostgreSQL”这类基本信息只要提过一次之后很多技术方案它都能自动往这个技术栈上靠不用我再重复。运维约束记得住。某个项目的上线窗口、服务器环境限制告诉它一次之后生成的部署建议就不会再踩之前的雷。比较惊喜的是我原本以为这类记忆工具只对“事实型信息”有效实际测下来它连“语气偏好”这类软性的东西也能记住一部分。比如我提过“回答尽量直接别铺垫太多废话”后续生成的方案说明确实干练了不少。6.2 局限它不是魔法别期待完美体验再顺claude-mem仍然有三个绕不开的边界第一记忆抽取有延迟不是实时的。对话结束后后台抽取要等一小会儿才落盘。如果你在同一个会话里立刻追问“你刚才记住我说的话了吗”它大概率还取不到。等几秒再问或者放到下一个会话问才是正确姿势。第二抽取准确性依赖模型能力偶尔会出现“该记的没记不该记的记了”的情况。对这类误差的容忍度因人而异我遇到最典型的误抽是把一句玩笑话当成了事实存进去后来手动删掉了。好在原子记忆是明文的可以直接编辑删除。第三API key不可用或没配好整个记忆系统静默失效。这一点很多人会踩对话本身是正常的因为你用的是订阅或者别的通道但后台抽取因为鉴权失败反复报错记忆一直没写进去。表面看起来“一切正常”实际上记忆库压根没更新。所以第一轮双会话验证真的别偷懒。6.3 三个典型坑与排查链路下面这几个坑都是我实际撞过的如果你也中招可以按这条路径排查坑一记忆服务没常驻Claude调用失败。表现新会话里问记忆回答含糊或者干脆说“我没有权限访问记忆功能”。排查确认claude-mem serve进程是否还在ps aux | grep claude-mem看不见就直接重新nohup拉起来再跑一次双会话验证。坑二抽取任务一直失败但对话看不出异常。表现对话体验正常但~/.claude-mem/始终不新增文件或者server.log里有一堆401、403。排查先检查ANTHROPIC_API_KEY是否在当前shell环境中生效echo $ANTHROPIC_API_KEY如果为空就去重新加载配置文件然后看server.log里的具体错误码确认无误再重启serve。坑三记忆存在但检索不到。表现目录里明明有记忆文件但新会话里模型就是“想不起来”。排查这条路多半是相关性检索没命中——模型判断当前问题与某条记忆的相关性不足所以没返回。解决方式是显式提问比如“你记得我之前关于日志格式的约定吗”把查询意图说清楚比暗戳戳指望它自己联想靠谱。6.4 我的一点使用心得少量维护持续受益最后分享两个我个人的操作习惯。一是定期翻一翻记忆库。每周末我会用编辑器打开~/.claude-mem/扫一遍删掉过时的条目比如已经改名的项目、已经换掉的技术栈。这一步在claude-mem的问题上成本极低但收益很大——记忆质量直接决定检索精度垃圾进垃圾出。二是把重要的、结构化的经验“主动喂”进去。与其等模型从对话里猜不如在对话里直接说“把这个记下来新服务的部署检查清单是A、B、C”。对于自己长期积累的工作流、项目约定主动喂远比被动抽取更可靠。正如一个靠谱的记忆系统除了等着自动存档之外也该允许用户亲手写点便签上去——claude-mem的笔记类记忆就是干这个用的。如果你正在用Claude Code构建自己的工作流我真心建议体验一把claude-mem。它算不上什么惊天动地的复杂架构但“自动抽取—本地存储—按需召回”这条链路确实把一个很烦人的日常问题解决了。而且它整个系统都是本地优先的设计数据握在自己手里没有莫名其妙的云端同步这一点对很多开发者也意味着安全感。装一次、验证一次、养成“定期看一眼记忆库”的习惯之后Claude替你干活会越来越像“了解你的老同事”而不是“每次都自来熟的实习生”。