一个用于记录和检索来自LLM对话的记忆,并具有智能上下文窗口缓存能力的模型上下文协议(MCP)服务器。
npm install -g @jamesanz/memory-mcp
安装时会自动配置Claude Desktop。
npm install
npm run build
通过环境变量设置MongoDB连接字符串:
export MONGODB_URI="mongodb://localhost:27017"
默认值:mongodb://localhost:27017
启动MCP服务器:
npm start
尝试交互式CLI演示:
npm run cli
CLI演示允许您:
save-memories:将所有记忆保存到数据库中,覆盖现有记忆
memories:要保存的记忆字符串数组llm:LLM的名称(例如,'chatgpt','claude')userId:可选用户标识符get-memories:从数据库中检索所有记忆
add-memories:向数据库添加新记忆而不覆盖现有记忆
memories:要添加的记忆字符串数组llm:LLM的名称(例如,'chatgpt','claude')userId:可选用户标识符clear-memories:从数据库中清除所有记忆
archive-context:归档对话中的上下文消息,带有标签和元数据
conversationId:对话的唯一标识符contextMessages:要归档的上下文消息数组tags:用于归档内容分类的标签llm:LLM的名称(例如,'chatgpt','claude')userId:可选用户标识符retrieve-context:检索对话的相关归档上下文
conversationId:对话的唯一标识符tags:可选过滤标签minRelevanceScore:最小相关性评分(0-1,默认:0.1)limit:返回的最大项目数(默认:10)score-relevance:评估归档上下文相对于当前对话上下文的相关性
conversationId:对话的唯一标识符currentContext:要比较的当前对话上下文llm:LLM的名称(例如,'chatgpt','claude')create-summary:创建上下文项目的摘要并将它们链接到摘要
conversationId:对话的唯一标识符contextItems:要总结的上下文项目summaryText:人类提供的摘要文本llm:LLM的名称(例如,'chatgpt','claude')userId:可选用户标识符get-conversation-summaries:获取特定对话的所有摘要
conversationId:对话的唯一标识符search-context-by-tags:通过标签搜索归档上下文和摘要
tags:要搜索的标签保存所有记忆(覆盖现有记忆):
用户:"将这次对话中的所有记忆保存到MCP服务器"
LLM:[使用save-memories工具保存当前对话记忆]
检索所有记忆:
用户:"从MCP服务器获取我的所有记忆"
LLM:[使用get-memories工具检索存储的记忆]
当窗口满时归档上下文:
用户:"对话变得很长了,归档早期的部分"
LLM:[使用archive-context工具存储旧消息并添加标签]
评估归档内容的相关性:
用户:"归档的内容与我们当前讨论的相关性如何?"
LLM:[使用score-relevance工具评估归档内容]
检索相关归档上下文:
用户:"恢复相关的归档信息"
LLM:[使用retrieve-context工具获取相关归档内容]
为长对话创建摘要:
用户:"总结我们对话的早期部分"
LLM:[使用create-summary工具压缩归档内容]
ConversationOrchestrator类提供自动上下文窗口管理:
import { ConversationOrchestrator } from "./orchestrator.js";
const orchestrator = new ConversationOrchestrator(8000); // 8k字限制
// 添加一条消息(触发自动归档/检索)
const result = await orchestrator.addMessage(
"conversation-123",
"这是对话中的新消息",
"claude",
);
// 检查是否需要归档
if (result.archiveDecision?.shouldArchive) {
await orchestrator.executeArchive(result.archiveDecision, result.state);
}
// 检查是否需要检索
if (result.retrievalDecision?.shouldRetrieve) {
await orchestrator.executeRetrieval(result.retrievalDecision, result.state);
}
type BasicMemory = {
_id: ObjectId;
memories: string[]; // 记忆字符串数组
timestamp: Date; // 记忆保存的时间
llm: string; // LLM标识符(例如,'chatgpt','claude')
userId?: string; // 可选用户标识符
};
type ExtendedMemory = {
_id: ObjectId;
memories: string[]; // 记忆字符串数组
timestamp: Date; // 记忆保存的时间
llm: string; // LLM标识符
userId?: string; // 可选用户标识符
conversationId?: string; // 对话的唯一标识符
contextType?: "active" | "archived" | "summary";
relevanceScore?: number; // 0-1的相关性评分
tags?: string[]; // 分类标签
parentContextId?: ObjectId; // 摘要内容的原始内容引用
messageIndex?: number; // 对话中的顺序
wordCount?: number; // 尺寸追踪
summaryText?: string; // 压缩版本
};
编排系统自动:
要在开发模式下运行:
npm run build
node build/index.js
要运行CLI演示:
npm run cli
ISC