mcpField
M
mcp-memory-graph

mcp-memory-graph

本地服务
github.com记忆与知识216 周前更新

关于 mcp-memory-graph

MCP Memory Graph 是面向 Claude Code 和其他 MCP 客户端的本地记忆服务,帮助开发者跨会话检索知识。它结合 SQLite 存储、语义与关键词混合搜索及知识图谱,数据无需发送到云服务。

主要功能

  1. 01本地 SQLite 记忆存储
  2. 02向量与关键词混合搜索
  3. 03支持多跳检索的知识图谱
  4. 04置信度标签与结果重排
  5. 05自动捕获和会话回忆钩子
  6. 06定时去重与清理

适用场景

  1. 01在后续会话中回忆项目决策
  2. 02按含义或确切词语搜索笔记
  3. 03追踪相关记忆间的依赖关系
  4. 04在共享知识库中保存团队知识

MCP 相关

它通过 51 个 MCP 工具向客户端提供记忆存储、搜索和知识图谱功能。Claude Code 还可使用钩子自动捕获和回忆信息。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"yonasvalentin-mcp-memory-graph": {
"command": "npx",
"args": [
"-y",
"mcp-memory-graph"
],
"env": {
"MCP_MEMORY_DB_PATH": "<MCP_MEMORY_DB_PATH>",
"MCP_MEMORY_MODEL": "<MCP_MEMORY_MODEL>"
}
}
}
}
启动命令npx -y mcp-memory-graph
需要配置的环境变量
MCP_MEMORY_DB_PATHSQLite database file location (default ~/.mcp-memory/memory.db)
MCP_MEMORY_MODELHuggingFace embedding model name (default Xenova/all-MiniLM-L6-v2)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-memory-graph2.10.3

工具

51

收录的工具列表 · 更新于 2 周前

参数类型必填说明
tagsarray否用于分类的标签
scopeenum否用于隔离的记忆范围global | project | user | team | department
titlestring否记忆的简短标题
authorstring否此内容的创建者
sourcestring否内容来源(例如,文件路径、URL、系统名称)
contentstring是要作为记忆存储的文本内容
agent_idstring否用于多 Agent 归属标记的写入 Agent 标识符
languagestring否内容语言(ISO 639-1 代码)
metadataobject否特定领域的元数据(例如,{contract_type: 'NDA', parties: ['A','B']})
namespacestring否范围内的命名空间(例如,项目名称、团队名称)
departmentstring否部门(例如,legal、engineering、hr、sales、finance)
expires_atstring否完整的 ISO-8601 过期时间戳,例如 2026-03-01T00:00:00Z(过期后,记忆会自动从搜索结果中排除)
volatilityenum否覆盖自动推导的波动性类别。省略此项可根据内容和 document_type 自动分类(波动性较高的部署/状态信息在召回时会更早发出警告)。volatile | normal | stable
on_conflictenum否存在近似匹配项时的写入策略。"add"(默认):作为新项插入,但会跳过完全重复项(NOOP)——与之前的行为相同。"update":将内容合并到现有匹配项中(追加 + 重新嵌入 + 版本递增)。"supersede":废弃(失效)冲突的匹配项,并将此项设为当前项。add | update | supersede
access_levelenum否访问分类级别public | internal | confidential | restricted
document_typestring否文档类型(例如:合同、政策、代码、事件、决策)
importance_scorenumber否显式重要性评分 0-1(治理/关键性)。省略时会根据内容推导;min_importance 筛选器会基于此值进行筛选。
verification_tierenum否此事实的验证程度:source_verified > tool_verified > asserted > unverified。未验证声明的可信依据程度会降低。省略 ⇒ 中立。source_verified | tool_verified | asserted | unverified
verification_detailstring否自由文本:事实如何/何时/通过什么方式验证(例如:"checked live UAT DB 2026-06-18")。

详细介绍

MCP Memory Graph

npm version npm downloads License: PolyForm Noncommercial Node CI MCP server Built for Claude Code Local-first · $0/token

适用于 Claude Code 及其他任何 MCP 客户端的记忆服务。它为 AI 助手提供永久、可搜索的记忆,存储在你电脑上的一个 SQLite 文件中。今天记录一项决定,下个月询问,便能得到答案。一切都在本地运行:嵌入模型、搜索索引和知识图谱。无需云账户、API 密钥,也没有按 token 计费。

**许可证:**源代码可见,非商业用途免费(PolyForm Noncommercial 1.0.0):个人项目、爱好、学习、研究、慈善、教育和政府用途。商业用途需要付费许可证(COMMERCIAL.md)。

**适用对象:**希望 Claude(或 Cursor、Codex 及任何 MCP 客户端)能跨会话记住决策的开发者。个人开发者和业余爱好者可以免费使用。团队可以通过 git 共享知识库。也适合任何希望用完全运行在自己电脑上的工具,替代云端记忆服务(mem0、Zep、Letta、Supermemory)的人。

效果一览

运行 npx mcp-memory-graph serve,即可获得一个本地 Web 控制面板,在 Claude 之外浏览和搜索记忆。

控制面板:记忆数量、按范围、部门和类型分类的统计,以及最近的记忆

搜索依据含义,而非关键词。下面的查询(“我们如何处理付款”)可以找到 Stripe、GDPR 和 Postgres 相关笔记,即使它们都不包含这个短语——每条结果都会显示置信度评分和匹配类型徽标:

带有置信度和匹配类型徽标的语义搜索结果

在一个表格中浏览和排序整个存储库——范围、类型、标签、质量评分,以及每条记忆被读取的次数:

所有已存储记忆的可排序表格

对比

mem0、Zep、Letta 和 Supermemory 是 AI 记忆领域常见的名称,其中几个拥有开源核心。这个项目采用了不同的默认方式:数据不会离开你的设备,也无需运行任何基础设施。

MCP Memory Graph常见的托管记忆服务
运行位置设备上的一个 SQLite 文件托管云服务(有些也可自托管)
嵌入Node 中的本地模型(MiniLM),无需 API 密钥通常使用云端嵌入 API
每个 token 的费用$0——不计量用量按用量计费,或需要你运行服务器
额外基础设施无通常需要 Postgres/pgvector、Redis 或 Python 服务
Claude Code 集成一流支持:hooks 自动捕获和检索手动接入
基准测试提交的语料库和运行器,可在本地复现大多由项目自行报告

取舍很明确:单进程 SQLite 服务的容量上限是数十万条向量(见限制),而托管服务可以扩展到更大规模,无需你操心。如果你是独立开发者或小团队,想要私密、免费且无需运维的记忆功能,那么这个上限很少会是你最先遇到的问题。

为什么要做这个项目

AI 助手会在会话之间忘记所有内容。你的决策、习惯、上周二修复的 bug:对话一结束,就全都不见了。这个服务可以解决这个问题。

  • 今天存储的知识,明天、下周乃至明年都能搜索到。
  • 搜索依据的是含义,而不只是关键词。“合同通知期限”也能找到“90 天续约条款”。
  • 它会自我改进。它会跟踪哪些内容被使用、评估质量、从会话中提取经验,并按计划清理自身。
  • 它能保护隐私。本地嵌入,不调用云端 API,也不进行遥测。唯一例外是可选的 Stop hook:它会将会话记录发送给你本地安装的 Claude Code(claude -p),用于提取经验。你可以通过 review_on_stop: false 关闭此功能。
  • 它适用于各种知识。工程师可以存储架构决策,律师可以存储合同模式,会计师可以存储审计流程。

快速开始(约 5 分钟)

你需要安装 Node.js 20 或更高版本,以及 Claude Code。

1. 获取服务。 从 npm 安装(最简单):

npm install -g mcp-memory-graph

或者从源代码安装:

git clone https://github.com/YonasValentin/mcp-memory-graph.git
cd mcp-memory-graph
npm install
npm run build

2. 将服务注册到 Claude Code (可选——第 3 步中的 init 会为你在用户范围内完成此操作):

# npm install:
claude mcp add memory-server -- npx -y mcp-memory-graph

# from source:
claude mcp add memory-server node /path/to/mcp-memory-graph/dist/index.js

3. 安装 hooks(推荐):

npx mcp-memory-graph init

这条命令会完成所有配置:注册 MCP 服务(用户范围)、安装自动捕获和检索 hooks 及用法技能、写入配置,并安排每晚清理。请按提示操作,或传入 --yes 接受默认设置。(如果你自行管理 claude mcp,可使用 --no-register 跳过自动注册。)

4. 试用。 打开 Claude Code 会话并输入:

Remember this: we use Postgres for the main app database. Decided 2026-06-01,
because we need JSONB and full-text search in one place.

然后,在之后的某个会话中输入:

What database did we decide to use, and why?

Claude 会搜索其记忆,并根据存储的决策作答。整个流程就是这样。

5. 验证安装。 询问 Claude:

What memory tools do you have available?

