关于 neverinfamous-memory-journal-mcp
Memory Journal MCP 服务为开发者提供项目的持久化记忆,帮助 AI 会话在断开后衔接上下文,并支持自动会话交接。它与 GitHub 工作流集成,适合长期维护的项目。
主要功能
- 01持久化项目日志与语义搜索
- 02会话开始时自动生成简报
- 03结合 GitHub 的议题与 PR 管理
- 04知识图谱关联决策与实现
- 05备份与恢复
- 06通过 OAuth 2.1 进行安全传输
适用场景
- 01在新的 AI 会话中延续此前的项目决策
- 02查询项目历史中的技术选型原因
- 03结合 GitHub 议题进行分流与复盘
MCP 相关
该项目是一个 MCP 服务,向客户端提供 73 个工具、46 个资源和 19 个工作流提示词,用于读写项目记忆与 GitHub 数据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://server.smithery.ai/@neverinfamous/memory-journal-mcp/mcpclaude mcp add --transport http ai-smithery-neverinfamous-memory-journal https://server.smithery.ai/@neverinfamous/memory-journal-mcp/mcp{"mcpServers":{"ai-smithery-neverinfamous-memory-journal":{"type":"http","url":"https://server.smithery.ai/@neverinfamous/memory-journal-mcp/mcp"}}}在 Cursor 中打开{"servers":{"ai-smithery-neverinfamous-memory-journal":{"type":"http","url":"https://server.smithery.ai/@neverinfamous/memory-journal-mcp/mcp"}}}在 VS Code 中打开{"mcpServers":{"ai-smithery-neverinfamous-memory-journal":{"type":"http","url":"https://server.smithery.ai/@neverinfamous/memory-journal-mcp/mcp"}}}{"mcpServers":{"ai-smithery-neverinfamous-memory-journal":{"serverUrl":"https://server.smithery.ai/@neverinfamous/memory-journal-mcp/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://server.smithery.ai/@neverinfamous/memory-journal-mcp/mcp需要授权工具
详细介绍
Memory Journal MCP 服务
📚 完整文档(Wiki) • 更新日志 • 安全 • 发布文章
🎯 AI 上下文 + 项目智能:借助持久化项目记忆和自动会话交接,串联彼此隔离的 AI 会话,并全面集成 GitHub 工作流。
🚀 快速部署:
- npm 包 -
npm install -g memory-journal-mcp - Docker Hub - 基于 Alpine,提供完整的语义搜索
🧠 不再经历 AI 失忆
在 AI 助手的帮助下管理大型项目时,你会面临一个关键挑战:
- 会话失忆 - 每段新的 AI 对话都从零开始,不了解之前的工作。
- 上下文丢失 - 决策、实现和经验教训散落在彼此隔离的对话中。
- 重复劳动 - AI 提出你已经尝试过或放弃的解决方案。
- 上下文过载 - 每次新对话都要手动复制项目历史。
Memory Journal 通过充当项目的长期记忆,弥合分散的 AI 会话之间的鸿沟。
体验真正具备上下文感知能力的开发:
- “上个月我们为什么为这个服务选择 SQLite 而不是 Postgres?”(语义搜索)
- “对看板上优先级最高的工单运行
/issue-triage工作流。”(GitHub 操作) - “最近谁一直在修改 auth 模块?我们的团队协作密度如何?”(团队分析)
- “我卡在这个数据库错误上了。为 @sarah 标记一个 ‘blocker’,让她的 Agent 在下次会话中看到。”(Hush Protocol)
- “关闭问题 #42,并记录一条说明我们如何通过架构修复解决解析错误的记录。”(上下文生命周期)
- “绘制一张可视化图表,展示我最近 10 个架构决策之间的关联。”(知识图谱)
🎯 我们的独特之处
73 个 MCP 工具 · 19 个工作流提示词 · 46 个资源 · 10 个工具组 · 代码模式 · GitHub 指挥官(问题分类、PR 审查、里程碑冲刺、安全/质量/性能审计) · GitHub 集成(问题、PR、Actions、看板、里程碑、洞察) · 团队协作(共享数据库、向量搜索、跨项目洞察、Hush Protocol 标记)
| 功能 | 描述 |
|---|---|
| 会话智能 | Agent 会自动查询项目历史记录,在检查点创建条目,并通过 /session-summary 和 team-session-summary 在会话之间传递上下文 |
| GitHub 集成 | 提供 18 个工具,用于处理 Issues、PR、Actions、看板、里程碑(%)、Copilot Reviews 和 14 天洞察 |
| 动态项目路由 | 通过 PROJECT_REGISTRY,使用单个服务实例即可在多个仓库间无缝切换上下文并访问 CI/Issue 跟踪 |
| 知识图谱 | 8 种关系类型,将规格 → 实现 → 测试 → PR 关联起来,并支持 Mermaid 可视化 |
| 混合搜索 | 通过互惠排序融合,结合 FTS5 关键词、语义向量相似度、自动启发式规则和日期范围筛选 |
| 代码模式 | 在可信管理员执行环境中执行多步操作——通过 mj.* API 最多可节省 90% 的 token |
| 自适应会话简报 | memory://briefing 会动态调整,提供实时工作区上下文——包括实时 CI 状况、本地 Git 状态、动态路径路由和未发布变更——约使用 350 个优化后的 token |
| 报告与分析 | 站会、回顾、PR 摘要、简报、周期分析和里程碑跟踪 |
| Hush 协议(标记) | 用结构化、可操作且可搜索的 AI 标记(阻碍事项、评审)取代 Slack/Teams 中的嘈杂消息,并自动在会话简报中呈现 |
| 团队协作 | 提供 28 个功能完整对等的工具——CRUD、向量搜索、关系图、跨项目洞察、作者归属,以及 Hush 协议标记(列表、更新、重新打开、分析) |
| 数据互操作性 | 支持 Markdown 双向往返转换、统一 IO 命名空间,以及具备硬性边界检查路径遍历防护的架构安全 JSON 导出 |
| 备份与恢复 | 通过单条命令备份/恢复,支持自动排程、保留策略和安全兜底自动备份 |
| 自动清理 | 根据重要性评分智能进行垃圾回收,将低价值条目标记为软删除,并在长期运行的项目中保持向量相关性 |
| 安全与传输 | OAuth 2.1(RFC 9728/8414、JWT/JWKS、作用域)、Streamable HTTP + SSE、速率限制、CORS、SQL 注入防护、非 root Docker |
| 结构化错误处理 | 每个工具都会返回 {success, error, code, category, suggestion, recoverable}——Agent 可获取分类、修复提示和可恢复性信号 |
| Agent 协作 | IDE Agent 和 Copilot 共享上下文;评审发现会成为可搜索的知识;Agent 会建议可复用的规则和技能(设置) |
| 原生 Agent 技能 | 内置基础编码范式(autonomous-dev、python、docker、tailwind-css、golang、playwright-standard 等),用于建立持久的 AI 行为和架构规则 |
| GitHub 指挥工具 | 提供工作流技能,用于 Issue 分类、PR 评审、冲刺里程碑,以及安全/质量/性能审计,并保留日志记录(文档) |
flowchart TB
subgraph Session["🤖 AI Session Start"]
Briefing["📋 Read Briefing<br/>(memory://briefing)"]
end
subgraph Core["📝 Journal Operations"]
Create["Create Entry"]
Retrieve["Retrieve & Search"]
Link["Link Entries"]
end
subgraph Search["🔍 Hybrid Search"]
FTS["Keyword (FTS5)"]
Semantic["Semantic (Vector)"]
DateRange["Date Range"]
RRF["Reciprocal Rank Fusion"]
end
subgraph GitHub["🐙 GitHub Integration"]
Issues["Issues & Milestones"]
PRs["Pull Requests"]
Actions["GitHub Actions"]
Kanban["Kanban Boards"]
Insights["Repository Insights"]
end
subgraph Outputs["📊 Outputs"]
Reports["Standups & Retrospectives"]
Graphs["Knowledge Graphs"]
Timeline["Project Timelines"]
end
Session --> Core
Core --> Search
Core <--> GitHub
Search --> Outputs
GitHub --> Outputs
建议规则(添加到 AGENTS.md、GEMINI.md、系统提示词等)
查看强制会话启动流程
🛑 强制会话启动流程
在处理会话/线程中用户的第一个请求之前,请完成以下步骤:
-
使用
read_resource工具读取简报:memory://briefing/{repo_name}。- 根据用户提示的上下文推断
repo_name。仅在必要时使用memory://briefing作为备用方案。
- 根据用户提示的上下文推断
-
首次回复必须以完整的简报内容开头。请使用以下格式:
📋 已加载简报 —
{repo_name}{在此粘贴完整简报内容}(用户在 IDE 中访问简报并非总是方便)
-
然后在简报下方处理用户的请求。
-
不要自主恢复简报中提到的问题。
工具筛选
重要
默认情况下,所有快捷方式和工具组都包含 Code Mode(
mj_execute_code),以提高令牌使用效率。若要排除它,请在筛选条件中添加-codemode:--tool-filter starter,-codemode
通过 MEMORY_JOURNAL_MCP_TOOL_FILTER(或 CLI:--tool-filter)控制公开哪些工具:
| 筛选条件 | 工具 | 用途 |
|---|---|---|
full | 73 | 所有工具(默认) |
starter | ~11 | 核心 + 搜索 + codemode |
essential | ~7 | 最小配置 |
readonly | 17 | 禁用所有修改操作 |
-github | 52 | 排除一个组 |
-github,-analytics | 50 | 排除多个组 |
筛选语法: shortcut、group 或 tool_name(白名单模式)· -group(禁用组)· -tool(禁用工具)· +tool(禁用组后重新启用工具)
自定义选择: 列出各个工具名称以创建自己的白名单:--tool-filter "create_entry,search_entries,semantic_search"
分组: core、search、analytics、relationships、io、admin、github、backup、team、codemode
📋 核心功能
🛠️ 73 个 MCP 工具(10 组)
| 分组 | 工具数 | 描述 |
|---|---|---|
codemode | 1 | 代码模式(沙盒化代码执行)🌟 推荐 |
core | 6 | 条目增删改查、标签、测试 |
search | 4 | 文本搜索、日期范围、语义搜索、向量统计 |
analytics | 2 | 统计、跨项目洞察 |
relationships | 2 | 链接条目、可视化关系图 |
io | 3 | JSON/Markdown 导出和文件级 Markdown 数据集成互操作(导入/导出) |
admin | 5 | 更新、删除、重建/添加到向量索引、合并标签 |
github | 18 | Issues、PR、上下文、看板、里程碑、洞察、issue 生命周期、Copilot 评审 |
backup | 4 | 备份、列出、恢复、清理 |
team | 28 | 增删改查、搜索、统计、关系、IO(Markdown 导入/导出)、备份、向量搜索、跨项目洞察、矩阵、Hush Protocol 标记(需要 TEAM_DB_PATH) |
🎯 19 个工作流提示词
find-related- 通过语义相似度发现相关条目prepare-standup- 每日站会摘要prepare-retro- 冲刺回顾weekly-digest- 按天整理的每周摘要analyze-period- 深入分析特定时期并提供洞察goal-tracker- 跟踪里程碑和成就get-context-bundle- 包含 Git/GitHub/看板信息的项目上下文get-recent-entries- 格式化的近期条目project-status-summary- GitHub Project 状态报告pr-summary- 拉取请求日志活动摘要code-review-prep- 全面的 PR 评审准备pr-retrospective- 分析已完成的 PR 并总结经验actions-failure-digest- CI/CD 失败分析project-milestone-tracker- 跟踪里程碑进度confirm-briefing- 向用户确认会话上下文session-summary- 创建会话摘要条目,记录已完成事项、待办事项和下次会话上下文team-session-summary- 创建回顾式团队会话摘要条目,并安全隔离到团队数据库adversarial-plan-review- 多轮对抗式计划评审,包含结构化维度、评分标准和先前计划上下文flag-dashboard- 按优先级评估对活跃标记进行分流,并提供解决建议
📡 46 个资源(29 个静态资源 + 17 个模板)
29 个静态资源(显示在资源列表中):
memory://briefing- 会话初始化:为 AI Agent 提供精简上下文(约 350 个 token),包括服务版本、功能范围(工具/资源/提示词)、测试健康状况、尚未发布的变更、分析数据、localTime和可选的activeFlagsmemory://instructions- 行为指导:面向 AI Agent 的完整服务说明memory://recent- 最近的 10 条条目memory://significant- 重要里程碑与突破memory://graph/recent- 最近关系的实时 Mermaid 图memory://health- 服务健康状况与诊断信息memory://graph/actions- CI/CD 叙述图memory://actions/recent- 最近的工作流运行记录memory://tags- 所有标签及其使用次数memory://statistics- 日志统计信息memory://rules- 用户规则文件内容,供 Agent 了解memory://workflows- 可用 Agent 工作流摘要memory://skills- Agent 技能索引(名称、路径、摘录)memory://github/status- GitHub 仓库状态概览memory://github/insights- 仓库星标数、复刻数和 14 天流量摘要memory://github/milestones- 开放的里程碑及其完成百分比memory://team/recent- 最近的团队条目及作者信息memory://team/statistics- 团队条目数、类型和作者分布memory://help- 工具组索引,包含说明和工具数量memory://metrics/summary- 自服务启动以来的工具调用聚合指标(调用次数、错误数、token 估算值、持续时间)— HIGH 优先级memory://metrics/tokens- 按输出 token 成本排序的各工具 token 使用情况明细 — MEDIUM 优先级memory://metrics/system- 进程级指标:内存(MB)、运行时间(s)、Node.js 版本、平台 — MEDIUM 优先级memory://metrics/users- 各用户的调用次数(存在 OAuth 用户标识符时填充)— LOW 优先级memory://audit- JSONL 运行遥测日志中最近 50 条写入/管理工具调用记录(需要AUDIT_LOG_PATH)memory://flags- 活跃(未解决)团队标记面板(需要TEAM_DB_PATH)memory://flags/vocabulary- 已配置的标记词汇memory://flags/history- 最近已解决的标记及解决详情和平均解决时间(最近 7 天)
17 个模板资源(9 个基础模板 + 8 个动态 {repo} 变体):
memory://projects/{number}/timeline- 项目活动时间线memory://issues/{issue_number}/entries- 与议题关联的条目memory://prs/{pr_number}/entries- 与 PR 关联的条目memory://prs/{pr_number}/timeline- PR 与日志的组合时间线memory://kanban/{project_number}- GitHub Project 看板memory://kanban/{project_number}/diagram- 看板 Mermaid 可视化图memory://milestones/{number}- 里程碑详情及完成进度memory://help/{group}- 按组划分的工具参考,包含参数和注释memory://briefing/{repo}- 针对特定仓库的上下文
注意:memory://github/status、memory://github/insights、memory://github/milestones 和 memory://milestones/{number} 资源还支持可选的 /{repo} 路径后缀,用于指定其他仓库。
⚡ 代码模式:最高效率(节省 90% Token)
代码模式(mj_execute_code)是一种革命性方案,最多可大幅减少 90% 的 Token 用量,并默认包含在所有预设中。AI Agent 无需为顺序调用工具消耗数千个 Token,只需进行一次沙盒执行,即可更快地推理。
代码在 worker_threads 沙盒中运行,该沙盒旨在提供安全的多租户进程隔离环境。所有 mj.* API 调用都在沙盒内针对日志执行,并具备以下特性:
- V8 代码生成限制 — 在 V8 引擎级别通过
codeGeneration: { strings: false, wasm: false }禁用eval()和通过字符串构造Function() - 冻结原型 — 在 vm 上下文中冻结所有内置原型(Object、Function、Array、Error 等),以防止通过动态构造函数链逃逸
- 静态代码验证 — 通过 18 条正则规则拦截
require()、process、eval()、Reflect.*、Symbol.*、new Proxy()以及文件系统/网络访问 - 禁用 Proxy 构造函数 — 在沙盒中将
Proxy设为undefined,防止滥用元对象协议 - RPC 允许列表 — 主机端验证可防止工作线程调用未经授权的 API 方法
- 速率限制 — 每个客户端每分钟最多执行 60 次
- 硬超时 — 可配置的执行时限(默认 30s)
- 出口边界强制执行 — 限制结果序列化大小,防止超大负载导致 OOM
- 完整 API 访问权限 — 可通过
mj.*使用全部 10 个工具组(例如mj.core.createEntry()、mj.search.searchEntries()、mj.github.getGithubIssues()、mj.team.passTeamFlag()) - 严格的只读契约 — 在
--tool-filter readonly下调用任何变更方法都会安全地停止沙盒,向 Agent 返回结构化的{ success: false, error: "..." }响应,而非原始 MCP 协议异常。
⚡ 仅启用代码模式(最大限度节省 Token)
仅启用代码模式运行 — 通过 mj.* API,以单个工具提供相当于全部 69 个工具的能力:
{
"mcpServers": {
"memory-journal-mcp": {
"command": "memory-journal-mcp",
"args": ["--tool-filter", "codemode"]
}
}
}
这只会暴露 mj_execute_code。Agent 使用带类型的 mj.* SDK 编写 JavaScript,在一次执行中组合跨越全部 10 个工具组的操作,并仅返回所需数据。这与 Cloudflare 为其整个 API 开创的 代码模式 相同:无论具备多少种能力,Token 成本都固定不变。
禁用代码模式
如果更倾向于单独调用工具,请排除 codemode:
{
"args": ["--tool-filter", "starter,-codemode"]
}
🤫 Hush 协议:异步团队协作
Hush 协议通过以结构化、可由机器执行的标记取代嘈杂的 Slack/Teams 消息,为 AI 增强型工作流重新构想团队协作。
遇到阻碍、需要审查或想要广播里程碑时,AI Agent 可以在共享的团队数据库中创建标记:
- 可操作的可见性:活动标记会自动显示在所有团队成员的
memory://briefing载荷最顶部。当另一位开发者的 Agent 启动会话时,它会立即看到你的阻碍,并能自主协助解决。 - 结构化类型:创建特定类型的标记(
blocker、needs_review、help_requested、fyi)。你可以通过--flag-vocabulary配置自定义团队词汇。 - 可搜索的历史记录:与消失无踪的聊天消息不同,Hush 标记是永久、可查询的 AI 日志条目。Agent 可以搜索以往的
needs_review标记,了解架构阻碍是如何克服的。 - 集成站会和回顾信号:活动标记会自动作为上下文信号出现在
prepare-standup和prepare-retro提示词中,因此每日站会和冲刺回顾总能发现尚未解决的阻碍。 - 完整的生命周期管理:通过
team_list_flags按状态、类型或负责人列出和筛选标记。通过team_update_flag更新元数据(提升严重程度、重新分配、添加链接),或重新打开已解决的标记。使用team_get_flag_analytics跟踪解决速度、每位用户的工作量和趋势。
仪表板和操作:读取 memory://flags 查看活动仪表板,读取 memory://flags/history 查看近期已解决的标记;使用 /flag-dashboard 提示词,通过严重程度分组和过期检测来引导分类处理;在 Code Mode 中使用 mj.team.passTeamFlag() / mj.team.resolveTeamFlag() / mj.team.teamListFlags() / mj.team.teamUpdateFlag() / mj.team.teamGetFlagAnalytics() 以编程方式管理标记。
🚀 快速开始
选项 1:npm(推荐)
npm install -g memory-journal-mcp
选项 2:从源代码构建
git clone https://github.com/neverinfamous/memory-journal-mcp.git
cd memory-journal-mcp
npm install
npm run build
添加到 MCP 配置
将以下内容添加到 ~/.cursor/mcp.json、Claude Desktop 配置或同类配置中:
基本配置
{
"mcpServers": {
"memory-journal-mcp": {
"command": "memory-journal-mcp",
"env": {
"GITHUB_TOKEN": "ghp_your_token_here",
"PROJECT_REGISTRY": "{\"my-repo\":{\"path\":\"/path/to/your/git/repo\",\"project_number\":1}}",
"ALLOWED_IO_ROOTS": "/path/to/your/git/repo"
}
}
}
}
高级配置(推荐)
展示服务的全部功能,包括多项目路由、团队协作、Copilot 感知和上下文注入。
{
"mcpServers": {
"memory-journal-mcp": {
"command": "memory-journal-mcp",
"env": {
"DB_PATH": "/path/to/your/memory_journal.db",
"TEAM_DB_PATH": "/path/to/shared/team.db",
"GITHUB_TOKEN": "ghp_your_token_here",
"PROJECT_REGISTRY": "{\"my-repo\":{\"path\":\"/path/to/repo\",\"project_number\":1},\"other-repo\":{\"path\":\"/path/to/other\",\"project_number\":5}}",
"ALLOWED_IO_ROOTS": "/path/to/repo,/path/to/other,/path/to/your/skills",
"AUTO_REBUILD_INDEX": "true",
"MEMORY_JOURNAL_MCP_TOOL_FILTER": "codemode",
"CODEMODE_INTERNAL_FULL_ACCESS": "true",
"BRIEFING_ENTRY_COUNT": "3",
"BRIEFING_SUMMARY_COUNT": "1",
"BRIEFING_INCLUDE_TEAM": "true",
"BRIEFING_ISSUE_COUNT": "3",
"BRIEFING_PR_COUNT": "3",
"BRIEFING_PR_STATUS": "true",
"BRIEFING_WORKFLOW_COUNT": "3",
"BRIEFING_WORKFLOW_STATUS": "true",
"BRIEFING_COPILOT_REVIEWS": "true",
"RULES_FILE_PATH": "/path/to/your/RULES.md",
"SKILLS_DIR_PATH": "/path/to/your/skills",
"MEMORY_JOURNAL_WORKFLOW_SUMMARY": "/deploy: prod deployment | /audit: security scan",
"AUDIT_LOG_PATH": "/path/to/your/mcp-audit.jsonl",
"TEAM_AUTHOR": "your_username"
}
}
}
}
💡 提示: 优化你的上下文窗口!日志条目(
BRIEFING_ENTRY_COUNT)记录频繁、细粒度的操作(例如修复错误、实施步骤)。会话摘要(BRIEFING_SUMMARY_COUNT)呈现高层次回顾,旨在跨不同 AI 会话持续传递战略上下文。合理使用两者,让 Agent 简报高度聚焦!
📋 自定义会话简报
memory://briefing 资源会在每次会话开始时动态组装,提供丰富且节省令牌的环境上下文。默认情况下,它会自动呈现:
- 系统状态: 服务版本、功能状态、资源/工具数量、测试健康状况,以及
memory://metrics/summary线索。 - 代码库上下文: Git 工作树状态、尚未发布的更改、精确的代码映射路径,以及按优先级排序的守门 CI 工作流。
- 环境上下文: 活动工作区路径、本地时间、分析数据和活动的 Hush 协议标记。
你可以从三个维度精确控制 Agent 还会看到哪些内容:
| 维度 | 变量 | 控制内容 |
|---|---|---|
| 深度 | INSTRUCTION_LEVEL | 行为指导的详细程度:essential、standard(默认)、full |
| 日志内容 | BRIEFING_ENTRY_COUNT、BRIEFING_SUMMARY_COUNT、BRIEFING_INCLUDE_TEAM | 最近条目和会话摘要的数量,以及是否显示团队条目 |
| GitHub 信息补充 | BRIEFING_ISSUE_COUNT、BRIEFING_PR_COUNT、BRIEFING_PR_STATUS、BRIEFING_MILESTONE_COUNT、BRIEFING_WORKFLOW_COUNT、BRIEFING_WORKFLOW_STATUS、BRIEFING_COPILOT_REVIEWS | 简报中显示的问题、PR、里程碑、CI 运行和 Copilot 审查状态 |
上下文注入: 设置 RULES_FILE_PATH 和 SKILLS_DIR_PATH,即可将用户规则和 Agent 技能作为配套资源(memory://rules、memory://skills)与简报一同呈现。
仓库指定: 在多仓库设置中,Agent 可读取 memory://briefing/{repo},获取针对 PROJECT_REGISTRY 中注册的特定仓库的简报。
简报预设(点击展开)
极简(快速会话) — 将简报精简至核心内容,适用于快速交互:
"BRIEFING_ENTRY_COUNT": "1",
"BRIEFING_SUMMARY_COUNT": "0",
"INSTRUCTION_LEVEL": "essential"
完整上下文(Agent 入门) — 为不熟悉项目的 Agent 提供尽可能完整的上下文:
"BRIEFING_ENTRY_COUNT": "5",
"BRIEFING_SUMMARY_COUNT": "3",
"BRIEFING_INCLUDE_TEAM": "true",
"BRIEFING_ISSUE_COUNT": "5",
"BRIEFING_PR_COUNT": "3",
"BRIEFING_PR_STATUS": "true",
"BRIEFING_COPILOT_REVIEWS": "true",
"INSTRUCTION_LEVEL": "full"
DevOps 为主 — 突出 CI/CD 和 GitHub 状态,适用于基础设施工作流:
"BRIEFING_WORKFLOW_COUNT": "5",
"BRIEFING_WORKFLOW_STATUS": "true",
"BRIEFING_ISSUE_COUNT": "3",
"BRIEFING_PR_COUNT": "3",
"BRIEFING_PR_STATUS": "true",
"BRIEFING_COPILOT_REVIEWS": "true"
变体(修改上述配置):
| 变体 | 更改 |
|---|---|
| 极简(无 GitHub) | 完全移除 env 块 |
| npx(无需安装) | 将 "command" 替换为 "npx",并添加 "args": ["-y", "memory-journal-mcp"] |
| 从源代码运行 | 将 "command" 替换为 "node",并添加 "args": ["dist/cli.js"] |
| 仅 Code Mode | 添加 "args": ["--tool-filter", "codemode"](单个工具,包含所有功能) |
| Docker | 将 "command" 替换为 "docker",并将 run -i --rm -v ./data:/app/data writenotenow/memory-journal-mcp:latest 用作参数 |
| 团队协作 | 在 env 中添加 "TEAM_DB_PATH": "./team.db" |
重启 MCP 客户端,然后开始记录日志!
选项 3:HTTP/SSE 传输(远程访问)
🔒 安全态势:Stdio 与 HTTP
- Stdio(默认): 在本地 IDE 或命令行环境的安全边界内隐式运行。由于执行环境已受信任,因此无需显式身份验证。
- HTTP/SSE: 通过网络套接字公开服务。默认情况下,HTTP 仅绑定到
localhost,并阻止通配符 CORS,以防止未经授权的访问和 CSRF 攻击。公开绑定到网络(--server-host 0.0.0.0)需要显式身份验证(--auth-token或--oauth-enabled)。如果尝试在未采取安全措施的情况下将服务公开到网络,服务将抛出致命错误。
如需远程访问或使用基于 Web 的客户端,请以 HTTP 模式运行服务:
memory-journal-mcp --transport http --port 3000
如需绑定到所有接口(容器必需)并启用自动主动分析调度器(例如,每日摘要),必须提供身份验证令牌:
export MCP_AUTH_TOKEN="your_secure_random_token"
memory-journal-mcp --transport http --port 3000 --server-host 0.0.0.0 --digest-interval 1440
端点:
| 端点 | 说明 | 模式 |
|---|---|---|
GET / | 服务信息和可用端点 | 两种模式 |
POST /mcp | JSON-RPC 请求(initialize、tools/call 等) | 两种模式 |
GET /mcp | 服务端到客户端通知的 SSE 流 | 有状态 |
DELETE /mcp | 终止会话 | 有状态 |
GET /sse | 旧版 SSE 连接(MCP 2024-11-05) | 有状态 |
POST /messages | 旧版 SSE 消息端点 | 有状态 |
GET /health | 健康检查({ status, timestamp }) | 两种模式 |
GET /.well-known/oauth-protected-resource | RFC 9728 受保护资源元数据 | 两种模式 |
会话管理: 服务默认使用有状态会话。后续请求中需包含 mcp-session-id 标头(在初始化时返回)。
- OAuth 2.1 — RFC 9728/8414、JWT/JWKS、细粒度作用域(通过
--oauth-enabled选择启用) - 7 个安全标头 — CSP、HSTS(选择启用)、X-Frame-Options 等
- 速率限制 — 每个 IP 每分钟 100 个请求 · CORS — 可配置的多源(精确匹配)· 1MB 请求体限制
- 服务超时 — 请求(120s)、保持活动(65s)、标头(66s)· 404 处理程序 · 跨协议防护
- 构建溯源 · SBOM · 供应链证明 · 以非 root 用户身份运行
curl 示例:
初始化会话(返回 mcp-session-id 标头):
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
列出工具(使用会话):
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: YOUR_SESSION_ID" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
无状态模式(无服务器)
对于无服务器部署(Lambda、Workers、Vercel),请使用无状态模式:
memory-journal-mcp --transport http --port 3000 --stateless
| 模式 | 进度通知 | 旧版 SSE | 无服务器 |
|---|---|---|---|
| 有状态(默认) | ✅ 是 | ✅ 是 | ⚠️ 复杂 |
无状态(--stateless) | ❌ 否 | ❌ 否 | ✅ 原生支持 |
自动调度(仅限 HTTP)
在 HTTP/SSE 模式下,使用 CLI 标志启用定期维护任务。这些任务通过 setInterval 在进程内运行,无需外部 cron。
注意: stdio 传输会忽略这些标志,因为 stdio 会话生命周期较短(与 IDE 会话绑定)。对于 stdio,请使用操作系统级调度(Task Scheduler、cron),或手动运行备份/清理工具。
memory-journal-mcp --transport http --port 3000 \
--backup-interval 60 --keep-backups 10 \
--vacuum-interval 1440 \
--rebuild-index-interval 720
| 标志 | 默认值 | 描述 |
|---|---|---|
--backup-interval <min> | 0(关闭) | 创建带时间戳的数据库备份,并自动清理旧备份 |
--keep-backups <count> | 5 | 自动清理时保留的最大备份数量 |
--vacuum-interval <min> | 0(关闭) | 运行 PRAGMA optimize 并将数据库写入磁盘 |
--rebuild-index-interval <min> | 0(关闭) | 完整重建向量索引,以维持语义搜索质量 |
每个任务都隔离错误——某个任务失败不会影响其他任务。可通过 memory://health 查看调度器状态(上次运行时间、结果、下次运行时间)。
GitHub 集成配置
当配置了 PROJECT_REGISTRY,或 MCP 服务在 Git 仓库内运行时,GitHub 工具(get_github_issues、get_github_prs 等)会根据你的 Git 上下文自动检测仓库。
| 环境变量 | 说明 |
|---|---|
DB_PATH | 数据库文件位置(CLI:--db;默认:./memory_journal.db) |
TEAM_DB_PATH | 团队数据库文件位置(CLI:--team-db) |
TEAM_AUTHOR | 覆盖团队条目的作者名称(默认:git config user.name) |
GITHUB_TOKEN | 用于 API 访问的 GitHub 个人访问令牌 |
DEFAULT_PROJECT_NUMBER | 创建议题时用于自动分配的默认 GitHub Project 编号 |
PROJECT_REGISTRY | 仓库到 { path, project_number } 的 JSON 映射,用于多项目自动检测和路由 |
AUTO_REBUILD_INDEX | 设为 true,在服务启动时重建向量索引 |
MCP_HOST | 服务绑定主机(容器使用 0.0.0.0;默认:localhost) |
MCP_AUTH_TOKEN | 用于 HTTP 传输身份验证的 Bearer 令牌(CLI:--auth-token)。不得使用默认占位令牌。 |
ALLOWED_IO_ROOTS | 关键安全边界:以逗号分隔的绝对路径,授予 Code Mode 和导出工具文件系统访问权限(默认:无/默认拒绝) |
MCP_CORS_ORIGIN | HTTP 传输允许的 CORS 来源,以逗号分隔(默认:空白,严格选择启用) |
TRUST_PROXY | 信任用于速率限制和来源检查的代理标头(CLI:--trust-proxy;默认:false) |
PUBLIC_ORIGIN | OAuth 重定向 URI 使用的公共来源 URL(CLI:--public-origin) |
MCP_RATE_LIMIT_MAX | 每个客户端 IP 每分钟的最大请求数,仅适用于 HTTP(默认:100) |
LOG_LEVEL | 日志详细程度:error、warn、info、debug(默认:info;CLI:--log-level) |
MCP_ENABLE_HSTS | 在 HTTP 响应中启用 HSTS 安全标头(CLI:--enable-hsts;默认:false) |
OAUTH_ENABLED | 设为 true 以启用 OAuth 2.1 身份验证(仅限 HTTP) |
OAUTH_ISSUER | OAuth 颁发者 URL(例如:https://auth.example.com/realms/mcp) |
OAUTH_AUDIENCE | 预期的 JWT audience 声明 |
OAUTH_JWKS_URI | 用于验证令牌签名的 JWKS 端点 |
OAUTH_ALLOW_PLAINTEXT_LOOPBACK | 允许本地 OAuth 客户端使用明文 HTTP loopback 重定向 URI(CLI:--oauth-allow-plaintext-loopback;默认:false) |
OAUTH_CLOCK_TOLERANCE | JWT 验证允许的时钟偏差容限,以秒为单位(默认:5) |
CODE_MODE_MAX_RESULT_SIZE | mj_execute_code 结果负载的最大字节数(CLI:--codemode-max-result-size;默认:102400) |
CODEMODE_INTERNAL_FULL_ACCESS | 在 Code Mode 沙盒中绕过工具筛选限制(CLI:--codemode-internal-full-access;默认:false) |
BRIEFING_ENTRY_COUNT | 简报中的日志条目数(CLI:--briefing-entries;默认:3) |
BRIEFING_SUMMARY_COUNT | 简报中列出的会话摘要数(CLI:--briefing-summaries;默认:1) |
BRIEFING_INCLUDE_TEAM | 在简报中包含团队数据库条目(true/false;默认:false) |
BRIEFING_ISSUE_COUNT | 简报中列出的议题数;0 = 仅统计数量(默认:0) |
BRIEFING_PR_COUNT | 简报中列出的 PR 数;0 = 仅统计数量(默认:0) |
BRIEFING_PR_STATUS | 显示 PR 状态细分(open/merged/closed;默认:false) |
BRIEFING_MILESTONE_COUNT | 简报中列出的里程碑数;0 = 完全隐藏(CLI:--briefing-milestones;默认:3) |
BRIEFING_WORKFLOW_COUNT | 简报中列出的工作流运行次数;0 = 仅显示状态(默认:0) |
BRIEFING_WORKFLOW_STATUS | 在简报中显示工作流状态细分(默认:false) |
BRIEFING_COPILOT_REVIEWS | 在简报中汇总 Copilot 审查状态(默认:false) |
RULES_FILE_PATH | 用于让 Agent 了解用户规则的文件路径(CLI:--rules-file) |
SKILLS_DIR_PATH | 用于让 Agent 了解技能的目录路径(CLI:--skills-dir) |
MEMORY_JOURNAL_WORKFLOW_SUMMARY | memory://workflows 的自由文本工作流摘要(CLI:--workflow-summary) |
INSTRUCTION_LEVEL | 简报深度:essential、standard、full(CLI:--instruction-level;默认:standard) |
PROJECT_LINT_CMD | GitHub Commander 验证关卡使用的项目 lint 命令(默认:npm run lint) |
PROJECT_TYPECHECK_CMD | 项目类型检查命令(默认:npm run typecheck;空值 = 跳过) |
PROJECT_BUILD_CMD | 项目构建命令(默认:npm run build;空值 = 跳过) |
PROJECT_TEST_CMD | 项目测试命令(默认:npm run test) |
PROJECT_E2E_CMD | 项目 E2E 测试命令(默认:空值 = 跳过) |
PROJECT_PACKAGE_MANAGER | 包管理器覆盖项:npm、yarn、pnpm、bun(默认:根据锁文件自动检测) |
PROJECT_HAS_DOCKERFILE | 启用 Docker 审计步骤(默认:自动检测) |
COMMANDER_HITL_FILE_THRESHOLD | 如果更改涉及超过 N 个文件,则设置 Human-in-the-loop 检查点(默认:10) |
COMMANDER_SECURITY_TOOLS | 覆盖安全工具自动检测(以逗号分隔;默认:自动检测) |
COMMANDER_BRANCH_PREFIX | PR 的分支命名前缀(默认:fix) |
AUDIT_LOG_PATH | 写入/管理工具调用的 JSONL 运行遥测日志路径。达到 10 MB 时轮换(保留 5 个归档文件)。省略此项可禁用遥测日志记录。 |
AUDIT_REDACT | 设为 false,在遥测日志条目中包含工具参数(默认:true) |
AUDIT_READS | 除写入/管理工具调用外,也记录读取范围的工具调用(CLI:--audit-reads;默认:false) |
AUDIT_LOG_MAX_SIZE | 轮换前运行遥测文件的最大字节数(CLI:--audit-log-max-size;默认:10485760) |
MCP_METRICS_ENABLED | 设为 false,禁用内存中的工具调用指标累积(默认:true) |
FLAG_VOCABULARY | Hush Protocol 的标记类型,以逗号分隔(CLI:--flag-vocabulary;默认:blocker,needs_review,help_requested,fyi) |
PRUNE_OLDER_THAN_DAYS | 启动时软删除早于 N 天且重要性低于阈值的条目;0 = 禁用(CLI:--prune-older-than-days;默认:0) |
PRUNE_IMPORTANCE_THRESHOLD | 重要性评分阈值(0.0–1.0)——低于此分数的条目将被清理(CLI:--prune-importance-threshold;默认:0.15) |
多项目工作流:为让 Agent 无缝支持多个项目,请提供 PROJECT_REGISTRY。 |
动态上下文解析与自动检测
执行 GitHub 工具(issues、PR、上下文等)时,服务会按以下顺序解析仓库上下文:
- 动态项目路由:如果 Agent 传入的
repo字符串与PROJECT_REGISTRY中的某个键匹配,服务会动态挂载映射到该项目的物理目录。在本地执行 git 命令,并自动推断owner。 - 显式覆盖:如果 Agent 显式提供了
owner和repo,这些值会覆盖 API 调用的自动检测结果。 - 缺少上下文:如果没有
PROJECT_REGISTRY或显式参数,服务会阻止执行并返回{requiresUserInput: true},以提示 Agent。
自动项目路由(看板 / issues)
创建 issue 或查看 / 移动看板卡片时,服务需要 GitHub Project 编号。确定方式如下:
- 检查 Agent 传入的原始
project_number参数。 - 检查
repo字符串是否与PROJECT_REGISTRY中的条目完全匹配,并将其无缝映射到预先配置的project_number。 - 如果已设置,则回退到全局定义的
DEFAULT_PROJECT_NUMBER。
🔐 OAuth 2.1 身份验证
对于生产部署,请在 HTTP 传输上启用 OAuth 2.1 身份验证:
| 组件 | 状态 | 描述 |
|---|---|---|
| 受保护资源元数据 | ✅ | RFC 9728 /.well-known/oauth-protected-resource |
| 身份验证服务器发现 | ✅ | 支持缓存的 RFC 8414 元数据发现 |
| 令牌验证 | ✅ | 支持 JWKS 的 JWT 验证 |
| 权限范围强制 | ✅ | 细粒度的 read、write、admin 权限范围 |
| HTTP 传输 | ✅ | 带有 OAuth 中间件的可流式 HTTP |
支持的权限范围:
| 权限范围 | 工具组 |
|---|---|
read | core、search、analytics、relationships、io |
write | github、team(以及所有 read 组) |
admin | admin、backup、codemode(以及所有 write/read 组) |
快速开始:
memory-journal-mcp --transport http --port 3000 \
--oauth-enabled \
--oauth-issuer https://auth.example.com/realms/mcp \
--oauth-audience memory-journal-mcp \
--oauth-jwks-uri https://auth.example.com/realms/mcp/protocol/openid-connect/certs
也可以通过环境变量配置:
export OAUTH_ENABLED=true
export OAUTH_ISSUER=https://auth.example.com/realms/mcp
export OAUTH_AUDIENCE=memory-journal-mcp
export OAUTH_CLOCK_TOLERANCE=5
memory-journal-mcp --transport http --port 3000
**注意:**OAuth 为可选功能。未启用时,服务会回退到通过
MCP_AUTH_TOKEN环境变量进行简单令牌身份验证,或在不进行身份验证的情况下运行。
🔄 会话管理
- 会话开始 → Agent 读取
memory://briefing(或memory://briefing/{repo})并显示项目上下文 - 会话摘要 → 使用
/session-summary记录进度和下一会话的上下文 - 下一会话的简报会包含上一会话的摘要——上下文无缝衔接
🔧 配置
GitHub 集成(可选)
export GITHUB_TOKEN="your_token" # For Projects/Issues/PRs
权限范围:repo、project、read:org(仅用于组织级项目发现)
GitHub 管理功能
Memory Journal 采用 混合式 GitHub 管理方案:
| 能力来源 | 用途 |
|---|---|
| MCP Server | 专项功能:看板可视化、里程碑、日志关联、项目时间线 |
| Agent(gh CLI) | 完整的 GitHub 变更操作:创建/关闭议题、创建/合并 PR、管理发布 |
MCP Server 工具(读取 + 看板 + 里程碑 + 议题生命周期):
get_github_issues/get_github_issue- 查询议题get_github_prs/get_github_pr- 查询拉取请求get_github_context- 完整的代码库上下文get_kanban_board/add_kanban_item/move_kanban_item/delete_kanban_item- 看板管理get_github_milestones/get_github_milestone- 跟踪里程碑进度及完成百分比create_github_milestone/update_github_milestone/delete_github_milestone- 里程碑 CRUDget_repo_insights- 代码库流量与分析(星标、克隆、浏览量、引荐来源、热门路径)create_github_issue_with_entry/close_github_issue_with_entry- 带日志关联的议题生命周期管理
为什么采用这种设计? MCP 服务专注于将日志条目与 GitHub 集成的增值功能(看板视图、里程碑、时间线资源、上下文关联)。标准的 GitHub 变更操作(创建/关闭议题、合并 PR、管理发布)由 Agent 通过
ghCLI 直接处理。
GitHub Commander 工作流
服务器原生内置 github-commander Agent 技能(可通过 memory://skills/github-commander 访问)。它为 AI 助手扩展了 9 种自主 DevOps 工作流,用于代码库维护:议题分类、里程碑冲刺、PR 审查、Copilot 审计、安全审计、代码质量审计、性能审计、路线图启动和依赖项更新。配置 PROJECT_* 环境覆盖项,即可在 Agent 任务期间强制执行与 CI 匹配的本地验证层!
🏗️ 架构
数据流
flowchart TB
AI["🤖 AI Agent<br/>(Cursor, Windsurf, Claude)"]
subgraph MCP["Memory Journal MCP Server"]
Tools["🛠️ 73 Tools"]
Resources["📡 46 Resources"]
Prompts["💬 19 Prompts"]
end
subgraph Storage["Persistence Layer"]
SQLite[("💾 SQLite<br/>Entries, Tags, Relationships")]
Vector[("🔍 Vector Index<br/>Semantic Embeddings")]
Backups["📦 Backups"]
end
subgraph External["External Integrations"]
GitHub["🐙 GitHub API<br/>Issues, PRs, Actions"]
Kanban["📋 Projects v2<br/>Kanban Boards"]
end
AI <-->|"MCP Protocol"| MCP
Tools --> Storage
Tools --> External
Resources --> Storage
Resources --> External
技术栈
┌─────────────────────────────────────────────────────────────┐
│ MCP Server Layer (TypeScript) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ Tools (73) │ │ Resources (47) │ │ Prompts (19)│ │
│ │ with Annotations│ │ with Annotations│ │ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Native SQLite Engine │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ better-sqlite3 │ │ sqlite-vec │ │ transformers│ │
│ │ (High-Perf I/O) │ │ (Vector Index) │ │ (Embeddings)│ │
│ └─────────────────┘ └─────────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ SQLite Database with Hybrid Search │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ entries + tags + relationships + embeddings + backups ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
🔧 技术亮点
性能与可移植性
- TypeScript + 原生 SQLite - 采用同步 I/O 的高性能
better-sqlite3 - sqlite-vec - 通过 SQLite 扩展进行向量相似度搜索
- @huggingface/transformers - 在 JavaScript 中运行本地 ML 嵌入模型
- 后台预热 - 服务器启动时会异步将模型权重(约 23MB)加载到内存,以避免首次请求延迟。如果服务器在预热完成前被调用,首次语义搜索或向量插入会遇到受网络影响的冷启动(约 1.5s - 3s),此时权重会缓存在本地。
性能基准测试
Memory Journal 专为 AI 任务执行期间的极低开销而设计。我们包含一个 vitest bench 测试套件,以维持这些基准保证:
- 数据库读取:操作耗时不到一毫秒。
calculateImportance的速度约为检索 50 条最新条目的 13-14 倍。 - 向量搜索引擎:借助
sqlite-vec和 SQL 原生 KNN 查询,搜索(约 140-220 ops/sec)和索引(约 1600-1900+ ops/sec)均具有高吞吐量。 - 核心 MCP 例程:
getTools使用缓存的 O(1) 分派,速度约为get_recent_entries的 4800-7000 倍。create_entry和search_entries通过完整的 MCP 层执行,额外开销不到一毫秒。
要在本地运行基准测试套件:
npm run bench
测试
通过两个测试框架进行了全面测试:
| 测试套件 | 命令 | 覆盖范围 |
|---|---|---|
| Vitest(单元/集成) | npm test | 数据库、工具、资源、处理程序、安全性、GitHub、向量搜索、codemode |
| Playwright(端到端) | npm run test:e2e | HTTP/SSE 传输、身份验证、会话、CORS、安全标头、调度器 |
npm test # Unit + integration tests
npm run test:e2e # End-to-end HTTP/SSE transport tests
安全性
- 确定性错误处理 - 每个工具都会返回结构化的
{success, error, code, category, suggestion, recoverable}响应,并提供可操作的上下文;不会抛出原始异常、静默失败或显示误导性消息 - 本地优先 - 所有数据均存储在本地,不会调用外部 API(可选的 GitHub 除外)
- 输入验证 - Zod 模式、内容大小限制、防止 SQL 注入
- 路径遍历防护 - 验证备份文件名
- MCP 2025-03-26 注解 - 行为提示(
readOnlyHint、destructiveHint等) - HTTP 传输强化 - 7 个安全标头、可配置的多源 CORS、1MB 请求体限制、内置速率限制(100 次请求/分钟)、服务器超时、HSTS(可选启用)、30 分钟会话超时、404 处理程序、跨协议防护
- 令牌清理 - 自动从错误日志中隐藏 GitHub 令牌和凭据
数据与隐私
- 单个 SQLite 文件 - 数据由你掌控
- 可移植 - 可将
.db文件移至任何位置 - 软删除 - 可恢复条目
- 恢复时自动备份 - 避免意外丢失数据
📚 文档与资源
- GitHub Wiki - 完整文档
- Copilot 设置指南 - IDE Agent 与 GitHub Copilot 之间的跨 Agent 记忆桥接
- 部署指南 - CI/CD 流水线、环境和版本升级检查清单
- Docker Hub - 容器映像
- npm 包 - Node.js 发行版
- 问题反馈 - 错误报告和功能请求
📄 许可证
MIT 许可证 - 详情请参阅 LICENSE 文件。
🤝 贡献
由开发者打造,服务开发者。欢迎提交 PR!请参阅 CONTRIBUTING.md 了解指南。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。