基于 Zettelkasten 记忆片段盒方法的 MCP 记忆服务器 v1.6.X
npm install zettelkasten-memory-server[[记忆片段名]] 引用语法
getMemory: 获取记忆片段内容,支持递归展开引用
setMemory: 创建或更新记忆片段内容
deleteMemory: 删除记忆片段
renameMemory: 重命名或合并记忆片段,自动更新所有引用
getMemoryHints: 获取按权重排序的重要记忆片段列表
getOptimizeSuggestions: 获取记忆片段优化建议,包括低价值片段和孤立片段
memory:///fragmentName#expandDepth 格式,等效于 getMemory(fragmentName, expandDepth)
topic_inspiration): 当不知道聊什么话题时,基于重要记忆片段提供话题建议
chat_optimization): 聊天结束时,提供系统优化建议和维护指导
bash
npm install
`
$3
`bash
npm run build
`
$3
`bash
npm start
`
或者直接运行:
`bash
node build/index.js
`
$3
通过环境变量指定存储目录:
`bash
ZETTELKASTEN_STORAGE_DIR="/path/to/your/cards" npm start
`
$3
为了防止不必要的重复读取操作,系统引入了重复读取限制机制:
- 环境变量: MEMORY_REPEAT_ACCESS_RESTRICTION=true 启用限制(默认启用)
- 机制说明: 已获取最新内容的记忆片段无需重复 getMemory 操作
- 编辑操作影响: 任何编辑操作(setMemory、extractMemory、insertLinkAt、renameMemory)后会移除最新内容标记
- 使用建议: 编辑操作前必须先获取最新内容,否则操作会被拒绝
`bash
启用重复读取限制
MEMORY_REPEAT_ACCESS_RESTRICTION=true npm start
禁用重复读取限制
MEMORY_REPEAT_ACCESS_RESTRICTION=false npm start
`
记忆片段语法
$3
每个记忆片段都是一个 .md 文件,内容可以是任意文本:
`markdown
这是一张关于 JavaScript 的记忆片段。
JavaScript 是一种编程语言,它有以下特点:
- 动态类型
- 原型继承
- 事件驱动
相关概念: [[编程语言]]、[[Web开发]]
`
$3
使用 [[记忆片段名]] 来引用其他记忆片段:
`markdown
今天学习了 [[React]],它是基于 [[JavaScript]] 的前端框架。
React 的核心概念包括:
- [[组件化]]
- [[状态管理]]
- [[虚拟DOM]]
`
$3
使用 getMemory 工具时,可以指定展开深度来递归获取引用记忆片段的内容:
`typescript
// 展开深度为 1,会展开第一层引用的记忆片段内容
getMemory("React", 1)
`
展开后的内容格式:
`markdown
今天学习了 React,它是基于 JavaScript 的前端框架。
![[JavaScript]]start
JavaScript 是一种编程语言,它有以下特点:
- 动态类型
- 原型继承
- 事件驱动
![[JavaScript]]end
React 的核心概念包括:
- 组件化
- 状态管理
- 虚拟DOM
`
权重计算机制
系统会自动计算每个记忆片段的权重:
- 叶子记忆片段 (无外链): 权重 = 1
- 有外链的记忆片段: 权重 = 所有引用记忆片段权重的平均值
这个机制让经常被引用的基础概念获得更高权重,有助于识别知识体系中的核心节点。
信息散度与优化建议
系统提供智能优化建议功能,通过信息散度计算和孤立片段识别来帮助维护知识库的健康。
$3
信息散度是衡量记忆片段价值的重要指标:
信息散度 = 权重 / 字符数
- 低信息散度: 表示信息过于集中,可能需要拆分
- 权重高但字符数少:信息密度过高,建议拆分为更小的概念单元
- 权重低且字符数少:可能是孤立或无用的片段
- 高信息散度: 表示信息分布合理,网络连接良好
- 权重高且字符数适中:核心概念,保持现状
- 权重低但字符数少:可能是新兴概念,需要更多连接
$3
系统片段是知识库的核心组成部分,具有特殊的保护机制:
- 识别方法: 内容以 开头的记忆片段
- 只读特性: 无法通过 setMemory、extractMemory 等方法修改
- 保护目的: 确保系统核心的稳定性和一致性
- 操作建议: 如需修改系统相关内容,应在其他可编辑片段中进行操作
$3
getOptimizeSuggestions 工具提供全面的记忆片段优化建议:
参数:
- optimizationThreshold (number, 可选): 优化阈值,默认为 0.1
- maxFileCount (number, 可选): 返回的记忆片段最大数量,默认为 10
功能特点:
1. 低价值片段识别: 识别信息散度低于阈值的记忆片段
2. 孤立片段检测: 发现没有反向链接的孤立记忆片段
3. 系统片段过滤: 自动跳过系统片段,只分析可编辑内容
4. 优化策略建议: 提供具体的优化步骤和操作指导
返回内容:
- 信息散度计算原理说明
- 孤立片段概念解释
- 系统片段保护机制说明
- 低价值片段列表及优化建议
- 孤立片段列表及处理策略
- 维护建议和推荐工具使用
MCP 工具列表
$3
获取指定记忆片段的内容,支持递归展开引用。
参数:
- fragmentName (string): 记忆片段名称
- expandDepth (number, 可选): 展开深度,默认为 0
- withLineNumber (boolean, 可选): 是否显示行号,默认为 false
$3
创建或更新记忆片段的内容。
参数:
- fragmentName (string): 记忆片段名称
- content (string): 记忆片段内容
$3
删除指定的记忆片段。
参数:
- fragmentName (string): 要删除的记忆片段名称
$3
重命名记忆片段或将两个记忆片段合并。
参数:
- oldFragmentName (string): 原记忆片段名称
- newFragmentName (string): 新记忆片段名称
$3
从现有记忆片段中提取内容创建新片段。
参数:
- sourceFragmentName (string): 源记忆片段名称
- newFragmentName (string): 新记忆片段名称
- startLine (number): 起始行号
- endLine (number): 结束行号
$3
获取按权重排序的重要记忆片段提示。
参数:
- fileCount (number, 可选): 返回的记忆片段数量,默认为 10
$3
获取记忆片段优化建议,包括低价值片段和孤立片段。
参数:
- optimizationThreshold (number, 可选): 优化阈值,默认为 0.1
- maxFileCount (number, 可选): 返回的记忆片段最大数量,默认为 10
使用示例:
`javascript
// 获取默认的优化建议
const suggestions = await tools.call("getOptimizeSuggestions");
// 自定义参数获取更详细的建议
const detailedSuggestions = await tools.call("getOptimizeSuggestions", {
optimizationThreshold: 0.05, // 更低的阈值,识别更多需要优化的片段
maxFileCount: 20 // 返回更多建议
});
`
优化策略示例:
1. 低信息散度片段处理:
`markdown
# 原始片段 (需要拆分)
这是一个包含多个概念的冗长记忆片段,包含了概念A、概念B和概念C...
# 优化后
# 概念A
[概念A的详细内容]
相关概念: [[概念B]]、[[概念C]]
# 概念B
[概念B的详细内容]
相关概念: [[概念A]]
# 概念C
[概念C的详细内容]
相关概念: [[概念A]]
`
2. 孤立片段处理:
`markdown
# 孤立片段
这是一个没有其他记忆片段链接的内容...
# 优化方法
# 方法1: 在相关片段中添加链接
在 [[相关概念]] 中添加: "更多信息可参考 [[孤立片段]]"
# 方法2: 合并到相关片段
将孤立片段的内容合并到 [[相关概念]] 中
# 方法3: 删除无用片段
如果内容不再需要,可直接删除
`
3. 系统片段注意事项:
`markdown
# 系统片段
这是系统核心内容,无法直接修改...
# 正确操作方式
# 1. 在其他可编辑片段中引用系统片段
# 2. 使用 extractMemory 从系统片段中提取内容到新片段
# 3. 在新片段中进行编辑操作
`
新特性说明
- getMemory 支持 withLineNumber 参数,输出带行号内容。
- getMemory 返回内容最大长度为 2k,超出会被截断并提示。
- 已获取最新内容的文件无需重复 getMemory,编辑操作前必须先获取最新内容,否则拒绝。
- 编辑操作(setMemory、extractMemory、insertLinkAt、renameMemory)后会移除最新内容标记。
- 新增重复读取限制机制,通过环境变量 MEMORY_REPEAT_ACCESS_RESTRICTION 控制。
最佳实践
$3
创建 hints 记忆片段作为系统的入口点:
`markdown
知识体系入口
编程相关
- [[JavaScript]]
- [[Python]]
- [[算法与数据结构]]
项目管理
- [[项目规划]]
- [[团队协作]]
学习笔记
- [[今日学习]]
- [[问题记录]]
`
$3
每张记忆片段只包含一个核心概念:
`markdown
React Hooks
React Hooks 是 React 16.8 引入的新特性,让你可以在函数组件中使用状态和其他 React 特性。
常用的 Hooks:
- [[useState]]
- [[useEffect]]
- [[useContext]]
相关概念:[[React]]、[[函数组件]]
`
$3
不要只是罗列链接,要说明关系:
`markdown
设计模式
设计模式是软件设计中常用的解决方案。
创建型模式
- [[单例模式]] - 确保类只有一个实例
- [[工厂模式]] - 创建对象的接口
行为型模式
- [[观察者模式]] - 用于 [[事件驱动编程]]
设计模式在 [[JavaScript]] 和 [[Python]] 中都有广泛应用。
`
$3
使用 getOptimizeSuggestions 工具定期检查记忆片段,进行优化:
- 识别低价值片段: 使用信息散度计算找出需要拆分的片段
- 发现孤立片段: 找出没有链接的孤立内容
- 精简冗长内容: 拆分过于复杂的记忆片段
- 删除过时信息: 移除不再需要的孤立片段
- 增强连接性: 在相关片段间建立有意义的链接
- 保护系统片段: 避免直接修改系统核心内容
智能提示功能
$3
当不知道聊什么话题时,使用 topic_inspiration 提示:
`bash
在 MCP 客户端中
请使用 "话题灵感" 提示模板
`
系统会:
1. 自动获取重要记忆片段
2. 按权重分类为核心话题、深度话题、轻松话题
3. 提供对话建议和操作指导
$3
聊天结束时,使用 chat_optimization 提示:
`bash
在 MCP 客户端中
请使用 "聊天优化" 提示模板
``