使用说明
持久分层内存MCP服务器
一种生产就绪的模型上下文协议(MCP)服务器,为AI代理提供持久的分层内存。具有语义相似性搜索、自动生命周期管理和多层存储(工作、短期、长期记忆)功能。
特性
-
分层存储层
- 工作内存(分钟)-当前上下文,内存缓存
- 短期记忆(天/周)-最近的交互,带TTL的向量存储
- 长期记忆(月)-整合知识,永久存储
-
语义搜索
- 基于嵌入的向量相似性搜索
- 按层、标签、重要性过滤
- 任务的上下文感知回忆
-
自动生命周期管理
- 基于时间衰减的重要性评分
- 层间自动升级/降级
- 巩固旧记忆
- 基于TTL和相关性的遗忘
-
多后端支持
- 内存(开发/测试)
- Weaviate(自托管)
- 松果(管理)
-
多个嵌入提供程序
- OpenAI(文本嵌入3-small)
- 基于本地TF-IDF(无外部API)
安装
npm install @anthropic-ai/memory-mcp-server
或者从源代码构建:
git clone https://github.com/anthropics/memory-mcp-server.git
cd memory-mcp-server
npm install
npm run build
配置
环境变量
创建一个 .env 文件(参见 .env.example):
# Vector Store Selection (memory, weaviate, pinecone)
VECTOR_STORE_TYPE=memory
# Weaviate Configuration
WEAVIATE_URL=http://localhost:8080
WEAVIATE_API_KEY=optional
# Pinecone Configuration
PINECONE_API_KEY=your-api-key
PINECONE_INDEX=memory-mcp
# Embedding Configuration
EMBEDDING_PROVIDER=openai
OPENAI_API_KEY=your-api-key
OPENAI_EMBEDDING_MODEL=text-embedding-3-small
OPENAI_EMBEDDING_DIMENSIONS=1536
# Memory Layer TTL (milliseconds)
WORKING_MEMORY_TTL=1800000 # 30 minutes
SHORT_TERM_MEMORY_TTL=604800000 # 7 days
LONG_TERM_MEMORY_TTL=31536000000 # 1 year
# Consolidation
CONSOLIDATION_THRESHOLD=100 # Memories before consolidation
CONSOLIDATION_AGE=2592000000 # 30 days
# Importance Decay
DECAY_RATE=0.1 # Exponential decay rate
DECAY_INTERVAL=86400000 # Daily decay
Claude桌面配置
添加到您的Claude Desktop配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["path/to/memory-mcp-server/build/index.js"],
"env": {
"VECTOR_STORE_TYPE": "memory",
"EMBEDDING_PROVIDER": "openai",
"OPENAI_API_KEY": "your-api-key-here"
}
}
}
}
工具
记忆库
将信息与元数据一起存储在持久内存中。
参数:
content(string,必填):要存储的内容importance(数字,0-1,默认值:0.5):重要性得分tags(字符串数组,默认值:[]):类别标记source(字符串:“user”|“agent”|“system”,默认值:“agent”):源layer(字符串:“工作”|“短期”|“长期”):显式层
例子:
await memory_store({
content: "User prefers concise responses with code examples",
importance: 0.9,
tags: ["preferences", "communication-style"]
})
记忆搜索
使用语义相似性搜索记忆。
参数:
query(字符串,必填):搜索查询limit(数字,默认值:10):最大结果layerFilter(字符串数组):按层过滤minRelevance(数字,0-1,默认值:0):最小相似性阈值tags(字符串数组):按标签筛选
例子:
await memory_search({
query: "user preferences for code formatting",
limit: 5,
minRelevance: 0.5
})
memory_recall
检索特定任务的上下文相关记忆。
参数:
task(字符串,必填):任务描述context(字符串,可选):附加上下文limit(数字,默认值:10):最大内存
例子:
await memory_recall({
task: "Help debug a React component",
context: "User is working on a dashboard project",
limit: 10
})
记忆_巩固
总结并压缩旧记忆。
参数:
olderThan(数字,可选):时间戳过滤器targetSize(数字,默认值:50):目标计数layer(字符串,默认值:“短期”):要合并的层
例子:
await memory_consolidate({
targetSize: 50,
layer: "short-term"
})
记忆_遗忘
明确地或根据标准删除记忆。
参数:
memoryId(字符串,可选):特定内存IDolderThan(数字,可选):时间戳过滤器layer(字符串,可选):要清除的图层reason(字符串,可选):审核原因
例子:
await memory_forget({
olderThan: Date.now() - 30 * 24 * 60 * 60 * 1000, // 30 days ago
layer: "working",
reason: "Cleanup expired working memories"
})
memory_list
使用筛选列出所有存储的内存。
参数:
layer(字符串,可选):按层过滤tags(字符串数组,可选):按标签筛选limit(数字,默认值:100):最大结果
memory_stats
获取有关存储内存的统计信息。
退货:
totalMemories:总计数byLayer:每层计数avgImportance:平均重要性oldestMemory:最旧的时间戳newestMemory:最新时间戳
建筑
┌─────────────────────────────────────────────────────────────┐
│ Memory MCP Server │
├─────────────────────────────────────────────────────────────┤
│ Memory Layers: │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Working │ │ Short-Term │ │ Long-Term │ │
│ │ (30 min TTL) │ │ (7 day TTL) │ │ (1 year TTL) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ └─────────────────┴──────────────────┘ │
│ │ │
│ ┌───────▼────────┐ │
│ │ Vector Store │ │
│ │ (Memory/ │ │
│ │ Weaviate/ │ │
│ │ Pinecone) │ │
│ └────────────────┘ │
│ │
│ Lifecycle: │
│ - Semantic search (cosine similarity) │
│ - Temporal decay (forgetting curve) │
│ - Importance scoring (attention mechanism) │
│ - Consolidation (summarization) │
│ - Automatic promotion/demotion │
└─────────────────────────────────────────────────────────────┘
发展
# Install dependencies
npm install
# Build TypeScript
npm run build
# Watch mode for development
npm run watch
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Lint code
npm run lint
# Format code
npm run format
内存生命周期
-
存储
- 根据重要性为新记忆分配一个层
- 为语义搜索生成嵌入
- 元数据包括时间戳、重要性、来源、标签
-
访问
- 每次访问都会更新访问计数和上次访问时间
- 频繁访问的内存被提升到更高的层次
-
衰变
- 重要性分数随时间衰减(指数衰减)
- 低重要性,旧记忆被降级或删除
-
整合
- 旧记忆按主题分组
- 组被总结成单个记忆
- 原始记忆被删除
-
遗忘
- 基于TTL的过期
- 显式删除
- 按层或时间戳进行批量清理
矢量存储后端
内存中(默认)
最适合:
- 开发和测试
- 小规模部署
- 无基础设施设置
限制:
- 重启后不持久
- 受可用RAM限制
Weaviate
最适合:
- 自托管部署
- 完全控制数据
- 混合搜索功能
设置:
docker run -p 8080:8080 weaviate/weaviate:latest
松果
最适合:
- 生产部署
- 管理服务
- 自动缩放
设置:
# Create index via Pinecone console
# Configure PINECONE_API_KEY and PINECONE_INDEX
嵌入提供者
OpenAI(推荐)
text-embedding-3-small:1536个维度,快速,经济高效- 需要API密钥
- 最佳语义质量
本地(仅限开发)
- 基于TF-IDF的嵌入
- 不需要外部API
- 语义质量较低
- 512个维度
最佳实践
-
使用适当的重要性评分
- 1.0:关键信息(用户偏好、API密钥)
- 0.7-0.9:重要背景(项目细节、目标)
- 0.4-0.6:一般信息(对话、观察)
- 0.1-0.3:瞬态信息(临时注释)
-
标记你的记忆
- 使用描述性标签便于检索
- 包括类别、项目或用户标识符
- 合并后标记“合并”
-
定期合并
- 活动系统每周运行一次
- 根据存储需求调整targetSize
- 检查合并记忆的质量
-
监控内存运行状况
- 使用
memory_stats检查分布情况 - 注意任何层的内存膨胀
- 根据需要调整TTL值
- 使用
故障排除
问题:“矢量存储未初始化”
解决方案: 检查您的环境变量和矢量存储配置。
问题:“OpenAI API错误”
解决方案: 验证您的OPENAI_API_KEY是否有效并具有API信用。
问题:“未找到相关记忆”
解决方案:
- 检查是否存在记忆
memory_list - 试着降低
minRelevance阈值 - 使用更广泛的搜索查询
问题:“内存层已满”
解决方案:
- 跑
memory_consolidate压缩旧记忆 - 在配置中调整TTL值
- 使用
memory_forget清理
许可证
麻省理工学院
贡献
欢迎投稿!请阅读我们的贡献指南,并将pull请求提交到主存储库。
支持
- GitHub问题:https://github.com/anthropics/memory-mcp-server/issues
- MCP文件:https://github.com/modelcontextprotocol