返回市场
内存银行MCP服务器

内存银行MCP服务器

作者:telagod2 星标更新:2025-04-06

项目介绍

内存库 MCP 服务器

这是一个用于管理项目特定“内存库”数据的模型上下文协议(MCP)服务器。它使用 SQLite 数据库来存储和检索与项目相关的上下文信息,如产品背景、决策日志、进度更新等。

特性

  • 基于项目的: 为每个指定的项目路径维护一个独立的内存库。
  • SQLite 存储: 将数据存储在项目目录中的 memory-bank/memory.db 文件中,提供结构化且高效的访问。
  • 模块化: 将内存库管理逻辑封装到一个独立的 MCP 服务中。
  • 标准化接口: 提供一组 MCP 工具以与内存库进行交互。

使用 npx 运行(推荐)

此服务器已发布到 npm,可以使用 npx 直接运行,无需手动克隆、安装或构建。

运行服务器

运行此服务器的主要方式是使用 npx,这会直接从 npm 注册表执行该包:

npx @telagod/memory-bank-mcp-server

Node.js 版本要求:

  • 需要安装 Node.js 版本 18.0.0 或更高版本 (>=18.0.0)

平台特定注意事项:

  • Windows: 如果正确安装了 Node.js v18+ 并将其添加到了系统 PATH 环境变量中,那么在命令提示符、PowerShell 或 Windows 终端中直接运行 npx 命令应该没有问题。

  • macOS / Linux / WSL (Windows Subsystem for Linux):

    • 检查你的 Node.js 版本: 运行 node -v
    • 潜在问题: 系统包管理器(如 Ubuntu/Debian 的 apt)提供的默认 Node.js 版本可能过时(例如 v12.x)。使用旧版本的 Node.js 运行 npx 很可能会失败。
    • 推荐解决方案: 使用 Node 版本管理器如 NVM (Node Version Manager)NodeSource 来安装和管理 Node.js 版本。系统仓库通常落后于最新的 Node.js 发布版本。
    • 使用 NVM 示例:
      1. 安装 NVM(查看 官方 NVM 仓库 获取最新命令):
        curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
        
      2. 重启终端或运行 NVM 安装程序指示的命令。
      3. 安装 Node.js v18+ 版本:nvm install 1.8(或特定版本如 nvm install 18.17.0
      4. 使用已安装的版本:nvm use 18
      5. 现在,npx @telagod/memory-bank-mcp-server 命令应该能正常工作。

此服务器通常由 MCP 主应用(如 Roo Code)根据其配置(例如 mcp_settings.json)自动启动,但 npx 命令是实际使用的底层方法。

集成指南(使用 npx)

你可以将此内存库 MCP 服务器集成到支持 MCP 的应用程序(如 RooCode)中。建议使用 npx 运行服务器。

RooCode 配置示例

  1. 打开 RooCode 的 mcp_settings.json 配置文件。

  2. servers 对象中添加一个新的服务器配置条目,如下所示。键(例如 "memory-bank-server")是你用来引用此服务器的唯一标识符:

    {
      "servers": {
        "memory-bank-server": {
          "name": "内存库服务器 (npx)",
          "command": "npx",
          "args": [
            "-y",
            "@telagod/memory-bank-mcp-server"
          ],
          "type": "stdio",
          "alwaysAllow": [
            "initialize_memory_bank",
            "get_memory_bank_status",
            "read_memory_bank_section",
            "update_memory_bank_entry"
          ],
          "disabled": false
        }
      }
    }
    
  3. 重要: 确保包名 @telagod/memory-bank-mcp-server 是正确的。如果你使用的是 fork 或其他版本,请相应地更新名称。

  4. 可选参数: 如果服务器支持额外的命令行参数(如配置文件路径),可以在 args 数组中包名之后添加它们作为单独的字符串。

  5. 保存 mcp_settings.json 文件。

  6. 重新启动 RooCode 以加载新的 MCP 服务器。

其他 MCP 客户端

对于其他支持 MCP 的客户端,请参阅其文档了解如何配置通过命令行启动的 stdio 或 SSE 类型的 MCP 服务器。通常,你需要提供 npx 命令及其相应的参数,如上述示例所示。

MCP 工具

服务器提供了以下 MCP 工具:

  1. initialize_memory_bank

    • 描述: 初始化指定项目路径的内存库存储。如果不存在,则创建 memory-bank/ 目录和 memory.db 文件。
    • 输入:
      • project_path (字符串,必需):项目的绝对路径。
    • 输出: 包含状态消息和数据库路径的对象。
  2. get_memory_bank_status

    • 描述: 检查指定项目路径的内存库状态(数据库文件是否存在)。
    • 输入:
      • project_path (字符串,必需):项目的绝对路径。
    • 输出: 包含 exists (布尔值),db_path (字符串) 和 message (字符串) 的对象。
  3. read_memory_bank_section

    • 描述: 读取内存库特定部分的条目。
    • 输入:
      • project_path (字符串,必需):项目的绝对路径。
      • section (字符串,必需):要读取的部分(例如 product_contextdecisionsprogressfocussystem_patterns)。
      • limit (数字,可选,默认值:10):返回的最大条目数。
      • offset (数字,可选,默认值:0):分页偏移量。
    • 输出: 表示该部分记录的数组对象。
  4. update_memory_bank_entry

    • 描述: 向内存库的特定部分添加新条目。
    • 输入:
      • project_path (字符串,必需):项目的绝对路径。
      • section (字符串,必需):要更新的部分(如上所述)。
      • entry_data (对象,必需):新条目的数据。键应匹配部分数据库表的列名(不包括 idtimestamp)。
        • product_context: { "content": "..." }
        • decisions: { "reason": "...", "outcome": "..." }
        • progress: { "update_summary": "...", "status": "..." }
        • focus: { "area": "...", "details": "..." }
        • system_patterns: { "pattern_name": "...", "description": "..." }
    • 输出: 包含状态消息和新插入条目的 ID 的对象。

工作原理

下图展示了内存库 MCP 服务器的基本工作流程:

graph TD
    Client["客户端"] -- "工具调用\n(例如,update_entry, section='decisions')" --> MCPServer["内存库 MCP 服务器"]
    MCPServer -- "解析请求" --> Router{"路由器/逻辑"}

    subgraph "数据库交互"
        direction LR
        Router -- "section='product_context'?" --> Table_PC["product_context 表"]
        Router -- "section='decisions'?" --> Table_DEC["decisions 表"]
        Router -- "section='progress'?" --> Table_PROG["progress 表"]
        Router -- "section='focus'?" --> Table_FOC["focus 表"]
        Router -- "section='system_patterns'?" --> Table_SP["system_patterns 表"]

        Table_PC -- "读写操作" --> SQLiteDB["SQLite 数据库"]
        Table_DEC -- "读写操作" --> SQLiteDB
        Table_PROG -- "读写操作" --> SQLiteDB
        Table_FOC -- "读写操作" --> SQLiteDB
        Table_SP -- "读写操作" --> SQLiteDB
    end

    SQLiteDB -- "操作结果" --> MCPServer
    MCPServer -- "格式并发送响应" --> Client
  1. 客户端请求: 客户端(例如,RooCode)向内存库 MCP 服务器发起工具调用请求,通常包括一个 section 参数(例如,update_memory_bank_entrysection='decisions')。
  2. 服务器解析: 服务器核心接收并解析请求。
  3. 路由逻辑: 服务器内部的路由逻辑根据请求中的 section 参数确定目标数据库表。
  4. 表交互: 请求被路由到适当的表处理逻辑(product_contextdecisionsprogressfocussystem_patterns)。
  5. 数据库操作: 在 SQLite 数据库(memory-bank/memory.db)中选定的表上执行读或写操作。
  6. 返回结果(数据库): SQLite 数据库返回操作的结果(例如,查询的数据或成功插入的确认)。
  7. 处理并格式化: 服务器核心处理从数据库返回的结果,并将其格式化为 MCP 响应。
  8. 发送响应: 服务器将最终响应发送回客户端。

数据库结构

内存库的核心由以下 SQLite 表组成,这些表共同存储关键项目信息:

  • product_context:存储关于产品或项目的高层次背景信息、目标、范围等。这有助于理解项目的“为什么”。
  • decisions:记录重要的技术选择、架构决策、产品方向调整等。包括决策的原因、考虑的选项以及最终结果,为未来的审查提供基础。
  • progress:跟踪开发过程中的关键进展、状态更新、完成的任务或里程碑。这有助于理解项目的“进展情况”。
  • focus:定义当前或近期的开发重点、需要解决的关键问题或需要特别关注的领域。这有助于团队保持一致。
  • system_patterns:记录在代码库或系统架构中识别出的可重用模式、常见解决方案或重要设计原则。这有助于知识保留和代码一致性。

这些表协同工作,形成一个动态的项目“内存库”,捕捉项目的演变和关键知识点。

致谢

该项目的设计和灵感部分来自 RooFlow 项目。感谢为 MCP 生态系统和 AI 辅助开发工作流提供的想法。