它应该列出全部 51 个工具(45 个 memory_*、3 个 vault_*、3 个 core_memory_*)。

首次运行记忆工具时,会从 HuggingFace 下载嵌入模型(约 30 MB),并缓存到 ~/.cache/huggingface/。此后每次启动都是即时完成。

如需撤销所有更改:npx mcp-memory-graph uninstall。

升级

npm install -g mcp-memory-graph@latest   # or just let `npx -y mcp-memory-graph` pull it
npx mcp-memory-graph init                # re-run to refresh on-disk hooks + the nightly schedule

升级软件包会更新每次会话运行的代码(钩子、工具和服务),因此服务端修复会在下次运行工具时生效——无需为此做其他操作。

但软件包升级不会重写 init 之前写入的文件:settings.json 中的 Claude Code 钩子注册项,以及 macOS launchd plist ~/Library/LaunchAgents/com.mcp-memory.consolidate.plist。如果你在 2.6.3 之前安装,plist 中使用的是裸 node 命令,而 launchd 的最小 PATH 不包含 nvm,因此无法运行它——夜间整合任务就会悄无声息地一直没有触发。升级后重新运行一次 npx mcp-memory-graph init,以使用绝对 node 路径和输出日志重新生成该文件。随后确认任务能够运行:

launchctl start com.mcp-memory.consolidate
cat ~/.mcp-memory/consolidation.log      # should show a "Consolidation complete" report

若要清除任务未运行期间累积的冲突噪声,请运行:npx mcp-memory-graph consolidate。

简明说明其工作原理

存储记忆时,服务会使用在 Node.js 内运行的小型模型,将文本转换为向量(一组包含 384 个数字、用于表达文本含义的列表)。它还会为文本建立索引,以便进行关键词搜索。两者都存储在同一个 SQLite 文件中,默认路径为 ~/.mcp-memory/memory.db。

搜索时,服务会同时执行这两种搜索,合并排名,并返回带有置信度标签的最佳匹配结果。随后,第二个模型可以重新排列排名靠前的结果,以提高精确度(这就是重排序器;默认对 MCP 客户端启用,耗时约 200 ms)。

此外还有一个知识图谱:记忆会关联到实体,也会彼此关联,因此服务能够回答需要多次跳转才能解答的问题,例如“支付服务依赖什么?”。每晚的“梦境周期”会执行去重、重新评分、剪枝并报告知识缺口。

基准测试及其解读方式

下面的所有数据均在本地生成:使用真实的嵌入模型和生产环境处理程序,不进行网络访问。你可以在自己的机器上重新运行全部测试。

如果你不熟悉基准测试,先快速了解几个概念。黄金集是一组答案已预先确定的问题。Precision@1 用于判断排名第一的结果是否正确。Recall@5 用于判断正确答案是否出现在前 5 个结果中。MRR(平均倒数排名)会奖励正确答案排名靠前。重排序器是用于重新排列排名前 50 个结果的第二个模型;它速度较慢,但准确度明显更高。

本地黄金集
precision@1precision@3MRRsearch p95
混合(RRF)0.5630.7500.704~4 ms
+ cross-encoder 重排序(MCP 默认)0.8130.8750.867~230 ms

运行 npm run bench 即可复现。完整的方法说明、黄金集本身以及每个错误案例,都会输出并记录在 docs/BENCHMARKS.md 中。

规模

使用真实的嵌入模型和基于文件的 SQLite 数据库时,向量数量为 10,000 时,检索 p95 为 9.1 ms;向量数量为 50,000 时,为 30 ms。重排序步骤还会额外增加约 200 ms,且该耗时基本恒定。大多数记忆产品发布的都是自行报告的云端托管数据;这里的数据是在本地测量的,可通过已提交的语料库和运行程序复现。

公开基准测试

使用未经调优的设置(原版 MiniLM 嵌入器、生产级处理器、未做任何基准测试专属调整)运行四项公开记忆基准测试,在全部四项中均达到或超过 MemPalace:

基准测试我们的结果对比
LongMemEval-SR@5 = 97.8%对比已公布的 96.6%
ConvoMemR@10 = 93.5%对比 92.9%
LOCOMOsession R@10 = 82.2%,R@50 = 100%对比 60.3% 的基线
MemBenchhit@5 = 78.7%对比其经过调优的 80.3%

亲自运行:npm run bench:longmemeval、bench:locomo、bench:convomem、bench:membench。诚实的说明(重排器在哪些情况下有帮助、在哪些情况下会造成影响、MemBench 上的去重上限、黄金集大小方面的注意事项)见 docs/BENCHMARKS.md。

功能

核心功能
  • 51 个 MCP 工具:CRUD 和检索、带置信度标签的知识图谱、自我纠正的写入门控、签名溯源与验证、带 SSRF 防护 Webhook 的事件总线、变更传播与顾问界面、可恢复的会话状态、专业知识档案、记忆分层、Obsidian 库往返同步,以及符合 GDPR 标准的遗忘和历史记录。完整列表见下文。
  • 混合搜索:向量相似度(含义)加关键词匹配(精确词项),并通过 Reciprocal Rank Fusion 合并。rerank: true 会添加交叉编码器处理阶段。use_graph: true 会融合 HippoRAG Personalized PageRank 多跳评分。as_of: <timestamp> 可搜索图谱在过去某个时刻的状态。
  • 本地嵌入:Transformers.js 在 Node.js 中运行 all-MiniLM-L6-v2(384 维)。无需 Python、云端 API 或 GPU。
  • SQLite 存储:单个文件,使用 better-sqlite3,并搭配两个扩展:sqlite-vec 用于向量近邻搜索,FTS5 用于采用 BM25 排名的关键词搜索。
  • 感知结构的分块:文本按段落拆分,Markdown 按标题拆分(每个块保留标题上下文),代码按函数和类边界拆分,法律文本按句子拆分。
  • 作用域:将记忆整理到 global、project、user、team、department 中。
  • 版本历史:每次更新都会保存前一个版本。完整记录谁在何时更改了什么。
  • 时间衰减:可选的基于时间的评分,让近期记忆获得更高权重(指数或线性)。
  • 置信度评分:每条结果都带有 0 到 1 的置信度,以及直观的标签(高、中、低)。
  • 过期机制:有时效性的记忆可设置到期日期,并自动从搜索结果中移除。
