mcpField
P
Project Memory

Project Memory

本地服务
npmjs.com记忆与知识17 周前更新

关于 Project Memory

Project Memory 是面向编码 Agent 的本地 MCP 服务,将项目决策、问题记录和偏好保存在仓库的普通文件中。它支持跨项目搜索与持续记忆,不依赖后台服务。

主要功能

  1. 01读取和搜索项目记忆
  2. 02记录决策、经验与偏好
  3. 03记录并检索问题历史
  4. 04跟踪和关闭未解决问题
  5. 05管理多阶段计划

适用场景

  1. 01调试前查找以往问题和修复
  2. 02为新会话恢复项目背景
  3. 03记录团队代码习惯和项目决策
  4. 04跨项目查看待处理问题

MCP 相关

MCP 服务提供读取、搜索和更新项目记忆的工具,包括问题追踪与计划管理;记忆本身以普通文件保存在磁盘上。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"project-memory": {
"command": "npx",
"args": [
"-y",
"@kaaustubh/project-memory-mcp"
],
"env": {
"PROJECT_MEMORY_ROOT": "<PROJECT_MEMORY_ROOT>"
}
}
}
}
启动命令npx -y @kaaustubh/project-memory-mcp
需要配置的环境变量
PROJECT_MEMORY_ROOTAbsolute path to the folder that holds your projects (the memory root). Defaults to the parent of the script if unset, so set it when running via npx.

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

安装包
npm@kaaustubh/project-memory-mcp1.6.0

工具

12

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

此工具无需参数。

详细介绍

project-memory MCP 服务

一个小型、本地的 MCP 服务,为 AI Agent(Claude Code、Cursor、VS Code / GitHub Copilot 等)提供代码文件夹中各个项目的共享持久记忆——包括每个项目的用途、已做出的决策,以及开发过程中遇到的每个 bug/问题。

它是无状态的:每个工具都会读取/写入磁盘上的纯文本文件,因此多个客户端(以及多台机器)共享同一个事实来源。

kaaustubh/project-memory-mcp MCP 服务

模型

层存放位置自动加载到上下文中?用途
项目记忆<project>/AGENTS.md✅ 是(通过 CLAUDE.md → @AGENTS.md)项目身份、技术栈、运行命令、简明决策/经验——保持精简
问题日志<project>/issues.jsonl❌ 否大量 bug/问题历史——按需获取

设计原则: 持久、低频的信息放入 AGENTS.md(自动加载)。大量历史记录(bug)放入 issues.jsonl(通过 search_issues 查询)。这样既能让始终加载的上下文保持精简,又能确保所有内容都可搜索。

MCP 受限时也能正常工作

一些组织会通过策略禁用第三方 MCP 服务(例如 GitHub Copilot 的 MCP 允许列表强制机制)。 由于记忆是纯文本文件,而非服务,即便如此,核心价值仍然不受影响:

  • 记忆本身只是文件。 编辑器读取 AGENTS.md 时会自动加载——无需调用 MCP——因此项目身份、决策、经验和偏好仍会进入 Agent 的上下文。
  • 该策略仅适用于 Copilot,且按客户端区分。 它不会影响 Claude Code 或 Cursor 中使用同一服务;采用仅允许列表 / 仅注册表模式的组织也可以允许使用它——此服务已发布到官方 MCP 注册表(io.github.kaaustubh/project-memory-mcp)。

只有交互式工具(log_issue、search_issues 等)会通过 MCP 通道运行;基于文件的记忆无需 MCP 也能正常工作。

