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

内存-mcp服务器-go

作者:okooo5km81 星标更新:2025-09-12

项目介绍

技术文档摘要

内存 MCP 服务器(Go)

这是一个提供知识图谱管理功能的模型上下文协议服务器。该服务器使大语言模型能够创建、读取、更新和删除持久知识图谱中的实体和关系,帮助AI助手在对话之间维持记忆。这是官方TypeScript 内存 MCP 服务器的 Go 实现。

Go 平台 许可证

✨ 特性

  • 高性能存储:使用 SQLite 后端并自动迁移 JSONL 以实现最佳性能
  • 知识图谱管理:维护实体及其关系的持久图谱
  • 实体管理:创建、检索、更新和删除具有自定义类型的实体
  • 关系跟踪:定义和管理实体之间的主动语态关系
  • 观察系统:随着时间添加和移除关于实体的观察
  • 高级搜索:快速搜索,并从 FTS5 自动回退到基本搜索
  • 无缝迁移:从 JSONL 到 SQLite 的自动升级,无需用户干预
  • 内存高效:优化了存储空间和运行时内存使用
  • 灵活传输模式:支持 stdio、SSE(带保活)和可流式传输的 HTTP 传输
  • 健壮性:工具处理器中的恐慌恢复;客户端驱动生成的可选采样能力声明
  • 跨平台:在 Linux、macOS 和 Windows 上工作,纯 Go SQLite(不需要 CGO)

可用工具

  • create_entities - 在知识图谱中创建多个新实体

    • entities(数组,必需):要创建的实体对象数组
      • name(字符串):实体名称
      • entityType(字符串):实体类型
      • observations(字符串数组):与实体相关的观察
  • create_relations - 创建实体之间的多个新关系

    • relations(数组,必需):关系对象数组
      • from(字符串):关系开始的实体名称
      • to(字符串):关系结束的实体名称
      • relationType(字符串):关系类型(主动语态)
  • add_observations - 向现有实体添加新的观察

    • observations(数组,必需):观察添加数组
      • entityName(字符串):要添加观察的实体名称
      • contents(字符串数组):要添加的观察
  • delete_entities - 删除多个实体及其相关关系

    • entityNames(数组,必需):要删除的实体名称数组
  • delete_observations - 从实体中删除特定观察

    • deletions(数组,必需):观察删除数组
      • entityName(字符串):包含观察的实体名称
      • observations(字符串数组):要删除的观察
  • delete_relations - 从知识图谱中删除多个关系

    • relations(数组,必需):要删除的关系对象数组
      • from(字符串):源实体名称
      • to(字符串):目标实体名称
      • relationType(字符串):关系类型
  • read_graph - 读取整个知识图谱

    • 不需要参数
  • search_nodes - 根据查询搜索知识图谱中的节点

    • query(字符串,必需):匹配实体名称、类型和观察的搜索查询
  • open_nodes - 通过名称打开知识图谱中的特定节点

    • names(数组,必需):要检索的实体名称数组

安装

选项 1:快速安装(macOS/Linux)

使用单个命令安装最新版本:

curl -fsSL https://raw.githubusercontent.com/okooo5km/memory-mcp-server-go/main/scripts/install.sh | bash

选项:

  • 指定版本:curl -fsSL https://raw.githubusercontent.com/okooo5km/memory-mcp-server-go/main/scripts/install.sh | bash -s -- -v v0.2.3
  • 自定义安装目录:... | bash -s -- -d /usr/local/bin

注意:Windows 用户,请参见下面的 Windows 部分。

选项 2:下载预构建二进制文件

GitHub 发布页面 下载适用于您平台的最新预构建二进制文件:

GitHub 发布页面 下载适用于您平台的二进制文件,并按照以下安装说明进行操作。

<details> <summary><b>macOS 安装</b></summary>

macOS 带有 Apple Silicon

# 下载 arm64 构建 (.tgz)
curl -L https://github.com/okooo5km/memory-mcp-server-go/releases/latest/download/memory-mcp-server-go-darwin-arm64.tgz -o memory-mcp-server.tgz
tar -xzf memory-mcp-server.tgz
# 解压后的二进制文件是平台命名的(例如,memory-mcp-server-go-darwin-arm64)
BIN=$(tar -tzf memory-mcp-server.tgz | head -1)
chmod +x "$BIN"

# 移除检疫属性以避免安全警告
xattr -d com.apple.quarantine "$BIN" || true

# 使用统一名称安装到本地 bin 目录
mkdir -p ~/.local/bin
mv "$BIN" ~/.local/bin/memory-mcp-server-go
rm memory-mcp-server.tgz

macOS 带有 Intel 处理器

# 下载 x86_64 构建 (.tgz)
curl -L https://github.com/okooo5km/memory-mcp-server-go/releases/latest/download/memory-mcp-server-go-darwin-amd64.tgz -o memory-mcp-server.tgz
tar -xzf memory-mcp-server.tgz
BIN=$(tar -tzf memory-mcp-server.tgz | head -1)
chmod +x "$BIN"

