智能对话存储服务

Brain MCP 是一个基于 DuckDB 的智能对话记忆存储服务器,支持本地文件、S3 和 Google Cloud Storage 等多种存储后端,提供对话上下文存储、检索和长期记忆整合功能。

  • by yonidavidson
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 yonidavidson/brain-mcp

使用说明

Brain MCP-内存存储MCP服务器

一种使用DuckDB提供智能对话内存存储的模型上下文协议(MCP)服务器。此服务器存储和检索您上次对话的上下文,支持多个存储后端,包括本地文件、S3和Google Cloud storage。

特性

  • 🧠 智能内存存储:自动维护最近2个对话的上下文
  • 💾 DuckDB后端:使用DuckDB实现高效的数据湖存储
  • ☁️ 多后端支持:在本地或云中存储数据(S3、GCS)
  • 🔄 会话管理:跟踪和检索多个对话
  • 🔍 强大的搜索功能:按文本、主题或日期范围搜索记忆
  • 🌙 自动内存整合:夜班工人使用LLM将短期记忆巩固为长期见解
  • 🤖 OpenAI兼容:与OpenAI API和兼容服务(LocalAI、Ollama等)配合使用
  • 🚀 易于集成:无缝集成的标准MCP协议

安装

npm install
npm run build

配置

服务器通过以下方式支持不同的存储后端 STORAGE_URL 环境变量:

基于文件的存储(默认)

export STORAGE_URL="file://brain-memory.duckdb"

S3存储

export STORAGE_URL="s3://my-bucket/brain-memory"
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="us-east-1"

谷歌云存储

export STORAGE_URL="gcs://my-bucket/brain-memory"
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/credentials.json"

内存整合(可选但推荐)

该服务器包括一个自动夜间工作器,它使用LLM将短期记忆整合为长期见解:

# Required for consolidation
export OPENAI_API_KEY="your-api-key"

# Optional: Use OpenAI-compatible services
export OPENAI_BASE_URL="https://api.openai.com/v1"  # Or your compatible API
export OPENAI_MODEL="gpt-5-mini"  # Default model

# Optional: Customize consolidation schedule (cron format)
export CONSOLIDATION_SCHEDULE="0 0 * * *"  # Default: midnight daily

# Optional: Disable consolidation
export ENABLE_CONSOLIDATION="false"  # Default: true

您也可以复制 .env.example 到 .env 并在那里配置您的设置。

用法

运行服务器

npm start

或者用于自动重建的开发:

npm run dev

使用Claude Desktop进行配置

将此添加到您的Claude Desktop配置文件中:

MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "brain-mcp": {
      "command": "node",
      "args": ["/path/to/brain-mcp/dist/index.js"],
      "env": {
        "STORAGE_URL": "file://brain-memory.duckdb",
        "OPENAI_API_KEY": "your-api-key-here",
        "OPENAI_MODEL": "gpt-5-mini"
      }
    }
  }
}

可用工具

1. store_memory

将消息存储在对话记忆中。

参数:

  • role (必填):消息发送者的角色-“用户”、“助理”或“系统”
  • content (必填):要存储的消息内容
  • new_conversation (可选):是否开始新对话(默认值:false)

例子:

{
  "role": "user",
  "content": "What is the weather like today?",
  "new_conversation": false
}

2. get_memory

从最近N个对话中检索存储的对话记忆。

参数:

  • conversation_count (可选):要检索的最近对话数(默认值:2,最大值:10)

例子:

{
  "conversation_count": 2
}

答复:

{
  "success": true,
  "conversationCount": 2,
  "currentConversationId": "conv-1234567890",
  "conversations": [
    {
      "conversationId": "conv-1234567890",
      "messageCount": 4,
      "messages": [
        {
          "role": "user",
          "content": "Hello!",
          "timestamp": "2024-01-01T12:00:00.000Z"
        }
      ]
    }
  ]
}

3. new_conversation

使用新的对话ID开始新的对话。

参数: 无

示例响应:

{
  "success": true,
  "message": "New conversation started",
  "conversationId": "conv-1234567890"
}

4. get_long_term_memory

检索由整合工作人员创建的整合长期记忆。

参数:

  • limit (可选):要检索的内存数量(默认值:10,最大值:50)

示例响应:

{
  "success": true,
  "count": 5,
  "memories": [
    {
      "summary": "Discussion about implementing memory systems with DuckDB...",
      "topics": ["DuckDB", "Memory Systems", "MCP Servers"],
      "keyInsights": [
        "DuckDB provides efficient storage for conversation data",
        "Memory consolidation helps maintain context over time"
      ],
      "consolidatedFrom": "Conversations from 2024-01-15",
      "timestamp": "2024-01-16T00:00:00.000Z"
    }
  ]
}

5. consolidate_memory

手动触发内存整合(通常在夜间自动运行)。

参数: 无

示例响应:

{
  "success": true,
  "message": "Memory consolidation completed successfully"
}

6. search_memory

使用灵活的过滤器搜索短期和长期记忆。