工具

  • list_projects、get_project、search_memory — 读取项目记忆
  • append_decision、append_learning — 在 AGENTS.md 中追加一条带日期的列表项
  • remember_preference — 将一次纠正/明确表达的习惯转化为记忆模式(全局习惯写入根目录 AGENTS.md 的 ## Preferences,项目专属习惯则写入对应项目的文件);通过自动加载机制生效,因此下次会话中仍可获取
  • log_issue — 记录 bug/问题 → issues.jsonl
  • search_issues — 跨所有项目搜索“之前遇到过这个问题吗?”(按字段限定;可选 tags 筛选)
  • list_open_issues、resolve_issue — 跟踪/关闭 bug
  • sync_registry — 根据磁盘上的内容同步根目录 AGENTS.md 中的项目表(为新项目添加行,标记过时项目)
  • find_by_file — 根据文件路径,显示与之相关的问题和决策/经验(“这段代码为什么这样写?”)
  • start_initiative、get_initiative、list_initiatives、update_initiative — 跟踪一个命名的多会话工作(代号、计划、不断更新的待办列表),让它可以在之后任意会话中按名称继续,而不仅限于启动它的会话;详见下文的计划事项
  • check_in、check_out — 标记工作日的开始/结束,并根据从磁盘收集的证据生成站会摘要(所有仓库中的 git 提交、未提交的进行中工作、记忆写入、计划事项进展);第二天早上的 check_in 会返回该摘要——这就是你的站会。无需 Agent,随时可以打印:npx -y @kaaustubh/project-memory-mcp standup

你无需直接调用这些工具——只需用自然语言与 Agent 对话,它会选择合适的工具。关于实际该怎么说,请参阅下文的日常使用。

日常使用

大部分操作会自动完成:打开项目时会自动加载其 AGENTS.md(Agent 已了解该项目),并会主动捕获信息(还可选用 Stop 钩子)。你主要需要在合适的时候提取记忆。只需与 Agent 对话:

何时可以这样说触发的操作
开始调试前"以前遇到过这个吗?<paste error>"在所有项目中执行 search_issues
开始处理你在其他地方做过的事情"我在任何项目里是怎么验证 Stripe webhook 的?"执行 search_memory(跨项目)
遇到令人困惑的代码"index.js 为什么是这样?查一下记忆。"执行 find_by_file
你做出了重要决定/修复了实际问题(无需操作——系统会自行记录并告知你)执行 append_decision / log_issue
你纠正了 Agent 的工作方式"不,提交前一定要运行类型检查——记住这一点。"执行 remember_preference(全局或针对项目)
分类处理"我的项目中还有哪些问题未解决?"执行 list_open_issues
修复了一个问题"解决 pulse_stripe-004——通过……修复"执行 resolve_issue
添加了新项目"同步注册表。"执行 sync_registry

**最重要的习惯:每次调试前,都要条件反射般地问一句“以前遇到过这个吗?”。这正是记忆工具发挥作用的地方;其他事情由系统处理。

记录会先确认,不会悄无声息地进行——Agent 记录内容时会用一行话告知你。你可以随时纠正它:“别记录这个”,或者*“其实,这个也记录一下。”*

应急选项:PROJECT_MEMORY_HOOK=off 可在当前会话中停用 Stop 钩子;uninstall-hook 可彻底移除它。

安装(npm — 推荐)

在你的代码/项目文件夹中运行:

cd ~/code            # the folder that holds your projects
npx -y @kaaustubh/project-memory-mcp install

这会将服务注册到本机所有具有 MCP 配置位置的客户端,并将当前目录设为项目根目录:

客户端写入的配置
Claude Code用户级,通过 claude mcp add 配置
Cursor~/.cursor/mcp.json
VS Code / GitHub Copilot Chat用户配置文件中的 mcp.json(适用于每个工作区)
GitHub Copilot CLI~/.copilot/mcp-config.json(或 $COPILOT_HOME)
JetBrains Copilot 插件(IntelliJ、PyCharm、WebStorm、…)~/.config/github-copilot/intellij/mcp.json
Visual Studio(Windows)%USERPROFILE%\.mcp.json — 全局配置,适用于所有解决方案
Kimi Code CLI~/.kimi-code/mcp.json(或 $KIMI_CODE_HOME)
Gemini CLI~/.gemini/settings.json
OpenAI Codex CLI~/.codex/config.toml(唯一使用非 JSON 格式的客户端——以 TOML 合并)
Windsurf~/.codeium/windsurf/mcp_config.json

每次写入都会合并到现有文件中(不会影响你已配置的其他 MCP 服务),并尽力独立完成——本机未安装的客户端会被静默跳过,其余客户端仍会完成注册。重启你使用的应用,然后向 Agent 说*“为这个文件夹设置项目记忆”*,为每个项目生成 AGENTS.md。

**Copilot 使用场景(VS Code、CLI、JetBrains、Visual Studio):**工具只能在 Agent 模式下运行,配置更改需要重启后才会生效。

无需克隆,无需全局安装——MCP 配置只会运行 npx,按需获取并运行最新版本。

**团队记忆(Beta 注册):**希望团队成员共享这些记忆,而不只是保存在你的机器上?请登记意向:https://github.com/kaaustubh/project-memory-mcp/issues/1

通过源码安装
git clone https://github.com/kaaustubh/project-memory-mcp.git ~/code/.memory-server
cd ~/code/.memory-server && ./install.sh

安装后的工作方式

常见问题:“安装后,它就会自动开始做事吗?” 不完全是—— 该服务是被动的。实际流程如下:

  1. 重启编辑器。 MCP 服务会在启动时加载,因此只有下次启动 Claude Code / Cursor / VS Code 时,该服务才会 可用。
  2. 推送层(自动执行,并非由服务完成): 打开项目时,编辑器会将 AGENTS.md(通过 CLAUDE.md → @AGENTS.md)读入模型的上下文。这就是为什么 Agent“自然就知道”你的项目是什么——这是编辑器内置的功能。
  3. 拉取层(服务按需响应): 服务会公布其工具,然后等待。它不会自行执行任何操作。只有在相关时,Agent 才会调用工具——例如,你说 “记录这个 bug” 或 “以前遇到过这个问题吗?”,或者模型判断工具有用。没有后台进程,也不会进行扫描。

第一天是空的。 全新设置尚无 AGENTS.md 文件,因此自动加载没有内容可加载,而且在项目记忆存在之前,log_issue 会拒绝执行。请先让 Agent 初始化一次:“为这个文件夹设置项目记忆”——它会创建 AGENTS.md 文件。之后,一切就能正常运行。

简而言之:一套约定(自动加载的文件)+ Agent 自行决定是否使用的工具 + 一次性设置。 没有魔法,也没有守护进程。

主动记录(无需你说“记录这个”)

该服务提供了一套常驻的记录策略(连接时发送给客户端,并附带指令性工具描述),因此 Agent 会自行记录,而不是等你提出要求:

  • 调试报告的问题之前 → 它会通过 search_issues 查找以前的修复方案。
  • 修复了非简单 bug 之后 → 它会调用 log_issue。
  • 做出实际决策或发现值得长期记住的注意事项之后 → 调用 append_decision / append_learning。
  • 你纠正了它的工作方式或说明了一种习惯之后 → 调用 remember_preference,这样一次性的纠正就会成为它在下次会话中重新提起的模式。

这是主动但不会悄无声息的:Agent 会用一句话告诉你它记录了什么;不确定时会先询问,而不是记录无关内容;也会跳过琐事和机密信息。你始终可以覆盖它的行为——说“记录这个”或“别管了”。常驻策略尽力而为(取决于模型是否遵循);如需硬性保证,请添加下方的选择启用型 Stop hook。

保证记录(选择启用型 Stop hook)

常驻策略可能会在会话中途被遗忘。Stop hook 可让记录变成必选项:当 Agent 尝试结束一轮时,它会运行一次,并在以下任一情况下阻止结束,要求进行一次记录:(a) 完成了实际工作(编辑文件或提交了更改),但项目记忆中没有任何记录;或 (b) 你纠正了它的工作方式,但没有保存偏好。如果已经写入记忆,或者没有任何更改且你也没有纠正它,hook 就会保持静默,让这一轮正常结束。

npx -y @kaaustubh/project-memory-mcp install-hook    # turn it on (then restart Claude Code)
npx -y @kaaustubh/project-memory-mcp uninstall-hook  # turn it off
  • 默认关闭——普通的 install 不会添加它;需要显式启用。
  • 不会循环——每轮最多触发一次(由 stop_hook_active 控制),之后就让 Agent 停止。
  • 每会话紧急关闭开关——设置 PROJECT_MEMORY_HOOK=off 即可禁用,无需卸载。
  • 开销——只有在修改了代码却没有记录的会话中,或你纠正了 Agent 但没有保存偏好的情况下,才会额外增加一轮模型调用;其他情况下保持静默。

自动回忆(可选的 UserPromptSubmit hook)

捕获只是闭环的一半——另一半是记得查找。回忆 hook 补上了另一半:每次提交提示词时,它都会将你的请求与问题 历史记录以及决策/经验/偏好进行匹配,并静默注入最相关的内容作为 上下文。因此,过去的修复或决策会自动浮现,无需你(或 Agent)记得去搜索—— “以前遇到过这个吗?”的习惯就此自动养成。

npx -y @kaaustubh/project-memory-mcp install-recall    # turn it on (then restart Claude Code)
npx -y @kaaustubh/project-memory-mcp uninstall-recall   # turn it off
  • 语义匹配(可用时)——如果安装了可选的嵌入模型 (@xenova/transformers),回忆会按含义进行匹配,因此即使没有共同词语,记录为 *“编译失败”的问题仍会在你说“构建坏了”*时浮现。 完全离线运行(模型只获取一次,之后会缓存)。如果没有安装,回忆会自动回退到 关键词匹配——无需配置,也不会影响其他功能。
  • 仅在相关时静默注入——对于无关紧要的提示词或没有匹配项时,不会注入任何内容。
  • 排序并限制数量——当前项目的匹配结果优先级最高;最多注入 4 行。
  • 默认关闭——与 Stop hook 一样,它是可选的(每次提示词都会产生开销)。普通的 install 不会添加 这两个 hook。
  • 按会话关闭——设置 PROJECT_MEMORY_RECALL=off,即可停用,而无需卸载。

**预热缓存:**在记录大量内容后(或启用回忆后运行一次),执行 npx -y @kaaustubh/project-memory-mcp reindex,预先为所有内容生成嵌入,这样首次回忆时 就无需承担这项开销。向量会按项目缓存在派生文件 .embeddings.json 中(可安全删除/加入 git 忽略;.jsonl + AGENTS.md 始终是 唯一事实来源)。

配合 Stop hook 使用,整个流程便可自动运行:Stop hook 确保内容被 保存,回忆 hook 确保它们在恰当时机重新出现。

计划(跨会话的命名工作跟踪)

决策/经验记录的是已完成的事实,而 issues.jsonl 记录的是 bug 历史—— 两者都无法容纳一个有名称、正在进行、跨多个会话的工作:“给它起个代号, 跟踪计划和待办事项,并让我即使在从未见过它的会话中,也能按名称恢复工作。” 这就是 start_initiative / get_initiative / list_initiatives / update_initiative 的用途。

you: "Let's call this HashGate. Track the plan and todos under that name."
  → start_initiative(project, codename: "HashGate", plan: "...", todos: [...])

(new session, days later)
you: "Where did we leave off on HashGate?"
  → get_initiative(project, codename: "hash gate")   # case/spacing-insensitive match
you: "Continue where I left off" (no codename given)
  → list_initiatives(project)                        # or omit project to search everywhere

每个计划都保存在独立文件 <project>/initiatives/<slug>.md 中——其中包含计划、 复选框待办清单和带日期的进度日志,均可直接编辑。项目的 AGENTS.md 中会在 ## Active Initiatives 下同步维护每个进行中计划的一行说明, 因此全新的会话无需调用任何工具,就能在自动加载的上下文中了解正在进行的工作。 将计划标记为 done 会移除该说明;文件本身会作为历史记录保留,仍可按名称查找。

在多台机器间同步

工具和你的记忆内容分别同步:

  1. **工具:**无需同步——npx 始终获取已发布的版本(如果你从源代码安装,则使用 git pull 更新)。
  2. **内容:**每个项目的 AGENTS.md + issues.jsonl 都位于该项目自己的 git 仓库中,因此克隆项目时也会一并带上记忆。无需复制任何内容。

issues.jsonl 包含真实的 bug 详情——只能将它提交到私有仓库中。

新项目脚手架

对于根目录下的新项目,创建 <project>/CLAUDE.md,内容为 @AGENTS.md, 并创建包含 ## What this is、## Stack & layout、 ## Run / build / test、## Decisions、## Learnings 部分的 <project>/AGENTS.md。

更新日志

v1.11.1
  • **修复:**重新生成了 package-lock.json——其中仍声明版本为 1.8.3,而 package.json 已依次更新至 1.9.0/1.10.0/1.11.0。这是因为发布惯例只会更新 package.json 中的版本和 McpServer({version}) 字符串,却从未刷新锁文件。这不会导致 npm ci 失败(已在 npm 10/11/12 上验证),但属于同一类版本漂移,曾在 v1.8.3 中导致 CI 完全无法运行。
  • **修复:**现在 scripts/ 已加入 files 白名单,因此从已安装的包运行 npm test 也能正常工作。此前,冒烟测试未包含在发布的 tarball 中,因此执行 npm install && npm test 的容器构建规范会因 MODULE_NOT_FOUND 而失败——只有从仓库克隆中才能正常运行。
  • **修复:**新增了 start 脚本(node index.js),因此 CMD 为 npm start 的构建/部署规范不再会因缺少脚本而失败。
  • **文档:**如果你在容器中构建此项目(Glama 的 Deploy 构建测试或自己的镜像),请使用 npm ci --omit=optional。完整的 npm ci 会为一个 36 KB 的服务拉取 276 MB 的 node_modules——其中几乎全是可选嵌入向量依赖链(onnxruntime-node、onnxruntime-web、@xenova/transformers、sharp),它们还会在安装期间下载预编译二进制文件,在磁盘/时间受限或网络受限的构建环境中会失败。--omit=optional 只需 25 MB,且 18 个工具仍会全部注册;语义召回会按 v1.6.0 的设计回退到关键词召回。推荐规范:Node 20 · npm ci --omit=optional · CMD node index.js。
v1.11.0
  • **功能:每日工作日志——check_in / check_out 工具和 standup 子命令。**每天开始时说“check in”,结束时说“checkout”。Checkout 会从磁盘收集当天的证据——根目录下所有仓库中的 git 提交(无论是否有 AGENTS.md;.memory-server 本身也包括在内)、各仓库中尚未提交的 WIP、当天记录的记忆(问题/决策/经验/偏好),以及该时间段内有过改动的计划文件——然后 Agent 严格依据这些证据整理出 3–6 条的站会摘要并保存(这是一种两阶段工具协议,可在任何 MCP 客户端中使用,因为一天的工作通常跨越多个会话,而结束当天工作的 Agent 往往看不到这些会话)。第二天早上的 check_in 会返回上一个工作日的摘要(周一会返回周五的),以及尚未解决的事项(仍有未完成待办的进行中计划、未解决的问题);而 npx -y @kaaustubh/project-memory-mcp standup [YYYY-MM-DD] 无需 Agent,即可直接在终端打印摘要。每日记录保存在 ROOT/.worklog/YYYY-MM-DD.json 中——时间戳使用本地时间并带有时区偏移量,每天可以包含多个签到/签退时段(例如午休),遗忘签退时会在下次签到时自动结束,并根据时间戳还原记录。记录会在 WORKLOG_KEEP_DAYS 天后清理(默认 10 天):这是刻意设计为临时数据,与只追加、不删除的记忆文件不同。
v1.10.0
  • 功能: install 现在还会注册 Kimi Code CLI(~/.kimi-code/mcp.json,或 $KIMI_CODE_HOME——注意,这不同于使用 ~/.kimi/mcp.json 的独立产品“Kimi CLI”)、Gemini CLI(~/.gemini/settings.json)和 Windsurf (~/.codeium/windsurf/mcp_config.json)——这三者都采用现有的 mcpServers/不含 type 的架构,registerMcp 已能处理 Cursor,因此每个只需添加一行。 OpenAI Codex CLI(~/.codex/config.toml)则需要实际处理:它是首个非 JSON 客户端,通过 TOML [mcp_servers.<name>] 表进行配置。新增了 registerMcpToml,采用基于文本的查找表/替换或追加合并方式(与 appendBulletToFile 的标题匹配思路相同),而没有依赖 TOML 解析器——继续保持零硬依赖。发布前发现并修复了其中一个实际问题:第一版将表的内容匹配为“直到下一个字面量 [ 之前的所有内容”,但 args = [...] 数组也会用到 [,导致表内容被截断——现已改为匹配“直到下一行以 [ 开头的内容”,并通过预置了无关表的 config.toml 验证了多次运行 install 后结果仍具幂等性。
v1.9.0
  • 功能:计划事项。 新增四个工具——start_initiative、get_initiative、 list_initiatives、update_initiative——用于跟踪一项有名称、跨多个会话的工作(代号、计划、不断更新的待办列表),使其今后可在任意会话中按名称恢复,而不局限于发起它的会话。此功能旨在解决一个真实的失败案例:有人使用另一个 Agent 的会话本地“代号”惯例时遇到问题——没有将名称映射到会话的持久注册表,待办事项仅保存在单个会话的私有存储中,而且查找时必须在原始记录中进行精确字符串匹配。这里通过为每项计划事项存储一个 Markdown 文件(<project>/initiatives/<slug>.md——内容可变,因此待办复选框可原地切换)来解决,并在项目自动加载的 AGENTS.md 中新增 ## Active Initiatives 标题及同步的指向条目,让全新会话无需调用任何工具就能看到正在进行的事项。代号匹配不区分大小写和空格(slugify 会先拆分驼峰边界,因此 "HashGate" 和 "hash gate" 会解析到同一项计划事项)。未指定项目时,list_initiatives 会搜索所有项目,因此“我之前在做什么?”也不需要记得工作所在的仓库。
v1.8.3
  • 基础设施: 新增了实际的 CI 工作流(.github/workflows/ci.yml,Node 18/20/22 矩阵),并配套新增 stdio 冒烟测试(scripts/smoke-test.mjs——启动服务,执行 initialize → tools/list 握手,并断言 12 个工具均已注册),以及 CodeQL 工作流。此前这些内容完全缺失,因此 Glama 的质量页面显示“CI 状态不可用”和“未发现代码扫描结果”——这并不代表项目通过了健康检查,而是“从未测量过”。
  • 修复: 重新生成了 package-lock.json——它是在解析 @xenova/transformers 并包含可选依赖之前生成的,因此在干净的 CI 运行器上执行 npm ci 会失败。此外还运行了 npm audit fix(不会造成破坏性变更),修复了 @modelcontextprotocol/sdk 的传递依赖 hono/body-parser/fast-uri 的安全公告。已知问题: @xenova/transformers(可选依赖,为语义回忆功能提供支持)仍会通过 onnxruntime-web/protobufjs/sharp 依赖链带来 1 个严重和 4 个高危 CVE;唯一的修复方式是降级到存在破坏性变更的 1.4.2,目前有意暂不处理——已列为后续事项。
v1.8.2
  • 文档/元数据: 新增了 glama.json(声明 maintainers),以通过 Glama 的“No glama.json”资料完整性检查。同时为此版本创建了实际的 GitHub Release(此前我们只推送了 git 标签,而 Glama 的“有发布版本”检查不会查看标签——它读取的是 Releases API)。
v1.8.1
  • **文档:**根据 awesome-mcp-servers 的收录要求,在 README 中添加 Glama 质量评分徽章。使用 /badges/score.svg(真正的 SVG),而不是纯 /badge 路径——后者会返回 200,但提供的是 0 字节的 image/png,也就是损坏的图片。
v1.8.0
  • 功能:install 现在还会注册 GitHub Copilot CLI(~/.copilot/mcp-config.json,或 $COPILOT_HOME)、JetBrains Copilot 插件(IntelliJ/PyCharm/WebStorm/…)以及 Windows 上的 Visual Studio(全局 .mcp.json),补齐 VS Code 注册(在 1.7.0 中添加)之外的所有 Copilot 平台。每个目标都会合并到现有配置中(保留其他服务),并独立尽力注册,因此未安装的客户端会被静默跳过,不会导致整个安装失败。不同客户端的架构各不相同(顶层键为 mcpServers 或 servers;Copilot CLI 使用 type: "local",IDE 内嵌版本使用 type: "stdio")——实现前已对照各客户端的当前文档进行核实。所有五个目标的合并逻辑已整合到一个 registerMcp() 辅助函数中。
v1.7.0
  • 功能:install 现在还会将服务注册到 VS Code / GitHub Copilot(用户配置文件中的 mcp.json,因此适用于每个工作区),此前已有 Claude Code 和 Cursor 注册。其架构与 Claude/Cursor 不同(使用 servers 键,每个条目的类型为 type: "stdio"),而 Copilot 工具仅在 Chat 的 Agent 模式下运行。
v1.6.2
v1.6.1
  • **文档:**添加“即使 MCP 受到限制也能运行”说明——阐明基于文件的记忆(自动加载 AGENTS.md)即使在组织禁用了第三方 MCP 服务(例如 GitHub Copilot 的 MCP 允许列表)的情况下仍可使用,因为只有交互式工具会使用 MCP 通道。
v1.6.0
  • 语义召回(可选的本地嵌入)。召回钩子现在会根据含义而非共同子串,将提示词与记忆进行匹配——*“构建失败了”可以找到记录为“编译失败”*的问题。该功能由本地离线嵌入模型提供支持(通过可选的 @xenova/transformers 依赖使用 Xenova/all-MiniLM-L6-v2);向量会按项目缓存到派生文件 .embeddings.json 中,并以内容哈希为键,因此编辑或移除的条目会自动失效。如果未安装模型,会自动回退到之前的关键词匹配——无需配置,也不会出问题。新增的 reindex 子命令会预先嵌入所有记忆,避免首次召回变慢。这补齐了长期推迟的“语义检索”功能,为召回和 search_issues 提供支持;关键词匹配仍是零依赖的基础方案。
v1.5.0
  • **自动召回(可选的 UserPromptSubmit 钩子)。**新增 install-recall / uninstall-recall 子命令,用于注册钩子。该钩子会将每条提示词与问题历史和决策/经验/偏好进行关键词匹配,并静默注入匹配度最高的内容作为上下文——这样即使无人记得搜索,先前的修复和决策也能浮现出来。这补上了记录↔召回循环的另一半。对于简单或无匹配的提示词保持静默(忽略通用填充词),当前项目中的匹配项优先级最高,最多注入 4 行。默认关闭;可通过会话级开关 PROJECT_MEMORY_RECALL=off 禁用。
v1.4.1
  • 打包:添加了在官方 MCP Registry 中列出服务所需的 mcpName 字段(io.github.kaaustubh/project-memory-mcp)。无功能变更。
v1.4.0
  • remember_preference — 将纠正内容转化为记忆模式。 新增工具,可在 ## Preferences 下写入一条带日期的项目符号,写入位置可以是根目录的 AGENTS.md(作用范围为 global,适用于每个项目),也可以是单个项目的文件。由于偏好保存在会自动加载的 AGENTS.md 中,无需额外操作即可回忆:一次性纠正(“绝不添加共同作者署名”“提交前始终运行类型检查”)会在下个会话中再次生效,无需重新纠正。这让跨会话记忆不再局限于项目事实,也涵盖了你的工作偏好。
  • 感知纠正内容的 Stop hook + 记录策略。 常驻策略现在会在收到纠正后提示使用 remember_preference,而选择启用的 Stop hook 会扫描会话中的行为纠正短语(“从现在起……”“不,不要……”“始终使用……”):如果你纠正了 Agent,但没有保存偏好,它会阻止停止一次并询问——这是现有“代码有变更但未记录”检查之外的第二个独立触发原因。
v1.3.2
  • 文档:新增 **“日常使用”**一节,介绍对应各个工具的自然语言提示词、一个重要习惯(“之前遇到过这个问题吗?”)以及退出方式。明确说明,你是与 Agent 对话,而不是直接调用工具。
v1.3.1
  • Stop hook:将直接编辑记忆也计为记录。 之前,hook 只识别 mcp__project-memory__* 工具调用,因此直接编辑 AGENTS.md / issues.jsonl(一种认可的记录方式)仍会触发提醒。现在,hook 也会将对文件名以 AGENTS.md 或 issues.jsonl 结尾的文件执行 Edit / Write 视为已记录,从而消除误报。
  • append_decision/append_learning:不再产生重复章节。 标题匹配原先要求整行完全匹配(^## Learnings$),因此带有尾随文本的标题(## Learnings (gotchas …))无法匹配,导致追加了重复章节。现在只匹配标题的开头词。
v1.3.0
  • 确保记录(选择启用的 Stop hook)。 新增 install-hook / uninstall-hook 子命令,用于注册 Claude Code Stop hook。当会话修改了代码却未将任何内容记录到记忆中时,该 hook 会强制执行一次记录操作,将尽力而为的策略变为硬性保证。默认关闭,每轮最多触发一次(不会循环),在没有变更或记忆已写入时保持静默,并可通过 PROJECT_MEMORY_HOOK=off 按会话禁用。
v1.2.0
  • 更精准的问题搜索。 search_issues 现在只匹配文本字段(symptom/cause/fix/id/tags),而不再匹配原始 JSON,因此查询不会再因字段名而产生误命中。新增可选的 tags 筛选条件;query 现在也可省略(仅按标签搜索)。
  • sync_registry。 将根目录 AGENTS.md 中的项目表与磁盘上的项目进行同步:为表中缺失的项目添加占位行,标记目录已不存在的行,并报告仍在处理的问题数量。自动完成此前需要手动执行的“新建项目 → 添加一行”步骤。保留手动维护的列;apply=false 仅报告差异。
  • find_by_file。 给定文件路径/片段后,返回涉及该文件的问题(通过其 files 字段),以及提及该文件的决策/经验(通过 AGENTS.md 中的项目符号)——将代码与记忆关联起来,解答“这段代码为什么会这样?”
v1.1.1
  • 仅更新文档:将更新日志发布到 npm 页面,以保持内容一致(无功能变更)。
v1.1.0
  • 主动记录。 Agent 现在会自行记录记忆,而不再等待你说“记录这个”:常驻记录策略会在 initialize 时发送,写入/搜索工具的描述也会明确指示记录操作。Agent 会告知你记录了什么,在不确定时会询问,并跳过琐事和机密信息。仍可通过显式调用覆盖默认行为。
  • 文档:新增“安装后的工作方式”和“主动记录”章节。
v1.0.1
  • 修复 npx … install 因“找不到命令”而失败的问题——将二进制文件重命名为 project-memory-mcp,使其与未限定作用域的包名一致(符合 npx 解析规则)。
v1.0.0
  • 首次发布:基于 AGENTS.md 和 issues.jsonl 的无状态 MCP 服务,包含 9 个工具 (项目记忆和问题跟踪)、用于 Claude Code 和 Cursor 的 npx … install,以及 推送/拉取记忆模型。

评论

支持 Markdown

第一次接触 MCP?

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

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