2.2 memory:跨会话知识图谱

它是什么

官方描述:knowledge-graph persistent memory across sessions——跨会话的知识图谱持久记忆。npm 包 @modelcontextprotocol/server-memory,版本 2.0.0,可执行名 mcp-server-memory。

这个服务器在 DeepSeek Harness 官方文档里被实测过:已测试版本 @modelcontextprotocol/server-memory@2026.7.4,stdio 传输,前置条件是 npm install --global @modelcontextprotocol/server-memory@2026.7.4。

它怎么工作

它在本地存一份 JSONL 知识图谱,公开六类工具:

工具 作用
实体(Entity) 创建/维护一个“事物”节点,如一个人、一个项目
关系(Relation) 在两个实体间建立关联,如“属于”“负责”
观察(Observation) 给实体附加一条事实,如“邮箱是 x”
读取(Read) 把整个图谱读出来
搜索(Search) 按关键词找实体
打开(Open) 展开某个实体的全部观察

关键特性:不需要模型或 embedding 服务。 这对本地使用者极其友好——不依赖任何外部 API,断网也能用。

官方示例把数据存在 $HOME/.dsh-mcp-reference-memory.jsonl,而不是已安装的 npm 包目录里。要换位置,启动 DSH 前设 MEMORY_FILE_PATH。

一个必须知道的限制

官方的原话很克制,但信息量很大:

搜索只对实体名称、类型和观察进行不区分大小写的子字符串匹配,不是语义检索。该服务器不提供 embedding、自动摘要、冲突消解或遗忘策略。

翻译成使用建议:

它能做 它不能做
精确记住你告诉它的事实 理解“我喜欢喝咖啡”和“来杯美式”是同一件事
跨会话召回 自动清理过期记忆
结构化关联实体 解决两条矛盾记忆该信哪条

所以:用它记确定的事实,不要指望它做语义联想。 如果你要的是“按意思找回忆”,该看后面的 5.1 Mem0 或 5.3 Memorix 与 Engram。

官方配置

- insert:
    - id: memory-mcp-reference
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: reference_memory
        transport: stdio
        command: mcp-server-memory
        cwd: !!js process.cwd()
        env:
          MEMORY_FILE_PATH: !!js >-
            process.env.MEMORY_FILE_PATH?.trim() || process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:os').homedir(), '.dsh-mcp-reference-memory.jsonl')

注意 serverName 这里写的是 reference_memory,和你给 id 取的 memory-mcp-reference 是两码事:前者是工具前缀 mcp__reference_memory__...,后者只是这条 insert 在本机 patch 里的唯一键。

三个记忆方案怎么选

官方文档实测过三个记忆服务器,横向对比:

系统 已测试版本 前置条件 特点
MCP Reference Memory @modelcontextprotocol/server-memory@2026.7.4 npm 全局装 本地知识图谱,无需模型与 embedding,子串匹配
Memorix memorix@1.3.0 Node 22.18+,npm 全局装 无需 LLM 或 embedding 即可本地启发式运行
Engram v1.20.0 Go 1.25.10+,go install 负责存储与项目选择,默认 ~/.engram

建议:先用 Reference Memory,因为它零依赖、文档最全、和你可能已经在用的其他 MCP 客户端配置一致。需要更强能力时再看 Memorix(本地启发式)或 Engram(Go 实现、项目维度隔离)。

让它真正被用起来的技巧

如果工具描述不足以可靠触发记忆使用,官方建议加一句与提供方无关的模型指令:

用户要求记住某事时调用记忆写入工具;历史信息可能相关时,检索记忆并使用相关结果。

这是附加指导,不替换系统提示词里的 persona。没有这句,记忆工具很容易被闲置——模型不会主动“想起”去查它。

验证三步法

官方流程(详见 1.4 节):

  1. 会话 A 写入唯一值,确认写入工具被调用且返回成功;
  2. 同一 Host 新建会话 B,提问召回,确认返回该值;
  3. 在会话 B 继续提问,确认回答用了召回的值。

必须新建会话,但不用重启 Host。

小结

  • memory 是本地知识图谱记忆,无需模型与 embedding。
  • 限制明确:子串匹配而非语义检索,无自动摘要、冲突消解、遗忘策略。
  • 三个官方实测方案里,先用 Reference Memory 最省事。
  • 配一句模型指令,否则工具容易被闲置。

延伸阅读