使用说明
知识图谱内存服务器(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(默认)或httpHTTP_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)>客户端配置的头部信息
- 作为HTTP MCP服务器添加,并指定URL
- 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-sdkv1.0.0(版本1.0.0)
许可证
麻省理工学院(MIT)