参数:

  • query (可选):在对话内容、摘要和见解中搜索的文本
  • topics (可选):过滤长期记忆的主题数组
  • start_date (可选):ISO格式的开始日期(例如,“2024-01-01T00:00:00.000Z”)
  • end_date (可选):ISO格式的结束日期(例如,“2024-12-31T23:59:59.999Z”)
  • memory_type (可选):要搜索的内存类型-“短期”、“长期”或“两者”(默认值:“两者”)
  • limit (可选):每种内存类型的最大结果数(默认值:20,最大值:100)

请求示例:

{
  "query": "DuckDB",
  "topics": ["databases", "storage"],
  "memory_type": "both",
  "limit": 10
}

示例响应:

{
  "success": true,
  "filters": {
    "query": "DuckDB",
    "topics": ["databases", "storage"],
    "dateRange": "all time",
    "memoryType": "both"
  },
  "shortTermResults": {
    "count": 5,
    "conversations": [
      {
        "conversationId": "conv-1234567890",
        "role": "user",
        "content": "Tell me about DuckDB performance...",
        "timestamp": "2024-01-15T14:30:00.000Z"
      }
    ]
  },
  "longTermResults": {
    "count": 3,
    "memories": [
      {
        "summary": "Discussion about DuckDB as a storage solution...",
        "topics": ["DuckDB", "databases", "storage"],
        "keyInsights": [
          "DuckDB provides excellent analytical query performance",
          "Embedded database with no server required"
        ],
        "consolidatedFrom": "Conversations from 2024-01-14",
        "timestamp": "2024-01-15T00:00:00.000Z"
      }
    ]
  }
}

建筑

内存整合的工作原理

Brain MCP实现了一个受人类记忆启发的双层记忆系统:

  1. 短期记忆(对话表)

    • 存储最近的对话消息
    • 快速访问正在进行的对话中的上下文
    • 合并后自动清除
  2. 长期记忆(长期记忆表)

    • 存储整合的见解和摘要
    • 通过LLM分析短期记忆创建
    • 无限期地保存重要信息
  3. 夜间整合过程

    • 计划工人在午夜运行(可配置)
    • 检索当天的所有对话
    • 使用配置的LLM模型分析它们
    • 提取关键见解、主题并创建摘要
    • 将整合存储在长期记忆中
    • 清除短期记忆以释放空间

这种方法确保:

  • 最近的上下文始终可用
  • 重要信息长期保存
  • 存储仍然高效
  • 知识是有组织和可搜索的

存储后端

服务器使用DuckDB作为其存储引擎,支持:

  1. 本地文件存储:数据存储在本地DuckDB文件中
  2. S3存储:使用DuckDB的httpfs扩展将数据持久化到Amazon S3
  3. GCS存储:使用DuckDB的httpfs扩展将数据持久化到谷歌云存储

数据模式

短期记忆(对话):

CREATE TABLE conversations (
  id VARCHAR PRIMARY KEY,
  timestamp BIGINT NOT NULL,
  role VARCHAR NOT NULL,
  content TEXT NOT NULL,
  conversation_id VARCHAR NOT NULL
);

长期记忆:

CREATE TABLE long_term_memory (
  id VARCHAR PRIMARY KEY,
  timestamp BIGINT NOT NULL,
  summary TEXT NOT NULL,
  topics TEXT NOT NULL,          -- JSON array
  key_insights TEXT NOT NULL,    -- JSON array
  consolidated_from TEXT NOT NULL
);

内存管理

  • 服务器使用唯一的对话ID自动跟踪对话
  • 默认情况下,它维护并可以检索最后2个对话
  • 您可以使用以下工具检索最多10个最近的对话 get_memory 工具
  • 消息按时间戳排序,以便准确重建对话

发展

项目结构

brain-mcp/
├── src/
│   ├── index.ts          # Main MCP server implementation
│   ├── storage.ts        # Storage manager with DuckDB integration
│   └── consolidation.ts  # Memory consolidation worker
├── dist/                 # Compiled JavaScript (generated)
├── package.json
├── tsconfig.json
├── .env.example
└── README.md

建筑

npm run build

类型检查

该项目使用启用了严格类型检查的TypeScript。

环境变量

变量 描述 默认值
存储配置
STORAGE_URL 存储后端URL file://brain-memory.duckdb
AWS_ACCESS_KEY_ID AWS访问密钥(适用于S3) -
AWS_SECRET_ACCESS_KEY AWS密钥(适用于S3) -
AWS_REGION AWS区域(适用于S3) us-east-1
GOOGLE_APPLICATION_CREDENTIALS GCS凭据路径 -
整合配置
OPENAI_API_KEY OpenAI API密钥(合并需要) -
OPENAI_BASE_URL 与OpenAI兼容的API终结点 https://api.openai.com/v1
OPENAI_MODEL 用于合并的模型 gpt-5-mini
CONSOLIDATION_SCHEDULE Cron合并时间表 0 0 * * * (午夜)
ENABLE_CONSOLIDATION 启用/禁用自动合并 true

用例

基本用法

存储和检索最近的对话以获取即时上下文。

长期知识库

自动构建一个可搜索的知识库,其中包含您所有对话中的重要见解和信息。

多用户系统

为不同的用户或环境使用不同的存储后端。

离线优先,云同步

使用本地存储进行快速访问,并定期同步到云存储进行备份和共享。

自定义合并计划

根据您的需求,每天、每周或按需多次运行整合。

许可证

麻省理工学院

贡献

欢迎投稿!请随时提交拉取请求。