返回市场
内存-mcp

内存-mcp

作者:JamesANZ11 星标更新:2025-10-30

项目介绍

Memory MCP

信任评分

一个用于记录和检索来自LLM对话的记忆,并具有智能上下文窗口缓存能力的模型上下文协议(MCP)服务器。

特性

  • 保存记忆:存储带有时间戳和LLM标识的记忆
  • 检索记忆:获取所有存储的记忆及其详细元数据
  • 添加记忆:追加新记忆而不覆盖现有记忆
  • 清除记忆:移除所有存储的记忆
  • 上下文窗口缓存:归档、检索和总结对话上下文
  • 相关性评分:自动对归档内容的相关性进行评分
  • 基于标签搜索:通过标签分类和搜索上下文
  • 对话编排:外部系统管理上下文窗口缓存
  • MongoDB存储:使用MongoDB数据库进行持久化存储

安装

方案1:从npm安装(推荐)

npm install -g @jamesanz/memory-mcp

安装时会自动配置Claude Desktop。

方案2:从源码安装

  1. 安装依赖项:
npm install
  1. 构建项目:
npm run build

配置

通过环境变量设置MongoDB连接字符串:

export MONGODB_URI="mongodb://localhost:27017"

默认值:mongodb://localhost:27017

使用

运行MCP服务器

启动MCP服务器:

npm start

运行对话编排器演示

尝试交互式CLI演示:

npm run cli

CLI演示允许您:

  • 添加消息以模拟对话
  • 查看当上下文满时自动归档
  • 触发手动归档和检索
  • 创建归档内容的摘要
  • 监控对话状态并获得建议

基本记忆工具

  1. save-memories:将所有记忆保存到数据库中,覆盖现有记忆

    • memories:要保存的记忆字符串数组
    • llm:LLM的名称(例如,'chatgpt','claude')
    • userId:可选用户标识符
  2. get-memories:从数据库中检索所有记忆

    • 不需要参数
  3. add-memories:向数据库添加新记忆而不覆盖现有记忆

    • memories:要添加的记忆字符串数组
    • llm:LLM的名称(例如,'chatgpt','claude')
    • userId:可选用户标识符
  4. clear-memories:从数据库中清除所有记忆

    • 不需要参数

上下文窗口缓存工具

  1. archive-context:归档对话中的上下文消息,带有标签和元数据

    • conversationId:对话的唯一标识符
    • contextMessages:要归档的上下文消息数组
    • tags:用于归档内容分类的标签
    • llm:LLM的名称(例如,'chatgpt','claude')
    • userId:可选用户标识符
  2. retrieve-context:检索对话的相关归档上下文

    • conversationId:对话的唯一标识符
    • tags:可选过滤标签
    • minRelevanceScore:最小相关性评分(0-1,默认:0.1)
    • limit:返回的最大项目数(默认:10)
  3. score-relevance:评估归档上下文相对于当前对话上下文的相关性

    • conversationId:对话的唯一标识符
    • currentContext:要比较的当前对话上下文
    • llm:LLM的名称(例如,'chatgpt','claude')
  4. create-summary:创建上下文项目的摘要并将它们链接到摘要

    • conversationId:对话的唯一标识符
    • contextItems:要总结的上下文项目
    • summaryText:人类提供的摘要文本
    • llm:LLM的名称(例如,'chatgpt','claude')
    • userId:可选用户标识符
  5. get-conversation-summaries:获取特定对话的所有摘要

    • conversationId:对话的唯一标识符
  6. search-context-by-tags:通过标签搜索归档上下文和摘要

    • tags:要搜索的标签

在LLM中的示例用法

基本记忆操作

  1. 保存所有记忆(覆盖现有记忆):

    用户:"将这次对话中的所有记忆保存到MCP服务器"
    LLM:[使用save-memories工具保存当前对话记忆]
    
  2. 检索所有记忆

    用户:"从MCP服务器获取我的所有记忆"
    LLM:[使用get-memories工具检索存储的记忆]
    

上下文窗口缓存工作流程

  1. 当窗口满时归档上下文

    用户:"对话变得很长了,归档早期的部分"
    LLM:[使用archive-context工具存储旧消息并添加标签]
    
  2. 评估归档内容的相关性

    用户:"归档的内容与我们当前讨论的相关性如何?"
    LLM:[使用score-relevance工具评估归档内容]
    
  3. 检索相关归档上下文

    用户:"恢复相关的归档信息"
    LLM:[使用retrieve-context工具获取相关归档内容]
    
  4. 为长对话创建摘要

    用户:"总结我们对话的早期部分"
    LLM:[使用create-summary工具压缩归档内容]
    

对话编排系统

ConversationOrchestrator类提供自动上下文窗口管理:

主要特性

  • 自动归档:当上下文使用达到80%时归档内容
  • 智能检索:当使用率降至30%以下时检索相关内容
  • 相关性评分:使用关键词重叠来评分归档内容的相关性
  • 智能标签:根据内容关键词自动生成标签
  • 对话状态管理:跟踪活跃对话及其上下文
  • 建议:提供最佳上下文管理建议

使用示例

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; // 压缩版本
};

上下文窗口缓存工作流程

编排系统自动:

  1. 监控对话长度和上下文使用情况
  2. 归档内容当上下文使用达到80%时
  3. 评分归档内容相对于当前上下文的相关性
  4. 检索相关内容当使用率降至30%以下时
  5. 创建摘要以压缩非常长的对话

主要特性

  • 对话分组:所有归档内容都链接到特定的对话ID
  • 相关性评分:简单的关键词重叠评分(可以增强语义相似度)
  • 基于标签组织:分类内容以便于检索
  • 摘要链接:保持摘要与原始内容之间的链接
  • 向后兼容性:所有现有的记忆函数无需更改即可工作
  • 自动管理:基本操作不需要人工干预

开发

要在开发模式下运行:

npm run build
node build/index.js

要运行CLI演示:

npm run cli

许可证

ISC