持久内存管理服务器

一个基于TypeScript的Model Context Protocol (MCP)服务器,提供使用SQLite数据库的持久内存管理功能,支持MCP工具和RESTful API端点。

  • by berthojoris
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 berthojoris/memory-server-mcp

使用说明

内存服务器-用于持久内存管理的MCP服务器

基于TypeScript的模型上下文协议(MCP)服务器,使用SQLite数据库提供持久内存管理。该服务器公开MCP工具和RESTful API端点,用于存储和检索带有元数据的会话上下文。

特性

  • SQLite数据库集成:具有自动模式创建和索引功能的持久存储
  • MCP协议合规性:完全支持MCP工具注册和执行
  • RESTful API:用于程序化访问的HTTP端点
  • TypeScript:完全类型安全和现代异步/等待模式
  • 日志记录:具有可配置级别的全面日志记录
  • 错误处理:强大的错误处理和输入验证
  • 数据库连接池:优化了数据库性能
  • 模块化架构:明确区分关注点

数据库模式

服务器会自动创建具有以下模式的SQLite数据库:

CREATE TABLE memory (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  content TEXT NOT NULL,
  timestamp TEXT NOT NULL,
  session_id TEXT NOT NULL,
  content_hash TEXT NOT NULL UNIQUE,
  metadata TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Indexes for performance optimization
CREATE INDEX idx_session_id ON memory(session_id);
CREATE INDEX idx_timestamp ON memory(timestamp);
CREATE INDEX idx_content_hash ON memory(content_hash);
CREATE INDEX idx_created_at ON memory(created_at);

安装

  1. 克隆或创建项目目录
  2. 安装依赖项:
npm install
  1. 构建TypeScript代码:
npm run build

用法

MCP模式(标准传输)

要使用stdio传输作为MCP服务器运行:

npm start -- --mcp
# or
MCP_MODE=true npm start

HTTP服务器模式

要作为独立的HTTP服务器运行,请执行以下操作:

npm start

服务器将于启动 http://localhost:3000 默认情况下。

环境变量

  • PORT:HTTP服务器端口(默认值:3000)
  • HOST:HTTP服务器主机(默认:localhost)
  • DB_PATH:SQLite数据库文件路径(默认:./data/memory.db)
  • DB_MAX_CONNECTIONS:最大数据库连接数(默认值:10)
  • LOG_LEVEL:日志记录级别(调试、信息、警告、错误)(默认值:信息)
  • CORS_ORIGIN:逗号分隔的允许CORS源列表
  • MCP_MODE:设置为“true”以在MCP模式下运行
  • NODE_ENV:环境(开发、生产)

MCP工具

服务器提供以下MCP工具:

save_memory

使用元数据将内容保存到内存中。

参数:

  • content (string,必填):要保存的内容
  • session_id (字符串,必填):用于分组的会话标识符
  • metadata (对象,可选):其他元数据

例子:

{
  "content": "User prefers dark mode and uses TypeScript",
  "session_id": "user-123-session-1",
  "metadata": {
    "category": "preferences",
    "importance": "high"
  }
}

read_memory

使用可选筛选检索存储的内存。

参数:

  • session_id (字符串,可选):按会话ID筛选
  • start_date (字符串,可选):从日期筛选(ISO格式)
  • end_date (字符串,可选):过滤到日期(ISO格式)
  • limit (数字,可选):要返回的最大记录数(1-1000)
  • offset (数字,可选):分页时要跳过的记录

get_memory_count

获取内存记录的总数。

参数:

  • session_id (字符串,可选):特定会话的计数

删除记忆

删除特定的内存记录。

参数:

  • id (number,必填):要删除的内存记录的ID

REST API端点

POST/api/内存/保存

保存新的内存记录。

请求正文:

{
  "content": "Content to save",
  "session_id": "session-identifier",
  "metadata": {
    "key": "value"
  }
}

GET/api/内存/读取

使用可选查询参数读取内存记录:

  • session_id:按会话筛选
  • start_date:从日期筛选
  • end_date:过滤到日期
  • limit:最大记录数
  • offset:分页偏移

GET/api/内存/计数

使用可选功能获取内存计数 session_id 查询参数。

DELETE/api/内存/:id

按ID删除特定内存记录。

GET/api/内存/健康

健康检查端点。

MCP服务器配置

要将此服务器与MCP客户端一起使用,请将其添加到MCP设置中:

{
  "mcpServers": {
    "memory-server": {
      "command": "node",
      "args": ["path/to/memory-server/build/index.js", "--mcp"],
      "env": {
        "DB_PATH": "path/to/memory.db",
        "LOG_LEVEL": "info"
      }
    }
  }
}

发展

脚本

  • npm run build:将TypeScript编译为JavaScript
  • npm run dev:观看模式用于开发
  • npm start:启动服务器

项目结构

memory-server/
├── src/
│   ├── index.ts          # Main server entry point
│   ├── database.ts       # SQLite database operations
│   ├── api.ts           # REST API routes
│   ├── mcp-tools.ts     # MCP tool handlers
│   ├── logger.ts        # Logging utility
│   └── types.ts         # TypeScript interfaces
├── build/               # Compiled JavaScript (generated)
├── data/               # Database files (generated)
├── package.json
├── tsconfig.json
└── README.md

错误处理

服务器包括全面的错误处理:

  • 所有端点和工具的输入验证
  • 数据库连接错误处理
  • SIGTERM/SIGINT上的优雅关机
  • 详细的错误记录
  • 正确的HTTP状态代码

性能优化

  • 频繁查询列上的数据库索引
  • 数据库操作的连接池
  • 高效的查询模式
  • 内容哈希以防止重复
  • 可配置的限制和分页

安全考虑

  • 输入验证和净化
  • CORS配置
  • 内容哈希验证
  • 通过参数化查询防止SQL注入
  • 生产中的错误消息清理

许可证

MIT许可证