# 移除检疫属性以避免安全警告
xattr -d com.apple.quarantine "$BIN" || true

# 使用统一名称安装到本地 bin 目录
mkdir -p ~/.local/bin
mv "$BIN" ~/.local/bin/memory-mcp-server-go
rm memory-m-服务器.tgz
<!-- 当前发布不提供通用二进制文件。--> </details> <details> <summary><b>Linux 安装</b></summary>

Linux 在 x86_64(最常见)

# 下载 amd64 构建 (.tgz)
curl -L https://github.com/okooo5km/memory-mcp-server-go/releases/latest/download/memory-mcp-server-go-linux-amd64.tgz -o memory-mcp-server.tgz
tar -xzf memory-mcp-server.tgz
BIN=$(tar -tzf memory-mcp-server.tgz | head -1)
chmod +x "$BIN"

# 使用统一名称安装到本地 bin 目录
mkdir -p ~/.local/bin
mv "$BIN" ~/.local/bin/memory-mcp-server-go
rm memory-mcp-server.tgz

Linux 在 ARM64(例如,Raspberry Pi 4,AWS Graviton)

# 下载 arm64 构建 (.tgz)
curl -L https://github.com/okooo5km/memory-mcp-server-go/releases/latest/download/memory-mcp-server-go-linux-arm64.tgz -o memory-mcp-server.tgz
tar -xzf memory-mcp-server.tgz
BIN=$(tar -tzf memory-mcp-server.tgz | head -1)
chmod +x "$BIN"

# 使用统一名称安装到本地 bin 目录
mkdir -p ~/.local/bin
mv "$BIN" ~/.local/bin/memory-mcp-server-go
rm memory-mcp-server.tgz
</details> <details> <summary><b>Windows 安装</b></summary>

Windows 在 x86_64(最常见)

  • 下载 Windows AMD64 版本
  • 解压缩 ZIP 文件
  • memory-mcp-server-go.exe 移动到 PATH 中的位置

Windows 在 ARM64(例如,Windows on ARM 设备)

  • 下载 Windows ARM64 版本
  • 解压缩 ZIP 文件
  • memory-mcp-server-go.exe 移动到 PATH 中的位置
</details>

确保安装目录在您的 PATH 中:

  • macOS/Linux:将 export PATH="$HOME/.local/bin:$PATH" 添加到您的 shell 配置文件(.bashrc、.zshrc 等)
  • Windows:通过系统属性 > 环境变量对话框将目录添加到系统 PATH

可选地验证校验和(推荐):发布包括 SHA256SUMS.txt

# macOS/Linux 示例
cd ~/.local/bin/..  # 您下载工件的位置
shasum -a 256 -c SHA256SUMS.txt | grep memory-mcp-server-go || true

选项 3:从源代码构建

  1. 克隆仓库:

    git clone https://github.com/okooo5km/memory-mcp-server-go.git
    cd memory-mcp-server-go
    
  2. 构建项目:

    使用 Make(推荐):

    # 为当前平台构建
    make build
    
    # 一次性构建所有平台(纯 Go SQLite,无 CGO)
    make build-all
    
    # 为所有平台创建分发包
    make dist
    

    二进制文件将放置在 .build 目录中。所有构建都使用纯 Go SQLite 以获得最大兼容性。

    直接使用 Go:

    go build
    
  3. 安装二进制文件:

    # 安装到用户目录(推荐,无需 sudo)
    mkdir -p ~/.local/bin
    cp memory-mcp-server-go ~/.local/bin/
    

    确保 ~/.local/bin 在您的 PATH 中,通过添加到您的 shell 配置文件:

    echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc  # 或 ~/.bashrc
    source ~/.zshrc  # 或 source ~/.bashrc
    

命令行参数

