返回市场
mcp-duckdb内存服务器

mcp-duckdb内存服务器

作者:IzumiSy49 星标更新:2025-11-03

项目介绍

MCP DuckDB 知识图谱内存服务器

测试 smithery 徽章 NPM 版本 NPM 许可证

这是官方知识图谱内存服务器的一个分支版本。

<a href="https://glama.ai/mcp/servers/4mqwh1toao"> <img width="380" height="200" src="https://gips0.baidu.com/it/u=4241046204,4036685100&fm=3081&app=3081&f=PNG?w=760&h=400" alt="DuckDB 知识图谱内存服务器 MCP 服务器" /> </a>

安装

通过 Smithery 安装

要通过 Smithery 自动安装 DuckDB 知识图谱内存服务器到 Claude Desktop:

npx -y @smithery/cli install @IzumiSy/mcp-duckdb-memory-server --client claude

手动安装

否则,手动在你的 claude_desktop_config.json 文件中添加 @IzumiSy/mcp-duckdb-memory-serverMEMORY_FILE_PATH 是可选的)

{
  "mcpServers": {
    "graph-memory": {
      "command": "npx",
      "args": [
        "-y",
        "@izumisy/mcp-duckdb-memory-server"
      ],
      "env": {
        "MEMORY_FILE_PATH": "/path/to/your/memory.data"
      }
    }
  }
}

该路径上存储的数据是一个 DuckDB 数据库文件。

Docker

构建

docker build -t mcp-duckdb-graph-memory .

运行

docker run -dit mcp-duckdb-graph-memory

使用方法

使用以下示例指令:

对于每次交互,请遵循以下步骤:

1. 用户识别:
   - 假设你正在与默认用户交互。
   - 如果尚未识别默认用户,请主动尝试进行识别。

2. 内存检索:
   - 总是以说“回忆中...”开始聊天,并从你的知识图谱中搜索相关信息。
   - 根据用户的词语创建一个搜索查询,并从“记忆”中搜索相关内容。如果没有任何匹配项,首先尝试分解查询中的词语(例如,“A B”变为“A”和“B”)。
   - 总是将你的知识图谱称为你的“记忆”。

3. 内存
   - 在与用户交谈时,注意任何新的信息,这些信息可能属于以下类别:
     a) 基本身份(年龄、性别、位置、职位、教育水平等)
     b) 行为(兴趣、习惯等)
     c) 偏好(沟通风格、首选语言等)
     d) 目标(目标、目标、抱负等)
     e) 关系(个人和职业关系,最多三度分离)

4. 内存更新:
   - 如果在交互过程中收集了任何新信息,请按照以下方式更新你的记忆:
     a) 为重复出现的组织、人员和重要事件创建实体。
     b) 使用关系将它们连接到当前实体。
     c) 将关于它们的事实存储为观察。

动机

该项目通过用 DuckDB 替换后端来增强原始 MCP 知识图谱内存服务器。

为什么选择 DuckDB?

原始 MCP 知识图谱内存服务器使用 JSON 文件作为数据存储并执行内存搜索。虽然这种方法对小型数据集工作良好,但它存在一些挑战:

  1. 性能:随着数据集的增长,内存搜索性能下降。
  2. 可扩展性:处理大量实体和关系时,内存使用显著增加。
  3. 查询灵活性:实现复杂查询和条件搜索困难。
  4. 数据完整性:确保事务和 CRUD 操作的原子性具有挑战性。

选择 DuckDB 来解决这些问题:

  • 快速查询处理:DuckDB 优化了分析查询,在大型数据集中表现良好。
  • SQL 接口:可以使用标准 SQL 执行复杂的查询。
  • 事务支持:支持事务处理以维护数据完整性。
  • 索引能力:允许创建索引来提高搜索性能。
  • 嵌入式数据库:可以在应用程序内部工作,无需外部数据库服务器。

实现细节

此实现使用 DuckDB 作为后端存储系统,重点关注两个关键方面:

数据库结构

知识图谱存储在一个关系数据库结构中,如下所示:

erDiagram
    ENTITIES {
        string name PK
        string entityType
    }
    OBSERVATIONS {
        string entityName FK
        string content
    }
    RELATIONS {
        string from_entity FK
        string to_entity FK
        string relationType
    }

    ENTITIES ||--o{ OBSERVATIONS : "拥有"
    ENTITIES ||--o{ RELATIONS : "来自"
    ENTITIES ||--o{ RELATIONS : "到"

这种模式设计允许高效地存储和检索知识图谱组件,同时保持实体、观察和关系之间的联系。

模糊搜索实现

实现结合了 SQL 查询和 Fuse.js 以提供灵活的实体搜索:

  • DuckDB SQL 查询从数据库中检索基础数据。
  • Fuse.js 提供了在检索数据上的模糊匹配能力。
  • 这种混合方法允许进行结构化查询和灵活的文本匹配。
  • 搜索结果包括精确匹配和部分匹配,按相关性排序。

开发

设置

pnpm install

测试

pnpm test

许可证

本项目根据 MIT 许可证发布 - 查看 LICENSE 文件获取详细信息。