自我改进
  • 访问跟踪:每次搜索、获取和相关记忆调用都会记录所访问的记忆。
  • 质量评分:根据访问频率、近期程度和内容信号,自动为每条记忆计算 importance_score 和 confidence_score。
  • 学习提取:会话结束时,无头模式的 claude -p 会审查对话记录,并存储 0 至 5 条精选的学习内容。(这取代了旧的 type: "agent" Stop 钩子;该钩子在 macOS 上会静默失效,详见 anthropics/claude-code#39184。)
  • 梦境周期:按计划或按需进行去重、重新评分、修剪、过期处理和知识缺口检测。
  • 缺口检测:未返回结果的搜索会被记录,以便你了解缺少哪些知识。
Claude Code 钩子

通过 init 安装的五个可选钩子:

钩子触发时机功能
SessionStart会话开始时状态检查(记忆数量、过期内容、陈旧文档),并显示项目中排名靠前的记忆
UserPromptSubmit每条包含任务信号(工单/PR ID 或 ≥2 个关键词)的提示词提交时对存储内容进行关键词搜索,并显示匹配的记忆,帮助你回忆之前的工作,避免重新推导;对于简单提示词则保持静默
PostToolUse记忆搜索后将命中和未命中情况记录到 search-log.jsonl
PreCompact上下文压缩前可选的学习内容提取(默认关闭)
Stop会话结束时启动无头模式的 claude -p 来审查会话并保存所学内容

Stop 钩子会在约 30 毫秒内脱离,并在后台进行 10 到 60 秒的审查。需要 $PATH 中(或 $CLAUDE_BIN 指定)的 claude CLI,且已完成身份验证。要关闭此功能,请在 ~/.mcp-memory/config.json 中设置 review_on_stop: false。

每条记忆的元数据
字段用途示例
scope隔离级别global、project、user、team、department
namespace子范围分组"my-project"、"legal-team"、"q4-audit"
department组织部门legal、engineering、hr、sales、finance
document_type内容分类contract、policy、code、incident、decision、report
access_level数据敏感级别public、internal、confidential、restricted
tags灵活分类["renewal", "notice-period", "compliance"]
language内容语言(ISO 639-1)"en"、"da"、"de"
source来源文件路径、URL、系统名称
author创建者人员或系统名称
metadata特定领域的 JSON{contract_type: "NDA", parties: ["A","B"]}
expires_at自动过期日期ISO 8601 时间戳

scope 和 namespace 用于在单个数据库中对内容分组。共享数据库的 MCP_API_NAMESPACE 固定值支持按命名空间进行多租户隔离(schema v14);为每个租户使用单独的数据库文件则能提供最强的隔离边界。参见 docs/MULTI-TENANCY.md。

知识图谱与双时态模型
  • 双时态有效性:每条记忆都同时记录有效时间(valid_from、valid_to)和事务时间。更新会使旧记录失效,而非将其删除:旧事实会加上 valid_to 时间戳,而不是被覆盖,因此历史记录不会丢失。读取默认返回当前有效的记录,但也接受 as_of: <timestamp>,用于回溯指定时间点的记忆。memory_history 会返回单条记忆的完整时间线。
  • 带置信度标签的链接:记忆通过 wikilink、共现和相似度边相连,每条边都带有置信度权重。memory_graph 最多遍历 3 跳的实体和关系。memory_extract_entities 会存储由大模型提取的实体和关系。
  • HippoRAG 多跳检索:搜索中设置 use_graph: true 后,会在实体和链接图上运行 Personalized PageRank,以进行联想式检索。
  • 基于令牌预算的回答:memory_query 会通过紧凑的子图回答问题。它以混合搜索结果为起点,在避开枢纽节点的同时遍历图,最多达到 max_hops,并返回受令牌预算限制的上下文字符串,而不是让窗口充斥信息。
  • 社区:memory_communities 会查找连接紧密的实体集群,适用于“这里的主要主题是什么?”这类问题。
自我纠正写入
  • 写入门控:存储操作会经过 ADD、UPDATE、DELETE 或 NOOP 决策(on_conflict),使新事实与已有事实协调,而不是不断累积重复内容。
  • 矛盾检测:交叉编码器 NLI 模型会标记新传入的记忆是否与已存储内容矛盾。
  • 遗忘曲线:记忆带有 stability 信号,因此很少得到强化的知识会在排序中逐渐下沉,就像人类记忆会逐渐消退一样。
Agent-OS 记忆
  • 核心记忆块:每个 (scope, namespace) 对应一个小型、有边界且始终在上下文中的笔记,由 Agent 自行维护(core_memory_get、core_memory_append、core_memory_replace)。追加内容若会超出限制,则会被拒绝,从而促使有意识地精简内容。
  • 层级:memory_tiers 会报告 MemGPT 式的热记忆/回忆/归档分布,并列出热记忆工作集。
  • 反思:memory_reflect 会收集最值得反思的记忆;在存储模式下,会保存综合得出的见解,并将其关联回来源。
Obsidian 知识库
  • 双向同步:vault_sync 会读取知识库。memory_export_vault 会将记忆写出为 .md 文件,并附带 YAML frontmatter,确保每个用户编写字段(id、scope、namespace、tags、access_level、importance、timestamps)都能无损往返。两个派生评分不包含在 frontmatter 中,重新导入时会重置:confidence_score(重置为 0.6)和 stability(重置为 1.0)。请使用 memory_export(JSON)进行逐字节完美备份。一个元数据键为保留键:metadata._vault 用于保存内部同步记录,不会出现在工具输出或导出的文件中。
  • JSON Canvas:memory_canvas 会将图谱导出为 JSON Canvas 1.0 .canvas 文件,可在 Obsidian 中以空间看板形式打开。
  • 只读 Wiki:serve 会将 /publish/:namespace(索引、页面、搜索、图谱)作为只读 Wiki 提供服务。它有意不启用 Bearer 身份验证,但会严格限定为已发布的访问级别(MCP_PUBLISH_ACCESS_LEVELS,默认为 public)。
  • 会话笔记和模板:memory_session_note 会将内容追加到每个会话的一篇“每日笔记”中。memory_template 会根据文档类型返回结构化笔记框架。
团队与个人共享(git)
  • memory init 向导:交互式设置(或使用 --yes 应用默认设置),写入 ~/.mcp-memory/config.json(或项目级配置)以及 Claude Code 接线配置。
  • 可提交的图谱产物:memory export-graph 会生成确定性的 memory-graph.json,可提交并共享。memory git-setup 会安装 .gitattributes 条目和 memory-union 合并驱动程序,以便并行提交时进行合并,而不是产生冲突。
  • 归属信息:设置 MCP_AGENT_ID(或在每次存储时传入 agent_id),然后 memory_attribution 会报告每个 Agent 写入的有效记忆数量。
信任与治理
  • 待询问的问题:memory_questions 会展示图谱擅长发现的内容:待确认的模糊链接、频繁提及但文档不足的实体,以及孤立和过时的记忆。
  • 符合 GDPR 级别要求的遗忘功能:memory_forget 默认软删除(通过 valid_to 创建墓碑,可恢复,且仍可通过 as_of 查看)。使用 hard: true 时,它会先返回可携带性导出,然后永久擦除数据。memory_delete 保持不变。
  • 输出净化:每个工具结果都会经过统一检查点,在离开服务前清除 ANSI 和 VT 转义序列、控制字符,以及零宽字符或双向文本(BiDi)Trojan Source 欺骗字符。存储内容在静态存储时仍保持原始状态。
  • 热重载:配置更改无需重启即可生效。

Web 仪表板

服务器提供浏览器仪表板,可在 Claude 外查看和管理记忆。仪表板运行在与 MCP HTTP 传输相同的 Express 服务器上,因此无需单独的进程。

共六个页面:

  • 仪表板:显示记忆数量、内容大小、按范围、部门和类型划分的统计,以及最近更新的 10 条记忆。
  • 搜索:提供带置信度和匹配类型徽标的混合搜索,并在输入时即时显示模糊匹配建议。
  • 浏览:可排序、分页的全部记忆表格,支持按范围筛选并显示质量指标。
  • 记忆详情:显示完整内容、元数据、版本历史和相关记忆,并支持行内编辑和删除。
  • 知识图谱:D3 力导向视图。节点大小表示重要性,颜色表示范围。支持缩放、平移、拖动和双击导航。
  • 工具:完整工具集的控制台。它会列出服务器公布的每个工具,根据各工具的架构生成表单,并通过经过身份验证的 MCP 端点运行工具。具有破坏性的工具会先要求确认。

技术栈:React 19、Vite、Tailwind CSS v4、shadcn/ui、Fuse.js、D3、Recharts。

运行:

# Development (hot reload)
npm run build && npm run serve   # Terminal 1: server on :3100
npm run dev:web                   # Terminal 2: Vite on :5173 (proxies /api to :3100)

# Production (single process)
npm run build:all                 # Builds server + frontend
npm run serve                     # http://localhost:3100 serves both API and UI

**Docker:**镜像中包含构建好的前端。运行 docker compose up 后,可通过 http://<host>:3200 访问仪表板,MCP 端点也位于此处。团队成员可以使用任意浏览器浏览共享存储,无需 Claude Code。

REST API(16 个端点)

REST 接口用于读取和管理。创建记忆通过 MCP 完成(通过 POST /mcp 调用 memory_store);这里特意不提供 POST /api/memories。

方法路径说明
GET/api/stats记忆数量和分类统计
GET/api/search?q=...支持筛选条件的混合搜索
GET/api/memories分页并支持排序的列表
GET/api/memories/:id单条记忆及其元数据
GET/api/memories/:id/versions版本历史
GET/api/memories/:id/related语义相关的记忆
PATCH/api/memories/:id更新内容或元数据
DELETE/api/memories/:id删除记忆
GET/api/graph图可视化所需的节点和边
GET/api/manifest完整性清单(Merkle 根及每条记忆的哈希)
GET/api/insights趋势和主题摘要
GET/api/health知识缺口报告(反复出现的零结果搜索)
GET/api/webhooks列出 webhook 目标(由 MCP_WEBHOOKS 控制)
POST/api/webhooks注册经过 SSRF 验证的出站目标
DELETE/api/webhooks/:id移除 webhook 目标
POST/api/webhooks/dispatch清空持久化的 HMAC 签名投递队列

前九个端点供仪表板使用。所有 REST 端点都调用与 MCP 工具相同的处理程序,不会重复业务逻辑。

深入了解自我改进

服务器会跟踪知识的使用情况、评估质量、从会话中学习,并随着时间推移自行整合知识。

学习循环
 ┌──────────────────────────────────────────────────────────┐
 │                    SESSION                                │
 │  Claude searches → access_count++ on matched memories     │
 │  Claude stores   → new memory with initial scores         │
 │  Zero results    → knowledge gap recorded                 │
 └─────────────┬────────────────────────────────────────────┘
               │
               ▼
 ┌──────────────────────────────────────────────────────────┐
 │            SESSION END (Stop command hook)                │
 │  Hook spawns detached `claude -p` headless review         │
 │  --allowedTools restricts to memory_store only            │
 │  Claude judges → 0-5 curated entries via memory_store     │
 │  Deduplicates against existing memories                   │
 └─────────────┬────────────────────────────────────────────┘
               │
               ▼
 ┌──────────────────────────────────────────────────────────┐
 │              DREAM CYCLE (nightly or manual)              │
 │  1. Score    : Recalculate importance from access data    │
 │  2. Expire   : Enforce expiration dates                   │
 │  3. Prune    : Remove low-quality, never-accessed items   │
 │  4. Dedup    : Merge near-duplicate memories              │
 │  5. Gaps     : Surface zero-result search patterns        │
 └──────────────────────────────────────────────────────────┘
质量评分

每条记忆都会获得一个介于 0 和 1 之间的 importance_score:

importance = 0.3 * current_score + 0.4 * normalized_access_frequency + 0.3 * recency_factor

时效性系数:

年龄系数
< 7 天1.0
< 30 天0.7
< 90 天0.4
> 90 天0.1

从未被访问的记忆会逐渐降低重要性。自动提取的记忆初始评分较低,如果始终未证明有用,就会被清理。

**访问强化说明。**上面的公式是整合流程中 Score 阶段定期重新计算的结果。每次读取(memory_get、memory_search、memory_related)也会立即小幅提升评分(importance_score += 0.03,最高为 1.0),搜索则会将重要性作为轻微的排名乘数(1 + importance * 0.5)。仅通过读取,一条被读取 20 次或更多的记忆就会接近上限;下次运行整合流程时会重新设定基准。这种基于热度的加权是有意为之。如果希望评分固定,不随读取而变化,可在 memory_store 或 memory_update 中设置明确的 importance_score。

知识缺口检测

搜索没有结果时,查询会被记录。梦境周期的缺口阶段会呈现这些记录,让你了解存储中缺少什么。

安装参考

前提条件
  • Node.js 20+,适用于任何客户端。
  • MCP 客户端。 Claude Code 提供一流体验;自动捕获和回忆钩子仅适用于 Claude Code。其他 MCP 客户端(Codex、Cursor 等)可以使用全部 51 个工具,但需要手动驱动。请参阅下文“其他 MCP 客户端”。
  • 仅适用于 Stop 钩子: $PATH(或 $CLAUDE_BIN)中有 claude 二进制文件,且已完成身份验证,无需提示。此项为可选;设置 review_on_stop: false 可禁用。
init 的作用
npx mcp-memory-graph init                  # user scope: hooks apply to all projects
npx mcp-memory-graph init --scope project  # this project only

用户范围会将钩子写入 ~/.claude/settings.json,使其在每个 Claude Code 会话中触发。项目范围会将钩子写入当前目录下的 .claude/settings.json,并创建 .mcp.json 以自动发现服务;克隆项目的协作者会自动注册记忆服务。

Init 会执行七项操作:

  1. 验证钩子脚本是否存在于 dist/hooks/ 中。
  2. 在 settings.json 中注册五个钩子。
  3. 使用合理的默认值创建配置文件:~/.mcp-memory/config.json(用户范围)或 <project>/.mcp-memory/config.json(项目范围;生成的 .mcp.json 通过 MCP_MEMORY_CONFIG_PATH 指定该文件)。
  4. 将记忆使用说明写入 .claude/CLAUDE.md(项目范围),或打印一段说明(用户范围)。
  5. 向 Claude Code 注册 MCP 服务——用户范围会替你运行 claude mcp add -s user memory-server -- npx -y mcp-memory-graph(幂等;尽力执行——如果 claude CLI 不在 $PATH 中,则会显示警告并提供手动命令;使用 --no-register 跳过)。项目范围则通过可提交的 .mcp.json 注册。这样,“快速开始”的第 2 步就变成可选步骤。
  6. 将 mcp-memory-graph 使用技能安装到 ~/.claude/skills/,让 Claude Code 获得关于全部 51 个工具、注意事项和工作流的内联指导。使用 --no-skill 跳过。
  7. 设置每晚整合计划(macOS:使用 launchd,并立即加载,无需重新登录即可运行;Linux:打印 cron 建议;项目范围不执行此操作)。

在非交互式 shell(Agent/CI)中会跳过向导:应用默认值,并打印报告,说明设置内容以及如何更改各项值。传入 --yes 会静默应用默认值(不生成报告)。

主要标志:--scope user|project、--schedule HH:MM[,HH:MM](每晚整合时间,默认为 03:00)、--vault <path>(启用 Obsidian 知识库双向同步)、--no-review-on-stop(禁用会话结束时的学习回顾)、--no-skill(跳过技能安装)、--no-register(跳过用户范围的 claude mcp add)、--remote <url>(团队服务模式)。

npx mcp-memory-graph uninstall 会撤销 init 执行的所有操作:移除钩子、每晚计划、CLAUDE.md 区块以及已安装的技能。

无人值守设置(CI、配置、Agent)

每个步骤都可以通过脚本执行。不存在仅限交互式的路径:

git clone https://github.com/YonasValentin/mcp-memory-graph.git
cd mcp-memory-graph
npm install && npm run build
npx mcp-memory-graph init --scope project --yes   # local: hooks + .mcp.json, no prompts
# or point at a shared self-hosted server instead:
# npx mcp-memory-graph init --remote https://memory.example.com --token-env MEMORY_MCP_TOKEN

其他 MCP 客户端(Codex、Cursor 等)

Claude Code 使用钩子;其他客户端则使用相同的 51 个工具,但需要手动调用。该服务是标准 MCP 服务,因此任何客户端都能使用。在客户端的规则文件中添加一行指引,即可让使用过程近乎自动化。

注册服务。以下是 Codex 的示例,配置文件可以是 ~/.codex/config.toml(全局)或 .codex/config.toml(项目级,仅限受信任项目):

[mcp_servers.memory-graph]
command = "node"
args = ["/abs/path/to/mcp-memory-graph/dist/index.js"]
tool_timeout_sec = 180   # the first call downloads the ~30 MB model once; the 60s default can be tight

[mcp_servers.memory-graph.env]
MCP_MEMORY_DB_PATH = "/abs/path/to/.mcp-memory/memory.db"

# or a shared self-hosted server over HTTP (see Self-hosting below):
# url = "https://memory.example.com/mcp"
# bearer_token_env_var = "MEMORY_MCP_TOKEN"

或者运行 codex mcp add memory-graph -- node /abs/path/to/mcp-memory-graph/dist/index.js。Cursor、Windsurf 和其他客户端使用各自的 MCP 配置格式,但服务命令(node .../dist/index.js)和 HTTP 选项相同。

然后在 Agent 的指令文件中添加提示(Codex:AGENTS.md;Cursor:项目规则):

在回答有关架构、决策、模式或过往修复的问题前,先调用 memory-graph 服务上的 memory_search;使用 memory_store 保存新的决策、模式和修复。

自托管并共享知识库

该服务有三种运行方式,从单用户缓存到多台机器共享的知识库皆可。三种方式都以本地为先:数据不会离开你选择运行服务的机器。

1. 本地(单用户),默认方式

npx mcp-memory-graph init 会注册本地 stdio 服务和钩子。记忆数据保存在你机器上的一个 SQLite 文件中。无需运行其他组件。适合个人使用。

2. 共享服务(多台机器或团队)

运行一个服务,让多个客户端通过 HTTP 连接。所有人实时共享同一个知识库。

启动服务(任选一种):

# From source: build the server (and the dashboard, if you want it) first
npm run build:all
MCP_AUTH_TOKEN=$(openssl rand -hex 32) MCP_BIND=0.0.0.0 npm run serve
# MCP at /mcp, REST at /api, dashboard at /, all on :3100

# Or with Docker (frontend included; publishes host port 3200 by default)
MCP_AUTH_TOKEN=$(openssl rand -hex 32) docker compose up -d

只要服务可通过回环地址以外的地址访问,就设置 MCP_AUTH_TOKEN。这是一个供所有客户端共用的 bearer token。若绑定到非回环地址但未进行身份验证,服务将拒绝启动,除非设置 MCP_AUTH_OPTIONAL=1。若要从主机外访问,请通过反向代理或隧道终止 TLS。

在每台机器上运行一条命令来连接客户端:

npx mcp-memory-graph init --remote https://memory.example.com --token-env MEMORY_MCP_TOKEN
export MEMORY_MCP_TOKEN=<the server token>     # in your shell or .env

对于 Claude Code,这会写入一个指向共享服务的项目 .mcp.json。令牌以环境变量引用的形式存储("Authorization": "Bearer ${MEMORY_MCP_TOKEN}"),因此已提交的 .mcp.json 永远不会包含密钥。非 Claude 客户端通过各自的 MCP 配置连接到同一服务。

标志作用
--token-env <NAME>引用此环境变量作为令牌(默认值为 MEMORY_MCP_TOKEN)
--token <value>直接写入字面令牌(避免将其提交)
--no-auth不添加身份验证标头(仅限回环地址或受信任网络)

在远程模式下,不会安装本地捕获和回忆钩子。记忆数据保存在服务端,而不是钩子可读取的本地文件中。Agent 会直接使用 memory_search 和 memory_store(仍会写入 CLAUDE.md 指引)。

3. Git 仓库(异步、版本控制式共享)

想把知识库放在 Git 中,通过拉取请求审核,且无需运行服务?将记忆导出为纯 Markdown,并通过 Git 仓库共享该文件夹:

npx mcp-memory-graph vault-init                    # make the vault a git repo (union merge driver + rebuild hook)
git add -A && git commit -m "memory snapshot" && git push
# collaborators, once after cloning:
#   npx mcp-memory-graph vault-init                # registers the union merge driver + post-merge hook in THEIR clone
# collaborators, thereafter: git pull && npx mcp-memory-graph rebuild

每位协作者都必须在自己的克隆仓库中运行一次 vault-init。 合并驱动和合并后重建钩子位于本地 Git 配置(.git/)中,不在仓库里。未运行 vault-init 的全新克隆仓库,在首次并发拉取时会在 .memory/graph.json 中遇到原始冲突标记。重复运行 vault-init 不会造成问题,也不会覆盖已提交的旁文件。

团队知识库的两条恢复说明:

  • 如果你手动解决了合并冲突(合并后钩子只会在无冲突合并时触发),memory rebuild 可能会因 .memory/manifest.json 过期而报错 VaultIntegrityError。删除该文件并重新运行 rebuild;它是派生状态,会自动重新生成。
  • 如果你手动编辑了 .md 文件,但数据库中的状态更新,则应先导入(vault_sync 或 rebuild),再导出(memory sync)。如果数据库中的状态已过期,执行完整导出会覆盖知识库文件,包括你的手动编辑。
安全说明
  • MCP_AUTH_TOKEN 是一个由可信群组共用的密钥;要轮换密钥,请使用新值重启服务。若要实现按密钥的 RBAC(一个服务、N 个密钥,每个密钥固定一组命名空间,并设定访问级别上限),请使用 memory keys create|list|revoke(schema v16)。旧版共享令牌仍可使用,且会优先检查。请参阅 docs/MULTI-TENANCY.md。
  • 切勿提交令牌。--remote 默认会按设计将其保存在环境变量中。
  • 除非在服务前部署一个负责终止 TLS 的代理,否则请绑定到 127.0.0.1(默认值);若部署了代理,则设置 MCP_BIND=0.0.0.0。

正在构建组织级 AI 大脑?只需一个服务,为每位员工分配一个密钥,并构建一份 AI 可遍历的组织架构图(将人员、团队、SOP 和工具作为带类型的图节点),同时强制执行可见范围控制。基于现有基础功能的实现方案见 docs/ENTERPRISE-BRAIN.md。

配置

环境变量
变量默认值说明
MCP_MEMORY_DB_PATH~/.mcp-memory/memory.db数据库文件位置。目录会自动创建。
MCP_MEMORY_MODELXenova/all-MiniLM-L6-v2HuggingFace 嵌入模型名称。必须是与 Transformers.js 兼容的 ONNX 模型。
MCP_MEMORY_DIMENSIONS384嵌入向量维度。必须与模型的输出维度一致。
MCP_MEMORY_CONFIG_PATH~/.mcp-memory/config.json配置文件的自定义位置。

完整的环境变量参考(身份验证、速率限制、webhook、保险库、发布)见 docs/ENV.md。

自定义数据库位置
claude mcp add memory-server --env MCP_MEMORY_DB_PATH=/path/to/project/.memory.db node /path/to/dist/index.js
替代嵌入模型
# Swap the embedding model (same 384 dimensions; drop-in for the existing index
# AFTER a re-embed; see the warning below)
claude mcp add memory-server \
  --env MCP_MEMORY_MODEL=Xenova/bge-small-en-v1.5 \
  --env MCP_MEMORY_DIMENSIONS=384 \
  node /path/to/dist/index.js

会记录并强制校验模型身份。 数据库会记住用于构建它的嵌入模型(schema_meta.embedding_model)。如果使用不同的 MCP_MEMORY_MODEL 启动服务,会明确报错,而不会悄悄降低每次搜索的效果(维度相同不代表向量空间相同)。若要切换模型:设置新模型并运行 memory rebuild(从保险库重新生成嵌入),或导出后重新导入。

配置文件

配置文件用于控制自我改进行为、钩子设置和各项目的覆盖选项。解析顺序:先读取环境变量 MCP_MEMORY_CONFIG_PATH,然后是 <cwd>/.mcp-memory/config.json(项目级初始化会写入此文件),最后是 ~/.mcp-memory/config.json。运行 npx mcp-memory-graph init 可创建该文件,也可以手动编写:

{
  "defaults": {
    "scope": "project",
    "namespace": "auto"
  },
  "projects": [
    {
      "path": "~/Documents/MyApp",
      "namespace": "my-app",
      "watch": ["README.md", "docs/**/*.md"]
    }
  ],
  "consolidation": {
    "similarity_threshold": 0.85,
    "prune_after_days": 30,
    "min_importance_to_keep": 0.1,
    "max_operations": 100,
    "schedule": [
      { "hour": 11, "minute": 30 },
      { "hour": 16, "minute": 0 }
    ]
  },
  "hooks": {
    "extract_on_compact": false,
    "extract_on_session_end": false,
    "track_searches": true,
    "review_on_stop": true
  },
  "extraction": {
    "categories": ["decision", "pattern", "error_fix", "convention"],
    "min_confidence": 0.4
  }
}
部分键默认值说明
defaultsscope"project"新记忆的默认范围
defaultsnamespace"auto"默认命名空间("auto" 根据项目目录名确定)
projects[]path项目根目录
projects[]namespace此项目的命名空间覆盖值
projects[]watch用于跟踪文件变更的 Glob 模式
consolidationsimilarity_threshold0.85用于去重的余弦相似度阈值(0.5-1.0)
consolidationprune_after_days30清除低质量记忆前的天数
consolidationmin_importance_to_keep0.1保留记忆所需的最低重要性分数
consolidationmax_operations100每次整合运行的最大操作数
consolidationschedule[{ "hour": 3, "minute": 0 }]一个或多个 { hour, minute } 条目(24 小时制)。更改后重新运行 init,以重新生成 launchd plist。
hooksextract_on_compactfalse压缩上下文前挖掘对话记录(基于正则表达式,默认关闭)
hooksextract_on_session_endfalse会话结束时提取经验(基于正则表达式,默认关闭)
hookstrack_searchestrue将搜索命中和未命中记录到 search-log.jsonl
hooksreview_on_stoptrue会话结束时启动无头模式的 claude -p,以审查对话记录并保存经验。设为 false 可禁用此功能,但保留钩子。
extractioncategories["decision", "pattern", "error_fix", "convention"]要提取的经验类别
extractionmin_confidence0.4提取经验所需的最低置信度
storagedb_path取决于范围SQLite 文件位置(用户范围为 ~/.mcp-memory/memory.db,项目范围为 <project>/.mcp-memory/memory.db)。MCP_MEMORY_DB_PATH 可覆盖此设置。
vaultpath未设置未显式传入路径时,vault_sync、memory_export_vault 和 rebuild 使用的 Obsidian 知识库根目录。MCP_VAULT_PATH 和 --vault <path> 可覆盖此设置。
vaultwrite_throughtrue配置知识库后,将记忆写入同步到知识库,保存为 .md 文件。MCP_VAULT_WRITE_THROUGH=0 可覆盖此设置。

CLI 命令

命令描述
npx mcp-memory-graph通过 stdio 启动 MCP 服务(默认)
npx mcp-memory-graph serve启动 HTTP 服务:MCP 传输、REST API、Web 控制面板
npx mcp-memory-graph init交互式设置向导:钩子、配置、夜间计划(用户范围)。添加 --yes/-y 以非交互方式运行
npx mcp-memory-graph init --scope project仅为当前项目设置(创建 .mcp.json 和 .claude/settings.json)
npx mcp-memory-graph uninstall撤销 init:移除钩子和计划
npx mcp-memory-graph consolidate手动运行梦境周期
npx mcp-memory-graph export-graph [--out <path>] [--scope <s>] [--namespace <n>]写入可提交且确定性的 memory-graph.json,用于 git 共享
npx mcp-memory-graph git-setup安装 .gitattributes 条目和 memory-union 合并驱动,以便无冲突地共享图
npx mcp-memory-graph merge-graphs <ours> <theirs> <out>用于 memory-graph.json 的 Git union 合并驱动(由 git 调用,而非手动调用)
npx mcp-memory-graph vault-init [--vault <path>]将 vault 初始化为 git 仓库:配置 union 合并驱动、pull.rebase=false,以及 post-merge 和 post-checkout 重建钩子
npx mcp-memory-graph sync将所有有效记忆及图的 sidecar 导出到 vault(.md 文件)
npx mcp-memory-graph rebuild [--vault <path>]从 vault 的 .md 文件重建 SQLite 索引(协作者在执行 git pull 后运行此命令)
npx mcp-memory-graph migrate将数据库升级到当前架构版本
npx mcp-memory-graph backup [--out <path>]创建 WAL 安全的在线快照(保留数量:MCP_MEMORY_MAX_BACKUPS,默认 10)
npx mcp-memory-graph keys create|list|revoke按密钥进行 RBAC:创建、查看、撤销 API 密钥(命名空间集合加访问权限上限)

工具参考

1. memory_store

存储一条新记忆。自动生成向量嵌入。

参数类型必填默认值描述
contentstring是要存储的文本内容
titlestring否记忆的简短标题
scopeenum否global¹global、project、user、team、department
namespacestring否¹子范围(例如,项目名称)
importance_scorenumber否计算得出0-1 的手动重要性覆盖值
agent_idstring否MCP_AGENT_ID env用于 memory_attribution 汇总的归属信息
on_conflictenum否addadd、supersede、skip:近似重复项的写入门控行为
document_typestring否contract、policy、code、incident、decision 等
sourcestring否此内容的来源
authorstring否创建者
departmentstring否legal、engineering、hr、sales、finance
tagsstring[]否用于分类的标签
access_levelenum否internalpublic、internal、confidential、restricted
languagestring否enISO 639-1 语言代码
metadataobject否特定领域的键值对
expires_atstring否ISO 8601 到期日期

¹ 如果省略,则优先采用已加载配置文件中的 defaults.scope 和 defaults.namespace("auto" = 项目目录名称);硬编码的回退值为 global,且不设命名空间。

提示词示例:

Store this memory with department=legal and tags=["compliance","gdpr"]:
"All customer data processing agreements must include a GDPR Article 28 addendum effective January 2025."
2. memory_search

在已存储的记忆中进行向量与关键词混合搜索。

工作原理:

  1. 将查询转换为向量,并与所有已存储的向量进行比较(语义相似度)。
  2. 使用 FTS5 在记忆文本中匹配关键词(精确匹配)。
  3. 使用倒数排名融合合并两组结果。
  4. 可选的时间衰减会优先显示较新的记忆。
  5. 为结果添加置信度分数和标签。
  6. 记录访问情况,以用于质量评分。
参数类型必填默认值描述
querystring是自然语言查询或关键词
scopeenum否按范围筛选
namespacestring否按命名空间筛选
departmentstring否按部门筛选
document_typestring否按文档类型筛选
tagsstring[]否筛选:必须包含所有指定标签
access_levelenum否按访问级别筛选
languagestring否按语言筛选
limitnumber否10最大结果数(1-100)
offsetnumber否0分页偏移量
search_modeenum否hybridhybrid、vector 或 keyword
temporal_decayobject否{type: "exponential", half_life_days: 30} 或 {type: "linear", max_age_days: 365}
date_fromstring否仅包含此日期之后的记忆
date_tostring否仅包含此日期之前的记忆
min_confidencenumber否最低置信度阈值(0-1)

提示词示例:

Search memories for "contract renewal notice requirements" in the legal department

Search memories for "authentication" with search_mode=keyword

Search memories for "deployment patterns" with temporal_decay={type:"exponential", half_life_days:60}

每条结果都包含记忆内容和元数据、合并后的 RRF score、归一化的 confidence(0-1)、confidence_level 标签(0.7 及以上为高,0.4 及以上为中,低于此值为低),以及 match_type(hybrid、vector 或 keyword)。

默认的 detail_level: "summary" 投影会返回 confidence_level,但为节省令牌,不包含数值型 confidence 和完整的 content。需要这些内容时,请传入 detail_level: "full"。

3. memory_get

按 ID 获取指定记忆。对于已摄取的文档,还可选择包含所有子块。

参数类型必填默认值描述
idstring是记忆 UUID
include_chunksboolean否false包含已摄取文档的子块
4. memory_update

更新现有记忆。如果内容发生变化,系统会自动重新生成嵌入。之前的版本会保存到历史记录中。

参数类型必填默认值描述
idstring是要更新的记忆 ID
contentstring否新内容(会触发重新嵌入)
titlestring否新标题
metadataobject否替换元数据
tagsstring[]否替换标签
expires_atstring/null否新的过期时间,或设为 null 以移除
changed_bystring否执行此更改的人
5. memory_delete

按 ID 或筛选条件删除记忆。必须提供 id 或 filter 中的至少一个。

参数类型必填描述
idstring否删除指定记忆
filter.scopeenum否删除范围内的所有记忆
filter.namespacestring否删除命名空间内的所有记忆
filter.departmentstring否删除部门内的所有记忆
filter.before_datestring否删除早于指定日期的记忆
filter.expired_onlyboolean否仅删除已过期的记忆
6. memory_list

浏览记忆,支持筛选、分页和排序。

参数类型默认值说明
scopeenum按范围筛选
namespacestring按命名空间筛选
departmentstring按部门筛选
document_typestring按类型筛选
limitnumber20最大结果数(1-100)
offsetnumber0分页偏移量
sort_byenumcreated_atcreated_at、updated_at 或 title
sort_orderenumdescasc 或 desc
7. memory_ingest

摄取完整文档:根据内容类型将文档拆分成多个片段,为每个片段生成嵌入,并存储所有内容及其父子关系。适用于大型文档。

参数类型默认值说明
contentstring完整文档文本(必填)
titlestring文档标题
content_typeenumtext分块策略:text、markdown、code、legal、structured
chunk_sizenumber512目标分块字符数(约每个 token 4 个字符)
chunk_overlapnumber50分块之间的重叠长度,用于保留上下文
sourcestring来源文件或 URL
document_typestring文档分类
departmentstring部门
authorstring作者
tagsstring[]标签
metadataobject特定领域的元数据

按内容类型分块:

类型策略分割依据
text段落两个换行符(\n\n)
markdown根据标题#、##、### 标题
code根据函数function、class、const、interface 边界
legal句子句号、感叹号、问号
structured段落两个换行符(与 text 相同)
8. memory_related

查找与指定记忆在语义上相关的记忆。使用向量相似度,因此能够发现关键词搜索会遗漏的关联。

参数类型默认值说明
idstring要查找相关记忆的记忆 ID(必填)
limitnumber5最大结果数(1-50)
min_similaritynumber最低相似度阈值(0-1)
9. memory_versions

查看记忆的版本历史。每次更新都会创建一条版本记录。

参数类型默认值说明
idstring记忆 ID(必填)
limitnumber10最大版本数(1-50)
10. memory_stats

已存储记忆的使用统计信息。

参数类型说明
scopeenum按范围筛选统计信息
namespacestring按命名空间筛选统计信息
departmentstring按部门筛选统计信息

返回记忆、文档和分块的总数,按范围、部门和类型细分的统计信息,存储大小以及已过期的数量。

11. memory_export

将当前记忆内容导出为 JSON,以便移植或迁移。这不是完整备份:它仅序列化当前有效的顶层记忆,不包含编辑历史、知识图谱、压缩撤销原始内容、摄取的子分块以及软删除的记录。灾难恢复时,请复制 SQLite 文件(cp ~/.mcp-memory/memory.db ...,参见 RUNBOOK);导入时会以确定性方式重新计算嵌入。

参数类型默认值说明
scopeenum筛选导出内容
namespacestring筛选导出内容
departmentstring筛选导出内容

每次最多导出 1000 条记录。

12. memory_import

从 JSON 导入记忆。每个条目都会经过嵌入并存储。

参数类型默认值描述
data数组记忆对象数组(必填)
overwrite布尔值false覆盖现有 ID
13. vault_sync

扫描 Obsidian 知识库,解析 Markdown,进行嵌入并存储。请参阅下文的 Obsidian 知识库集成。

14. vault_status

知识库的同步状态:已同步、待同步和已更改的文件,以及上次同步时间。

15. vault_search

限定在单个知识库记忆范围内的混合搜索。

默认情况下,此搜索会查询以知识库文件夹名称命名的命名空间。从其他命名空间导出的记忆会在 frontmatter 中保留其原始命名空间。如果刚同步的知识库搜索不到任何结果,请传入显式的 namespace(和/或 scope)覆盖值。

16. memory_consolidate

梦境周期:去重、评分、修剪、过期处理并检测知识缺口。

参数类型必填默认值描述
scope枚举否将整合范围限定为某个范围
namespace字符串否将整合范围限定为某个命名空间
similarity_threshold数字否0.85用于去重的余弦相似度(0.5-1.0)
prune_expired布尔值否true移除已过期的记忆
prune_low_quality布尔值否false移除重要性低于最低值的记忆
dry_run布尔值否false预览更改,但不应用
max_operations数字否100限制每次运行的操作总数

按顺序运行五个阶段:评分(重新计算重要性)、过期处理(执行 expires_at)、修剪(启用后移除低质量记忆)、去重(合并近似重复项)、缺口检测(显示搜索结果为零的查询)。返回一份报告,其中包含各阶段的计数。

示例提示词:

Run a dream cycle consolidation with dry_run=true to preview what would change

Consolidate memories in namespace=my-project with similarity_threshold=0.9

Run consolidation with prune_low_quality=true to clean up unused memories
17. memory_extract_learnings

使用启发式模式匹配,从会话记录中提取决策、模式、错误修复和约定。无需外部大模型。

参数类型必填默认值描述
transcript字符串是要提取内容的会话记录文本
scope枚举否提取出的记忆的范围
namespace字符串否提取出的记忆的命名空间
department字符串否提取出的记忆的部门
tags字符串[]否附加标签
source字符串否来源归属信息
categories枚举[]否all筛选为 decision、pattern、error_fix、convention
auto_store布尔值否true自动存储提取出的经验

提取时会查找决策类措辞(“我们决定”“解决方法是”)、模式类措辞(“始终使用”“绝不这样做”)、错误修复类措辞(“问题在于”“通过……解决”)和约定类措辞(“我们的约定是”“标准做法”)。每个匹配项都会与现有记忆去重,并以较低的初始置信度存储。

18-42. 图谱、Agent-OS、保管库往返转换和治理工具

其余工具的参数由 src/schemas/ 中的 Zod 架构验证;每项注册的完整说明位于 src/server.ts。

#工具用途
18memory_tiersMemGPT 风格的热层/召回层/归档层分布,以及热工作集
19memory_export_vault将记忆写入 Obsidian 保管库,保存为带有 YAML frontmatter 的 .md 文件(与 vault_sync 方向相反)
20memory_canvas将图谱导出为供 Obsidian 使用的 JSON Canvas 1.0 .canvas 文件
21memory_manifest轻量级、不含内容的索引(标题、类型、标签、分数),用于发现现有内容
22memory_graph查询知识图谱:实体、关系、关联记忆、多跳遍历(深度为 1-3)
23memory_extract_entities存储从记忆中由 LLM 提取的实体和关系
24memory_condense应用由 Agent 生成的摘要来精简旧记忆(保留原文)
25memory_restore将精简后的记忆还原为原始内容并重新嵌入
26memory_query使用经过严格令牌预算控制的子图回答问题,而非将大量内容灌入上下文
27core_memory_get读取 (scope, namespace) 对应的固定核心记忆块,该内容始终保留在上下文中
28core_memory_append追加到核心记忆块(若会超出 char_limit,则拒绝操作)
29core_memory_replace替换核心记忆块中的文本(用于更新或精简内容)
30memory_reflectGenerative Agents 风格的反思:收集素材,或存储综合得出的洞见
31memory_communities对实体图谱进行 GraphRAG 社区检测,以发现语料级主题
32memory_template按文档类型获取结构化笔记模板
33memory_session_note每个会话的“每日日记”(每个 session_id 追加到一条记忆中)
34memory_attribution汇总每个 agent_id 写入的有效记忆数量
35memory_questions“待询问问题”摘要:含义模糊的链接、文档记录不足的实体或孤立项
36memory_forget达到 GDPR 级别的遗忘:默认软删除(可恢复),也可选择 hard,先导出再擦除
37memory_history单条记忆的指定时间点双时态时间线及编辑版本历史
38memory_unlinked_mentions记忆文本中提及但尚无图谱边连接的实体名称(建议链接)
39memory_query_structured对顶层记忆进行精确的元数据筛选查询(不进行语义排序)
40memory_version_diff对比记忆两个已存储版本之间逐行的差异
41memory_version_restore将记忆回滚到先前版本(先为当前版本创建快照)
42memory_verify验证记忆的签名来源信封(对 content_hash 和来源使用 ed25519):逐条返回 ok/unsigned/content_mismatch/bad_signature/untrusted 状态及汇总信息。可通过 MCP_SIGN_MEMORIES 启用签名;多机器允许列表使用 MCP_TRUSTED_PUBKEYS/trusted_pubkeys
43-50. 活跃基础设施与类型化结构
#工具用途
43memory_webhook管理事件总线(由 MCP_WEBHOOKS 控制):注册、列出或删除经过 SSRF 验证的出站目标,或分发持久化的 HMAC 签名投递队列(重试、断路器、死信)。变更会触发 created/updated/superseded/deleted/forgotten 事件
44memory_insights顾问摘要:未解决的冲突、过时记忆、最常被质疑的事实、缺少证据的决策
45memory_health存储健康状况汇总:当前/已退役/过时记忆数量、老化分布、未解决的冲突、Webhook 投递健康状况
46memory_revalidate变更传播:列出过时记忆、预览变更的影响范围(试运行),或确认记忆仍然有效
47memory_session_state可恢复的“我刚才进行到哪一步”会话状态,支持保存和恢复(带版本)
48memory_expertise每位用户的专业知识档案:记录主题、获取档案
49memory_export_dataset将经验和反思导出为 JSONL 训练对(pairs/chatml/alpaca),用于微调
50memory_lesson一次调用即可记录结构化经验教训或事件:根据你提供的字段填充匹配的章节模板(事件 → Symptom/Root Cause/Fix/Prevention;经验教训 → What/Why it matters/How to apply),并通过常规去重写入流程存储

架构

系统概览
Claude Code ──stdio──> MCP Memory Graph
                            │
                    ┌───────┴───────┐
                    │               │
              Transformers.js   SQLite DB
              (embeddings)    (~/.mcp-memory/memory.db)
                                    │
                       ┌────────────┼────────────┐
                       │            │            │
                   memories    memories_fts  memories_vec
                   (data +     (FTS5 index)  (vec0 index)
                    scores)
                       │
              ┌────────┼────────┐
              │        │        │
        memory_    memory_    ingest_
        versions   access_    source_
                   log        tracking


Claude Code Hooks (opt-in)
    │
    ├── SessionStart ──> memory_stats (status check)
    ├── PostToolUse ───> search-log.jsonl (hit/miss tracking)
    ├── PreCompact ────> learning extraction (disabled by default)
    └── Stop ──────────> spawn detached `claude -p` headless review
                              │
                              └─> --allowedTools mcp__memory-server__memory_store
                                  Claude reviews transcript → memory_store calls

Nightly Schedule (opt-in)
    └── 3:00 AM ───────> memory_consolidate (dream cycle)
混合搜索的工作原理
Query: "contract renewal notice"
         │
    ┌────┴────┐
    │         │
 Embed     Tokenize
    │         │
    ▼         ▼
 sqlite-vec  FTS5
 (semantic)  (keyword)
    │         │
    │  rank   │  rank
    │  1: A   │  1: A
    │  2: C   │  2: B
    │  3: B   │  3: D
    │         │
    └────┬────┘
         │
   Reciprocal Rank Fusion
   RRF(d) = Σ 1/(60 + rank)
         │
         ▼
   [A: 0.033, B: 0.026, C: 0.016, D: 0.016]
         │
   Temporal Decay (optional)
         │
   Confidence Scoring
         │
   Access Tracking (record hit)
         │
         ▼
   Final ranked results
数据库架构

SQLite 数据库的架构版本为 18,并可从任何更早版本自动升级。核心表:

  • memories:所有记忆数据,TEXT 主键(UUID),支持文档块的父子关系,并包含 access_count、last_accessed_at、importance_score 和 confidence_score。
  • memories_fts:用于关键词搜索的 FTS5 虚拟表,采用 BM25 排名,并与 memories 表同步。
  • memories_vec:用于向量搜索的 vec0 虚拟表。包含 384 维 float32 嵌入,以及用于预筛选的范围和命名空间元数据。
  • memory_versions:记录每次变更的版本历史。
  • memory_access_log:记录每次搜索、获取和相关记忆访问,以及时间戳和查询上下文。
  • ingest_source_tracking:记录摄取的文件,用于在重新摄取时检测变更。

后续架构版本增加了知识图谱表(实体、链接、冲突、社群)、Webhook、会话状态和 RBAC api_keys 表。每次变更都会在 SQLite 事务中原子性地保持三个核心表同步;repository.ts 层负责强制执行此规则,其他任何代码都不会直接访问这些表。

项目布局
src/
├── index.ts        # Entry point (stdio transport)
├── server.ts       # All 51 tool registrations
├── config/         # Config file loading + validation
├── db/             # Connection, schema, migrations, repository (three-table sync)
├── embeddings/     # Embedding providers (Transformers.js, registry, Ollama)
├── search/         # Hybrid search, reranker, temporal decay, scoring
├── chunking/       # Per-content-type chunking strategies
├── graph/          # Entities, links, PageRank, communities
├── vault/          # Obsidian round-trip, write-through, bookkeeping
├── tools/          # One handler per MCP tool
├── api/            # REST routes + security middleware
├── events/         # Webhook bus (SSRF guard, HMAC, retry)
├── cli/            # init, serve, vault, backup, keys, migrate, ...
├── hooks/          # Claude Code lifecycle hooks
└── schemas/        # Zod schemas for every tool input

各部门的使用场景

工程:

Store memory: "We chose event sourcing over CRUD for the order service because
we need full audit trail and the ability to replay events for debugging.
ADR-042, decided 2026-03-15."
department=engineering, document_type=decision, tags=["architecture","event-sourcing"]

法务:

Ingest this contract template with content_type=legal, department=legal,
document_type=contract, tags=["template","nda","standard"]

财务:

Store memory: "Q4 2025 revenue recognition policy change: SaaS contracts
over 12 months now recognized ratably per ASC 606 guidance."
department=finance, document_type=policy, tags=["revenue-recognition","asc-606"]

人力资源:

Ingest the employee handbook with department=hr, content_type=text,
document_type=policy, tags=["handbook","onboarding"]

销售:

Store memory: "When prospect objects on price vs CompetitorX, lead with
our 99.9% uptime SLA and dedicated support. This converted 3 deals in Q1."
department=sales, document_type=pattern, tags=["objection-handling","pricing","competitorx"]

Obsidian Vault 集成

将服务指向一个 Vault 文件夹,其中的每个 Markdown 文件都会成为可搜索的记忆,并提取 frontmatter、标签和 wiki 链接。无需 Obsidian 应用;它会直接从磁盘读取文件。

工具描述
vault_sync扫描 Vault、解析文件、生成嵌入并存储。增量同步(基于 mtime)。
vault_status同步状态:已同步、待处理和已更改的文件数,以及上次同步时间。
vault_search在 Vault 的记忆范围内进行混合搜索。

提取内容:

Obsidian 功能记忆字段
YAML frontmatter title:title
YAML frontmatter tags: [...]tags(与行内标签合并)
YAML frontmatter author:author
YAML frontmatter(所有字段)metadata.frontmatter
内容中的行内 #tagstags(与 frontmatter 合并)
[[wiki-links]]metadata.links 数组
相对于 Vault 的文件路径source
Vault 目录名称namespace

使用示例:

Sync my Obsidian vault at ~/Documents/my-vault

Check vault sync status for ~/Documents/my-vault

Search my vault for "meeting action items about hiring"

Sync vault but only the notes/ and projects/ folders:
  vault_sync with include_patterns=["notes/**", "projects/**"]

Force re-sync everything (ignore modification times):
  vault_sync with force=true

vault_sync 参数:

参数类型默认值描述
vault_pathstringVault 目录的绝对路径(必填)
chunk_sizenumber1024大文件的目标分块大小
chunk_overlapnumber50分块之间的重叠长度
forcebooleanfalse无论 mtime 如何,重新同步所有文件
include_patternsstring[]仅同步与 glob 模式匹配的文件(例如 ["notes/**"])
exclude_patternsstring[]跳过与 glob 模式匹配的文件(例如 ["templates/**"])

同步方式:递归扫描 Vault 中的 .md 文件(跳过 .obsidian/、.trash/、.git/),将文件修改时间与上次同步时进行比较,从新增或已更改的文件中提取 frontmatter、wiki 链接和标签,生成嵌入并存储。已删除文件对应的记忆也会被删除。大于分块大小的文件会采用 Markdown 感知分块方式拆分。未更改的 Vault 再次同步耗时不到 1 毫秒。

安全与隐私

  • 除一次性模型下载外,不会进行网络调用(模型会在本地缓存)。
  • 无遥测、无分析、无跟踪。
  • Hooks 默认不启用。仅在运行 npx mcp-memory-graph init 时安装。
  • 夜间计划任务也默认不启用,并可通过 npx mcp-memory-graph uninstall 移除。
  • 所有数据都存储在一个 SQLite 文件中:易于备份、迁移或删除。
  • 提供 access_level 元数据(public、internal、confidential、restricted),便于组织层面的管理。
  • 数据不会离开你的计算机。

备份:

# WAL-safe online snapshot with retention
npx mcp-memory-graph backup

# Or a simple file copy
cp ~/.mcp-memory/memory.db ~/.mcp-memory/memory.db.backup

重置:

# Delete the database to start fresh
rm ~/.mcp-memory/memory.db

夜间整合

通过 npx mcp-memory-graph init 安装后,夜间任务会运行梦境周期的全部五个阶段,并轮换访问日志(删除超过 90 天的条目)。

在 macOS 上,会在 ~/Library/LaunchAgents/com.mcp-memory.consolidate.plist 创建一个 launchd plist,计划于凌晨 3:00 运行。在 Linux 上,init 会打印一条 cron 建议:

# Add to crontab -e
0 3 * * * /usr/local/bin/npx mcp-memory-graph consolidate

可随时手动运行:

npx mcp-memory-graph consolidate

局限性

  • 规模上限。 向量搜索采用精确扫描:10K 个向量时 p95 为 9.1 ms,50K 个时约为 30 ms,此后性能会线性下降。几十万以内都能轻松应对;超过这个规模就需要专用的 ANN 索引,而此服务目前还没有。
  • 针对英语优化。 默认的 MiniLM 模型在实际使用中仅支持英语;跨语言匹配效果较弱。可以通过 MCP_MEMORY_MODEL 配置多语言模型(需要重建),但随附的基准测试仅验证了默认模型。
  • 首次调用冷启动。 首次使用时,嵌入模型加载需要 3 到 5 秒。此后会缓存。
  • 启发式提取。 memory_extract_learnings 使用模式匹配,而非大模型。它能识别常见表述,但会漏掉不明显的表述。(Stop 钩子中的 claude -p 审查才是大模型质量的处理路径。)
  • 单进程。 RBAC 密钥和撤销信息保存在服务进程中。要实现水平扩展,可以将各租户分片到不同进程,或为每个租户单独使用一个数据库文件。

路线图

接下来实际要做的事项,大致按顺序排列:

  • 可选的多语言嵌入。 提供多语言 ONNX 模型选项(嵌入器注册表和模型标识保护机制已经存在,因此替换安全且会明确提示)。
  • Office 文档摄取。 将 PDF、DOCX、XLSX 等格式作为摄取模式,仅使用本地提取。
  • Vault 文件监视器。 .md 文件发生变化时自动重建,而非手动执行 rebuild。
  • as_of 内容重建。 目前,指定时间点的查询可以重建有效性(哪些事实当时有效);还需要补全另一部分:重建该时间点已编辑记忆的内容。
  • 面向数十万个以上向量语料库的 ANN 索引。
  • 移植 Windows 测试套件。 此服务可在 Windows 上运行,但测试套件依赖 POSIX 路径假设;在完成移植前,Windows CI 阶段不会阻塞构建。

技术栈

组件软件包用途
MCP SDK@modelcontextprotocol/sdk ^1.29Model Context Protocol 服务框架
嵌入@huggingface/transformers ^3.8在 Node.js 中进行本地 ONNX 模型推理
数据库better-sqlite3 ^12.10通过原生绑定实现的同步 SQLite
向量搜索sqlite-vec 0.1.10-alpha.4用于 KNN 搜索的 vec0 虚拟表
验证zod ^3.25工具输入的模式验证
TypeScripttypescript ^5严格模式,ES2022 目标
前端React 19、Vite、Tailwind CSS v4Web 仪表板 SPA
UI 组件shadcn/ui无障碍组件原语
模糊搜索fuse.js ^7客户端自动补全建议
图可视化d3-force、d3-zoom、d3-drag知识图谱布局

许可证

可获取源代码,但并非开源。根据 PolyForm Noncommercial License 1.0.0 授权:可免费用于任何非商业用途(个人项目、爱好、学习、研究、慈善、教育、公共研究和政府用途)。商业用途需要付费许可证;请参阅 COMMERCIAL.md。

如果你不确定自己的用途是否属于商业用途,请查看许可证中的安全港条款,或直接咨询:[email protected]。

关键词

MCP 记忆服务 · Model Context Protocol · Claude Code 记忆 · 持久化 AI 记忆 · 大模型长期记忆 · AI Agent 记忆 · 本地优先记忆 · $0/token 记忆 · 混合向量 + 关键词搜索 · 语义搜索 · 知识图谱 · 双时态记忆 · HippoRAG / Personalized PageRank · 交叉编码器重排序 · RAG 记忆 · SQLite 向量数据库 · sqlite-vec · FTS5 / BM25 · 本地嵌入(all-MiniLM-L6-v2、Transformers.js)· Obsidian Vault 同步 · JSON Canvas · GDPR 遗忘 · 已签名溯源信息 · 可自托管记忆。

也可通过以下描述搜索:作为 mem0、Zep、Letta、Cognee 和 Supermemory 的可自托管、隐私优先替代方案 · 面向 Claude / Cursor / Codex 的长期记忆 · 为 AI Agent 提供由 Obsidian 支持的知识库 · 永不离开你设备的本地知识图谱记忆。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。