知识图谱存储服务

一个基于Go实现的知识图谱存储服务器,支持标准输入输出和HTTP传输,提供实体、关系和观察数据的管理与快速搜索功能。

  • by viktorprogger
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 viktorprogger/mcp-memory

使用说明

知识图谱内存服务器(Go语言实现)

一个实现Memory MCP服务器功能的Go语言版本,该版本与现有版本功能一致 TypeScript 版本支持stdio和可流式传输的HTTP传输方式,并且可选地支持HTTP的基本认证。数据存储在SQLite中,同时使用BoltDB作为后端的令牌索引以实现快速搜索。

特点/特性

  • 交通stdio,可流式传输的HTTP
  • **认证(或授权)**通过环境变量或文件密钥实现HTTP的可选基本认证
  • 存储用于实体/关系/观测的SQLite数据库,以及用于令牌索引的BoltDB
  • **奇偶校验(或简称为“对等”,但在此上下文中更常指“奇偶校验”)**与TS服务器相同的工具表面

核心概念

实体

实体是知识图谱中的主要节点。每个实体都有一个唯一的 name一 entityType,以及一份列表 observations。

示例:

{
  "name": "John_Smith",
  "entityType": "person",
  "observations": ["Speaks fluent Spanish"]
}

关系

实体之间的有向连接,以主动语态存储。

示例:

{
  "from": "John_Smith",
  "to": "Anthropic",
  "relationType": "works_at"
}

观察结果

附着于实体的原子事实。

示例:

{
  "entityName": "John_Smith",
  "observations": [
    "Speaks fluent Spanish",
    "Graduated in 2019",
    "Prefers morning meetings"
  ]
}

要求

  • 使用 Go 1.25+ 进行本地构建/测试
  • 用于容器化构建/运行的 Docker(可选)

构建和测试(本地)

# Pull dependencies and run tests
go mod tidy
go test ./...

# Build binary
go build -o mcp-memory ./

与Claude桌面版的使用

设置

把它加到你的(清单/计划/等)里 claude_desktop_config.json。

Docker

{
  "mcpServers": {
    "memory": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "claude-memory:/app",
        "ghcr.io/viktorprogger/mcp-memory:latest"
      ]
    }
  }
}

这挂载了一个命名卷 claude-memory 在 /app 所以默认的 SQLite/Bolt 文件(/app/memory.db, /app/memory.db.bolt) 在多次运行中保持一致。

本地(运行go程序)

{
  "mcpServers": {
    "memory": {
      "command": "bash",
      "args": [
        "-lc",
        "cd /absolute/path/to/mcp-memory && go run ."
      ]
    }
  }
}

对于自定义设置(HTTP模式、自定义数据库路径、基本身份验证),请参阅下面的“配置”部分。

配置

环境变量

  • TRANSPORT: stdio (默认)或 http
  • HTTP_ADDRHTTP 监听地址(默认 :8080)
  • HTTP_PATHHTTP 端点路径(默认 /mcp)
  • MEMORY_FILE_PATHSQLite数据库文件的路径(默认 memory.db (在二进制旁边)
  • BOLT_DB_PATHBoltDB 令牌索引文件的路径(默认 <MEMORY_FILE_PATH>.bolt)
  • BASIC_AUTH_USER / BASIC_AUTH_PASSWORD基本认证的凭据
  • BASIC_AUTH_USER_FILE / BASIC_AUTH_PASSWORD_FILE基于文件的凭据(优先于环境变量)

注:

  • 如果任一方 BASIC_AUTH_USER 或者 BASIC_AUTH_PASSWORD (或 *_FILE (变体)设置后,将强制使用基本身份验证。默认情况下(未设置任何值),HTTP 服务在未启用身份验证的情况下运行。

与MCP客户端配合使用

  • MCP 检测器
    • 安装: npx @modelcontextprotocol/inspector
    • 连接: http://localhost:8080/mcp
  • Claude Code / VS Code / Cursor(这些是代码编辑器或开发工具的名称,直接翻译为中文即为:克劳德代码编辑器 / VS 代码编辑器 / Cursor 编辑器,但通常我们直接使用其英文原名,因为这些名称在中文社区中也有广泛认知)
    • 作为HTTP MCP服务器添加,并指定URL http://localhost:8080/mcp
    • 如果启用了基本身份验证,请包含 Authorization: Basic <base64(user:pass)> 客户端配置的头部信息
  • STDIO(标准输入输出)
    • 用作本地生成进程的传输方式,其中主机MCP客户端管理标准输入输出(stdio)

内置工具

  • 创建实体

    • 在知识图谱中创建多个新实体
    • 输入: entities (对象数组)
      • 每个都包含 name (字符串), entityType (字符串), observations (字符串数组)
    • 忽略已命名的实体
  • 创建关系

    • 在实体之间创建多个新的关系
    • 输入: relations (对象数组)
      • 每个都包含 from (字符串), to (字符串), relationType (字符串)
    • 跳过重复关系
  • 添加观测值

    • 向现有实体添加新观察结果
    • 输入: observations (对象数组)
      • 每个都包含 entityName (字符串), contents (字符串数组)
    • 返回每个实体的新增观测值;如果实体不存在,则失败
  • 删除实体

    • 移除实体及其关系
    • 输入: entityNames (字符串数组)
    • 关联关系的级联删除;若实体不存在则静默处理
  • 删除观测数据

    • 从实体中移除特定观测值
    • 输入: deletions (对象数组)
      • 每个都包含 entityName (字符串), observations (字符串数组)
    • 如果不存在观察,则保持沉默
  • 删除关系

    • 从图中移除特定关系
    • 输入: relations (对象数组)
      • 每个都包含 from (字符串), to (字符串), relationType (字符串)
    • 如果关系不存在,则保持沉默
  • 读取图表

    • 阅读整个知识图谱
    • 无输入;返回所有实体和关系
  • 搜索节点

    • 基于查询字符串搜索节点
    • 输入: query (字符串);搜索名称、类型、观测内容
    • 返回匹配的实体及其关系
  • “open_nodes”翻译成中文是“开放节点”

    • 通过名称检索特定节点
    • 输入: names (string[]) 可以翻译为“字符串数组”或“字符串列表”,具体取决于上下文和语境。在编程或数据处理中,这通常表示一个包含多个字符串元素的数组或列表
    • 返回请求的实体及其之间的关系

数据模型

  • 存储在SQLite表中,用于实体、观测和关系。
  • 为了高效搜索,维护了一个基于BoltDB的令牌索引。

关于规范/SDK 版本的说明

  • MCP规范:2025年06月18日
  • TS SDK(@modelcontextprotocol/sdk) 最新:参见npm;项目之前使用过 1.0.1
  • Go SDK: github.com/modelcontextprotocol/go-sdk v1.0.0(版本1.0.0)

许可证

麻省理工学院(MIT)