Project Memory MCP
一个用于从内存文件中存储和检索项目信息的 MCP 服务器。该工具允许 AI 代理(如 Claude)在对话之间保持对项目的持久记忆。
概述
Project Memory MCP 提供了一种简单的方式来实现:
- 以 Markdown 格式存储项目信息
- 在对话开始时检索项目信息
- 使用补丁更新项目信息
内存信息存储在每个项目目录下的
MEMORY.md
文件中。安装
使用 uvx
该方法使用
uvx
(来自 uv
Python 包管理器)运行服务器,无需永久安装:前提条件
设置 MCP 客户端(Claude Desktop、Cursor 等)
将以下配置与现有配置文件(如
claude_desktop_config.json
)合并:注意: 将/Users/your-username
替换为你自己的项目和代码目录的实际路径。
从源码安装
前提条件
- Python 3.11 或更高版本
- Pip 包管理器
克隆仓库
设置 MCP 客户端(Claude Desktop、Cursor 等)
将以下配置与现有配置文件(如
claude_desktop_config.json
)合并:注意: 将/Users/your-username
替换为你自己的项目和代码目录的实际路径。
参数
--allowed-dir
参数用于指定服务器可以访问的目录。可以多次使用该参数以允许多个目录的访问。所有在允许目录内的子目录也将被允许。
该参数是可选的。如果未提供,服务器将只能访问运行服务器的用户的主目录。使用
MCP 服务器由客户端(如 Claude Desktop)根据你提供的配置启动。你无需手动启动服务器。
工具
Project Memory MCP 提供了三个工具:
get_project_memory
检索整个项目内存,以 Markdown 格式返回。应在每次关于项目的对话开始时使用。
- project_path: 项目目录的完整路径。
- 返回 MEMORY.md 文件的内容作为字符串。
- 如果项目或内存文件不存在,则抛出
FileNotFoundError
。
- 如果项目路径不在允许的目录中,则抛出
PermissionError
。
set_project_memory
设置(覆盖)整个项目内存。在创建新内存文件、替换整个内存或
update_project_memory
失败时使用。- project_path: 项目目录的完整路径。
- project_info: 以 Markdown 格式表示的完整项目信息。
- 用提供的内容覆盖 MEMORY.md 文件。
- 如果项目路径不存在,则抛出
FileNotFoundError
。
- 如果项目路径不在允许的目录中,则抛出
PermissionError
。
update_project_memory
通过应用一个或多个基于块的补丁来更新项目内存。对于小的更改,这种方式更高效。
- project_path: 项目目录的完整路径。
- patch_content: 使用 SEARCH/REPLACE 标记的基于块的补丁内容(见下文)。
- 每个补丁块必须具有以下格式:
可以在单个请求中包含多个块。
- 每个搜索文本必须在文件中恰好出现一次,否则将抛出错误。
- 如果项目或内存文件不存在,则抛出
FileNotFoundError
。
- 如果补丁格式无效或搜索文本不唯一,则抛出
ValueError
。
- 如果补丁应用失败,则抛出
RuntimeError
。
示例工作流程
- 开始与 LLM 关于项目的对话
- LLM 使用
get_project_memory
检索项目信息
- 在对话过程中,LLM 使用
update_project_memory
持久化新信息
- 如果更新失败,LLM 可以使用
set_project_memory
代替
Claude Desktop
如果你使用 Claude Desktop,最好使用项目功能。
编辑项目说明:
- 添加如下一行:"项目的路径是 <project_path>"
- 如果并不总是使用内存,可以添加如下一行:"始终使用项目内存,这不是可选的"
安全注意事项
- 内存文件不应包含敏感信息
- 项目路径会针对允许的目录进行验证
- 所有文件操作仅限于允许的目录
依赖
- fastmcp (>=2.2.0, <3.0.0)
许可证
MIT
- Author:waytomcp
- URL:https://www.waytomcp.com/article/PyneSys/project-mem-mcp
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!