personal-project-knowledge-mcp
by YR-yangrui
README.md
# personal-project-knowledge-mcp
个人本地 AI 记忆 / 文档 MCP。短记忆自动全文载入,长记忆只自动载入索引,长正文沉淀为 Markdown 文档并按需读取。
## 安装与构建
```powershell
npm install
npm run build
```
Windows 一键通用安装:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install.ps1
```
通用安装会:
- 安装 npm 依赖。
- 构建 TypeScript。
- 初始化数据目录和 `config.yaml`。
- 不写入任何特定客户端配置。
- 提示安装者为目标 AI 客户端添加会话启动 hook,以便自动注入记忆上下文。
如果你是让 AI 代为安装,安装完成后请直接要求 AI 继续完成 hook 接入:
```text
请为当前 AI 客户端添加 personal-project-knowledge-mcp 的会话启动 hook,让新会话自动注入 build_context 生成的短记忆和长记忆索引。
```
对于 Codex,推荐直接使用 `scripts/install-codex.ps1` 或通用安装参数 `-InstallCodexAdapter`,它会默认写入 `SessionStart` hook。其他客户端需要按各自 hook / startup context 机制接入;若客户端没有 hook 能力,则需要在会话开始时主动调用 `build_context` 或读取 `context://personal-project-knowledge/project/{project}`。
## 数据目录
默认数据目录:
```text
%USERPROFILE%\.personal-project-knowledge-mcp
```
可用环境变量覆盖:
```powershell
$env:PPKM_DATA_ROOT='D:\AIKnowledge'
```
## 配置与短长记忆自动转换
运行配置文件位于:
```text
%USERPROFILE%\.personal-project-knowledge-mcp\config.yaml
```
新配置优先使用 `memorySizing` 控制短记忆和长记忆索引的自动转换:
```yaml
memorySizing:
shortMaxChars: 500
longToShortMaxChars: 300
autoDemoteOverlongShort: true
autoPromoteShortLongIndex: true
demoteDocumentDir: archives
```
- `shortMaxChars`:短记忆最大正文长度。
- `autoDemoteOverlongShort`:短记忆过长时自动写成 Markdown 文档,并把 memory 改为 `long_index`。
- `longToShortMaxChars`:无关联文档的 `long_index` 内容足够短时,可自动转回 `short`。
- `autoPromoteShortLongIndex`:启用无文档长索引转短记忆。
- `demoteDocumentDir`:自动降级生成文档的目录。
旧配置中的 `maxShortMemoryChars` 仍兼容;新修改建议使用 `memorySizing.shortMaxChars`。
需要调整配置或新增语义分类时,可使用 skill `personal-project-knowledge-config`。它会按存储、短长阈值、上下文预算、语义类型等分类逐步引导修改。
语义分类支持配置搜索与默认加载策略。像 `bugfix` 这类记录推荐保存为文档并允许搜索,但默认不加载索引:
```yaml
semanticTypes:
bugfix:
default_load_level: long_index
default_scope: project
description: "Bug 修复记录;默认仅搜索,不占启动上下文。"
searchable: true
auto_load_index: false
show_in_context: false
show_in_webui: true
```
## 初始化种子数据
```powershell
npm run seed
npm run verify
```
## MCP 启动
```powershell
npm run build
node dist/index.js
```
## 通用 MCP 使用
任意支持 stdio MCP 的客户端都可以直接启动:
```json
{
"mcpServers": {
"personal-project-knowledge": {
"command": "node",
"args": ["E:/projects/personal-project-knowledge-mcp/dist/index.js"]
}
}
}
```
通用 MCP 配置只负责启动 server,不保证记忆会自动进入会话上下文。要实现“新会话一开始就看到记忆”,目标客户端还需要额外配置会话启动注入:
- 优先:添加 session-start / startup hook,运行本项目的上下文加载脚本或调用 `build_context`。
- Codex:运行 `scripts/install-codex.ps1`,默认安装 `SessionStart` hook。
- 其他客户端:让安装 AI 根据客户端能力,把 `build_context` 结果作为会话前置上下文;如果无法配置 hook,就在每次会话开始主动调用 `build_context`。
通用产物:
- `manifest.json`:包级 MCP plugin 清单。
- `plugin/personal-project-knowledge/manifest.json`:可移植 plugin 描述。
- `skills/personal-project-knowledge/SKILL.md`:可移植 skill,适用于支持 skill/指令包的 AI 客户端。
- `skills/personal-project-knowledge-config/SKILL.md`:配置管理 skill,指导修改 `config.yaml`、短长转换阈值和自定义语义分类。
首次安装或刚接入 MCP 后,建议直接对 AI 说:
```text
我刚首次安装 personal-project-knowledge-mcp,请调用 personal-project-knowledge-config skill 带我完成配置。
```
AI 应先使用配置 Skill 展示配置菜单,确认 dataRoot、短长记忆阈值、上下文预算和语义分类后,再进入日常记忆/文档使用。
## Codex 适配安装
Codex 只是一个适配目标,不是主产物。一键安装/更新 Codex MCP 配置、plugin adapter 和 skill:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install-codex.ps1
```
默认会写入:
```text
%USERPROFILE%\.codex\config.toml
```
并新增/更新:
```toml
[mcp_servers.personal-project-knowledge]
command = "node"
args = ["E:/projects/personal-project-knowledge-mcp/dist/index.js"]
startup_timeout_sec = 120
```
安装脚本会自动备份原 Codex 配置,安装后需要重启客户端。
默认还会安装 `SessionStart` hook:
```toml
[[hooks.SessionStart]]
matcher = "startup"
[[hooks.SessionStart.hooks]]
type = "command"
command = 'powershell -NoProfile -ExecutionPolicy Bypass -File "E:/Projects/personal-project-knowledge-mcp/scripts/codex-session-start.ps1" -Mode "inline"'
```
这个 hook 会运行 `scripts/codex-session-start.ps1`,仅在新会话启动时加载当前项目的短记忆和长记忆索引;恢复、清空或压缩对话不会重复导入。Codex command hook 目前主要通过 stdout 把内容交给会话,因此 stdout 既是“注入上下文”的通道,也是终端可能看到的输出通道。
### SessionStart 输出模式
安装脚本通过 `-SessionStartOutputMode` 控制 hook 输出模式:
| 模式 | 终端输出 | 会话效果 | 适用场景 |
|---|---|---|---|
| `inline` | 输出完整 Markdown 上下文 | Codex 启动时可直接看到完整短记忆和长记忆索引 | 默认模式;最强自动注入,但终端会显示记忆内容 |
| `file` | 只输出很短的上下文文件路径提示 | 完整上下文写入 session artifact;需要细节时读取提示里的文件 | 推荐降噪模式;避免终端刷屏,同时保留上下文入口 |
| `silent` | 不输出 | 只生成 session artifact;不会通过 stdout 自动注入全文 | 只想保留产物、不需要启动注入时使用 |
默认安装等价于:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install-codex.ps1 -SessionStartOutputMode inline
```
如果希望降低启动时的终端输出,推荐切到 `file`:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install-codex.ps1 -SessionStartOutputMode file
```
如果想完全静默:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install-codex.ps1 -SessionStartOutputMode silent
```
注意:`silent` 不会把记忆全文自动注入当前会话。若目标是“终端不刷整段记忆,但仍能让 AI 找到上下文”,优先使用 `file`。
### 切换、禁用和临时覆盖
已经安装过 Codex adapter 时,可以重复运行 `install-codex.ps1` 切换模式。脚本会先备份 `%USERPROFILE%\.codex\config.toml`,再替换本项目管理的 MCP 配置和 hook 块。
切回完整自动注入:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install-codex.ps1 -SessionStartOutputMode inline
```
改成降噪文件指针:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install-codex.ps1 -SessionStartOutputMode file
```
改成完全静默:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install-codex.ps1 -SessionStartOutputMode silent
```
若只想安装 MCP/Skill 而不自动注入记忆,可使用:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install-codex.ps1 -SkipSessionStartHook
```
若只想临时覆盖某次 hook 运行的模式,可以在启动 Codex 前设置环境变量:
```powershell
$env:PPKM_CODEX_SESSION_START_MODE = "file"
codex
```
环境变量只接受 `inline`、`file`、`silent`;非法值会被忽略,继续使用 hook 命令里的 `-Mode`。
### 直接运行 hook 脚本
排查或手动生成上下文时,可以直接运行 hook 脚本:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/codex-session-start.ps1 -Mode file
```
可选参数:
| 参数 | 说明 |
|---|---|
| `-Cwd` | 指定项目目录;不传时优先读取 Codex hook payload 中的 cwd,最后回退到当前工作目录 |
| `-Project` | 指定知识库项目名;不传时按 cwd 自动识别 |
| `-Query` | 传给上下文构建逻辑的查询词,用于带问题加载相关上下文 |
| `-Mode` | 输出模式:`inline`、`file`、`silent` |
示例:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/codex-session-start.ps1 -Cwd "E:\Projects\personal-project-knowledge-mcp" -Project "personal-project-knowledge-mcp" -Mode inline
```
如果提示 `Run npm run build`,说明 `dist/scripts/hook-load.js` 或 `dist/scripts/hook-start.js` 不存在,需要先执行:
```powershell
npm run build
```
也可以用通用安装顺便安装 Codex adapter:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/install.ps1 -InstallCodexAdapter
```
## 卸载
只移除 Codex adapter、Codex MCP 配置、个人 plugin/skill,不删除数据:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/uninstall-codex.ps1
```
通用卸载入口默认保留数据和 Codex adapter:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/uninstall.ps1
```
通用卸载并移除 Codex adapter:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/uninstall.ps1 -RemoveCodexAdapter
```
删除记忆和文档数据需要显式确认参数,避免误删:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/uninstall.ps1 -RemoveData -Force
```
## 核心工具
- `get_usage_guide`:读取默认使用指南,说明什么时候优先使用本 MCP。
- `get_storage_info`:查看 dataRoot、文档目录、记忆目录、备份目录和默认导入路径。
- `build_context`:构建自动载入上下文。
- `list_semantic_types`:列出语义分类、默认加载策略、搜索策略和记录数量。
- `list_loaded_memory`:查看当前项目会自动载入的短记忆和长索引。
- `write_memory`:写短记忆或长记忆索引。
- `search_memory` / `get_memory`:搜索和读取记忆。
- `write_doc` / `search_docs` / `read_doc`:管理 Markdown 文档;`read_doc` 会返回相对路径和绝对路径。
- `resolve_doc_path` / `move_doc`:解析文档真实保存位置,并在 dataRoot 内移动已入库文档。
- `import_markdown_dir` / `migrate_markdown_file`:批量导入目录或迁移单个 Markdown 文件。
- `create_or_update_doc_index`:让文档生成可自动载入的长记忆索引。
- `demote_memory_to_doc`:把过长短记忆降级成文档 + 长索引。
- `extract_memory_candidates`:从对话文本启发式提取候选,不直接写入。
- `commit_memory_candidates`:提交候选,高风险类型默认需要确认。
- `record_session_artifacts`:记录会话文档并生成 long_index。
- `record_bug_report`:AI 使用 MCP 发现 MCP 自身 bug/不清晰行为时,记录为 `bug_report` 文档方便后续统一修复。
- `backup_now`:备份 SQLite 数据库文件。
## MCP Prompt / Resource
本项目按 MCP 常见语义拆分:
- `Instructions`:MCP 初始化时暴露的默认使用说明,这是主要入口,类似 Unity MCP 的 server instructions。
- `Tools`:执行增删改查、导入、备份等动作。
- `Resources`:暴露可读上下文,例如默认指南、项目记忆上下文。
- `Prompts`:提供类似 skill 的可选工作流入口。
- `Session files`:手动/半自动会话文件流,用于生成上下文和提交候选;不做自动会话注入。
当前提供:
- Server instructions:默认使用指南,客户端初始化 MCP server 时即可获取。
- Codex SessionStart hook:Codex adapter 安装后默认自动注入当前项目短记忆和长记忆索引。
- Prompt `use_personal_project_knowledge`:载入默认指南 + 当前项目短记忆 + 长记忆索引,可传 `project`、`cwd`、`query`。
- Resource `guide://personal-project-knowledge/usage`:默认使用指南,说明应优先用本 MCP 管理记忆和文档。
- Resource `storage://personal-project-knowledge/locations`:dataRoot、文档目录、记忆目录和路径规则。
- Resource `context://personal-project-knowledge/project/{project}`:指定项目的默认指南 + 自动载入上下文。
- Resource `memory://loaded/project/{project}`:指定项目的结构化记忆 JSON。
- `manifest.json`:工具清单,便于插件/安装器/文档生成器发现能力。
- `skills/personal-project-knowledge`:通用 skill 源。
- `codex-plugin/personal-project-knowledge`:Codex adapter,从通用 skill 同步。
## 会话文件流脚本
手动生成可注入上下文:
```powershell
npm run session:load -- --cwd=C:\ProjectN --query=限时订单
```
更完整的文件流包装:
```powershell
# 1. 生成 context.md 和 session.json
npm run session:start -- --cwd=C:\ProjectN --query=限时订单
# 2. 把输出中的 context_path 内容注入 AI 会话开头
# 3. 会话结束:从对话文本生成 pending-candidates.json 和 review-candidates.md
Get-Content C:\RequestFiles\conversation.txt | npm run session:end -- --session=<session_id>
# 4. 如需确认高风险候选,编辑 confirmed-candidates.json
# {
# "mode": "auto",
# "confirmed_ids": ["cand_xxx"]
# }
# 5. 提交候选
npm run session:commit -- --session=<session_id>
```
从对话文本提取候选:
```powershell
Get-Content C:\RequestFiles\conversation.txt | npm run session:extract -- --project=ProjectN
```
手动备份:
```powershell
npm run backup
```
## Web UI
启动本地管理界面:
```powershell
npm run web
```
然后打开:
```text
http://127.0.0.1:8787
```
Web UI 首版支持:
- 查看当前数据目录和项目。
- 查看 dataRoot、文档目录、默认导入目录等存储位置。
- 构建自动载入上下文。
- 搜索、新增、废弃记忆。
- 搜索、读取、新增文档并创建 `long_index`。
- 查看高频统计和高频候选。
- 按 `semantic_type` 分类浏览记忆和文档,并标记“默认加载 / 仅搜索”。
- 分类内搜索支持索引、命中片段和全文返回模式。
- 导入现有 Markdown 目录。
- 迁移单个 Markdown 文件。
- 移动已入库文档并同步索引。
- 记录 MCP bug/反馈为 `bug_report`。
- 触发 SQLite 备份。
Web API 验证:
```powershell
npm run verify:web
```
## 重要边界
- 短记忆会自动全文载入。
- 长记忆只自动载入标题、摘要、路径,不代表正文已读。
- 文档正文必须通过 `read_doc` 按需读取。
- 超过配置长度的短记忆会被拒绝,应改写成文档 + 长索引。
- Codex adapter 默认安装会话启动 hook 自动注入记忆;非 Codex 客户端仍需通过 MCP instructions、tools/resources/prompts 或通用 skill/plugin 获取上下文。
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues