项目记忆库管理服务

一个基于SQLite的模型上下文协议(MCP)服务器,用于管理项目特定的记忆库数据,包括产品背景、决策日志、进度更新等。

  • by telagod
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 TerLand0berver/memory-bank-mcp-server

使用说明

存储库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) 安装。

平台特定注意事项:

  • 窗户: 如果你正确安装了Node.js v18+,并将其添加到系统的PATH环境变量中 npx 命令应直接在命令提示符、PowerShell或Windows终端中工作。

  • macOS/Linux/WSL(Linux的Windows子系统):

    • 检查你的Node.js版本: 跑 node -v.
    • 潜在问题: 系统包管理器提供的默认Node.js版本(如 apt 在Ubuntu/Debian上)可能已经过时(例如v12.x)。跑步 npx 使用旧的Node.js版本可能会失败。
    • 推荐解决方案: 使用节点版本管理器,如 NVM(节点版本管理器) 或 节点源 安装和管理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 18 (或特定版本,如 nvm install 18.17.0)
      4. 使用已安装的版本: nvm use 18
      5. 现在 npx @telagod/memory-bank-mcp-server 命令应该正常工作。

该服务器通常由MCP主机应用程序(如Roo Code)基于其配置(例如。, mcp_settings.json),但是 npx command是使用的底层方法。

集成指南(使用npx)

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

房间代码配置示例

  1. 打开房间代码 mcp_settings.json 配置文件。

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

    {
      "servers": {
        "memory-bank-server": {
          "name": "Memory Bank Server (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 (string,必填):项目的绝对路径。
    • 输出: 包含状态消息和数据库路径的对象。
  2. get_memory_bank_status

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

    • 说明: 从存储体的特定部分读取条目。
    • 输入:
      • project_path (string,必填):项目的绝对路径。
      • section (string,必填):要读取的部分(例如。, product_context, decisions, progress, focus, system_patterns).
      • limit (number,可选,默认值:10):要返回的最大条目数。
      • offset (数字,可选,默认值:0):分页偏移量。
    • 输出: 表示该部分记录的对象数组。
  4. update_memory_bank_entry

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

运作原理

下图说明了存储体MCP服务器的基本工作流程:

graph TD
    Client["Client"] -- "Tool Call\n(e.g., update_entry, section='decisions')" --> MCPServer["Memory Bank MCP Server"]
    MCPServer -- "Parse Request" --> Router{"Router/Logic"}

    subgraph "Database Interaction"
        direction LR
        Router -- "section='product_context'?" --> Table_PC["product_context Table"]
        Router -- "section='decisions'?" --> Table_DEC["decisions Table"]
        Router -- "section='progress'?" --> Table_PROG["progress Table"]
        Router -- "section='focus'?" --> Table_FOC["focus Table"]
        Router -- "section='system_patterns'?" --> Table_SP["system_patterns Table"]

        Table_PC -- "Read/Write Ops" --> SQLiteDB["SQLite DB"]
        Table_DEC -- "Read/Write Ops" --> SQLiteDB
        Table_PROG -- "Read/Write Ops" --> SQLiteDB
        Table_FOC -- "Read/Write Ops" --> SQLiteDB
        Table_SP -- "Read/Write Ops" --> SQLiteDB
    end

    SQLiteDB -- "Operation Result" --> MCPServer
    MCPServer -- "Format & Send Response" --> Client
  1. 客户请求: 客户端(例如RooCode)向存储体MCP服务器发起工具调用请求,通常包括 section 参数(例如。, update_memory_bank_entry 随着 section='decisions').
  2. 服务器解析: 服务器核心接收并解析请求。
  3. 路由逻辑: 服务器的内部路由逻辑根据以下内容确定目标数据库表 section 请求中的参数。
  4. 表交互: 请求被路由到适当的表处理逻辑(product_context, decisions, progress, focus,或 system_patterns).
  5. 数据库操作: 对SQLite数据库中的选定表执行读取或写入操作(memory-bank/memory.db).
  6. 返回结果(DB): SQLite数据库返回操作结果(例如,查询的数据或成功插入的确认)。
  7. 流程和格式: 服务器核心处理从数据库返回的结果,并将其格式化为MCP响应。
  8. 发送响应: 服务器将最终响应发送回客户端。

数据库结构

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

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

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

致谢

这个项目的部分设计和灵感来自 RooFlow 项目。感谢您为MCP生态系统和人工智能辅助开发工作流程提供的想法。