服务器支持以下命令行参数:

  • -t, --transport:传输类型:stdiossehttp(默认为 stdio
  • -m, --memory:存储知识图谱的自定义路径(可选)
  • -p, --port:SSE 传输的端口号(默认为 8080)
  • --storage:强制存储类型(sqlite 或 jsonl,未指定则自动检测)
  • --auto-migrate:启用 JSONL 到 SQLite 的自动迁移(默认启用)
  • --migrate:从 JSONL 文件迁移到 SQLite(独立操作)
  • --migrate-to:迁移的目标 SQLite 文件
  • --dry-run:执行迁移的干运行而不做更改
  • --force:在迁移期间强制覆盖目标文件
  • 可流式传输的 HTTP 选项:
    • --http-endpoint, --http_ep:HTTP 端点路径(默认:/mcp
    • --http-heartbeat:心跳间隔,例如 30s1m(默认:30s
    • --http-stateless:以无状态模式运行 HTTP 传输(无服务器端会话跟踪)
  • 认证:
    • --auth-bearer <token>:要求 Authorization: Bearer <token> 对于 SSE 和可流式传输的 HTTP 端点

示例用法:

# 使用默认设置(stdio 传输,自动检测存储)
memory-mcp-server-go

# 指定自定义内存文件位置(自动迁移启用)
memory-mcp-server-go --memory /path/to/your/memory.json

# 强制使用 SQLite 存储(跳过自动检测)
memory-mcp-server-go --storage sqlite --memory /path/to/your/data.db

# 手动迁移 JSONL 到 SQLite
memory-mcp-server-go --migrate /path/to/memory.json --migrate-to /path/to/memory.db

# 使用特定端口的 SSE 传输
memory-mcp-server-go --transport sse --port 9000

# 使用可流式传输的 HTTP 传输,带有自定义端点和心跳
memory-mcp-server-go --transport http --port 8080 --http-endpoint /mcp --http-heartbeat 45s

# 启用 Bearer 认证(适用于 SSE/HTTP)
memory-mcp-server-go --transport http --port 8080 --http-endpoint /mcp --auth-bearer mytoken

可流式传输的 HTTP 使用(cURL 示例)

  1. 初始化会话(响应头将包含 Mcp-Session-Id):
curl -i -X POST http://localhost:8080/mcp \
  -H 'Content-Type: application/json' \
  # 如果启动时使用了 --auth-bearer,则包含以下头部
  -H 'Authorization: Bearer mytoken' \
  -d '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"initialize",
    "params":{
      "protocolVersion":"2025-03-26",
      "capabilities":{}
    }
  }'
  1. 监听服务器消息(通知、ping、采样请求):
curl -N http://localhost:8080/mcp \
  -H 'Authorization: Bearer mytoken' \
  -H 'Mcp-Session-Id: <粘贴步骤 1 中的会话 ID>'
  1. 调用工具(示例:search_nodes):
curl -s http://localhost:8080/mcp \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer mytoken' \
  -H 'Mcp-Session-Id: <粘贴步骤 1 中的会话 ID>' \
  -d '{
    "jsonrpc":"2.0",
    "id":2,
    "method":"tools/call",
    "params":{
      "name":"search_nodes",
      "arguments":{"query":"idea"}
    }
  }'
  1. 终止会话:
curl -X DELETE http://localhost:8080/mcp \
  -H 'Authorization: Bearer mytoken' \
  -H 'Mcp-Session-Id: <粘贴步骤 1 中的会话 ID>'

使用 Bearer 的 SSE(可选)

当运行 --transport sse 并且 --auth-bearer mytoken

# 连接 SSE 流
curl -N http://localhost:8080/sse -H 'Authorization: Bearer mytoken'

# 发送 JSON-RPC 消息
curl -s -X POST http://localhost:8080/message \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer mytoken' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{}}}'

安全性和部署

  • 总是在 TLS 后部署。在反向代理(如 Nginx/Caddy/Traefik)终止 HTTPS,并将此服务器绑定到 localhost。
  • 在任何非本地环境中都需要认证:--auth-bearer $(openssl rand -hex 32) 并定期轮换。
  • 确保您的代理将 Authorization 头转发到后端。示例(Nginx):
location /mcp {
  proxy_set_header Authorization $http_authorization;
  proxy_pass http://127.0.0.1:8080/mcp;
}
location /sse {
  proxy_set_header Authorization $http_authorization;
  proxy_pass http://127.0.0.1:8080/sse;
}
location /message {
  proxy_set_header Authorization $http_authorization;
  proxy_pass http://127.0.0.1:8080/message;
}
  • SSE 端点设置 Access-Control-Allow-Origin: *。不要依赖浏览器原点检查;在代理和服务器上强制认证。
  • 限制暴露:仅打开所需端口,以非 root 用户身份运行,并在代理中启用速率限制,如果服务不受信任的客户端。

存储系统

自动存储升级

内存 MCP 服务器自动检测并升级您的存储以实现最佳性能:

  • 新安装:默认使用 SQLite 以获得最佳性能
  • 现有 JSONL 用户:首次运行时自动迁移到 SQLite
  • 无缝过渡:您的原始命令继续不变
  • 备份安全:迁移过程中保留原始文件

存储类型

  1. SQLite(推荐)

    • 🚀 1.9 倍更快读取和搜索性能
    • 🧠 1.9 倍更节省内存
    • 💪 ACID 事务和数据完整性
    • 🔍 使用 FTS5 的高级搜索能力
    • 📊 对于 >100 实体的数据集更好
  2. JSONL(遗留)

    • 📁 3 倍更小文件大小
    • 55 倍更快启动时间
    • 📝 人类可读的文本格式
    • 🔧 对于简单数据集 <50 实体更好

内存文件存储路径