关于 getMe MCP Server
getMe MCP Server 将持久化的 Go 键值存储作为 MCP 工具提供给 LLM 客户端。它采用追加式日志和内存哈希索引,并支持 Unix Domain Socket 本地通信。
主要功能
- 01持久化键值存储
- 02追加式日志与内存索引
- 03后台压缩回收空间
- 04Unix Domain Socket 通信
- 05提供 CLI、HTTP 代理及多语言 SDK
适用场景
- 01让 LLM 客户端读写键值数据
- 02通过 CLI 调试本地存储
- 03以 HTTP 路由访问存储引擎
MCP 相关
MCP 服务将 getMe 数据库操作暴露为工具,供 LLM 客户端调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx getme-mcp-serverGETME_SOCKET_PATHPath to the UNIX socket for getMe core serverGETME_READ_ONLYIf true, only get and get_json tools are registeredGETME_ALLOW_CLEARIf true, enables the dangerous clear toolGETME_KEY_PREFIX密钥String prefix prepended to all keys (e.g. agent1:)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
📑 目录
📖 概述
getMe 是一个用 Go 编写的持久化、可嵌入式键值存储。它的设计灵感来自 Bitcask,针对高写入吞吐量和低延迟读取进行了优化。
它采用日志结构化存储方式,确保所有数据都按顺序追加写入。它使用 Unix Domain Sockets(UDS)实现极快的本地进程间通信,还提供 HTTP 代理、CLI 和面向大模型的模型上下文协议(MCP)服务等多个接口。
🏗 项目结构
本项目是一个单体仓库,包含核心存储服务、多个客户端接口和工具。
server/:核心存储守护进程和引擎。实现用于持久化存储的日志结构化哈希表。有关架构的深入介绍,请参阅server/README.md。cli/:用于测试和调试的命令行界面,可与getMe服务交互。sdks/:客户端库(goSdk、javaSdk、jsSdk、pythonSdk),用于将getMe集成到应用程序中。http-proxy-go/:使用goSdk构建的 HTTP 服务,通过标准 HTTP 路由公开核心引擎的 Unix Domain Socket 连接。mcp-server/:模型上下文协议(MCP)服务,将getMe数据库作为工具提供给大语言模型(如 Claude 或 Cursor)。commons/:在整个单体仓库中共用的代码、套接字路径、类型和常量,以确保一致性。utils/:共享实用程序包,包括日志堆栈配置(Loki + Alloy + Grafana)。
重点推荐: 精选的内部文档是端到端了解系统的最快途径。请先从
server/README.md了解架构基础,然后探索cli和mcp-server模块,了解集成方式。
🧠 核心架构
存储引擎依赖以下几个核心原则:
- 日志结构化存储:所有数据都会写入仅追加的日志文件。这样可以避免缓慢的随机磁盘 I/O,从而实现极快的写入速度。
- 内存哈希索引:内存中维护着一个哈希表,将每个键映射到其值在磁盘上的确切位置。这使读取操作非常快速(通常只需寻道一次)。
- 压缩:后台进程会定期清理日志文件中的旧数据和过期数据,以回收磁盘空间。
- 快速本地传输:通信主要通过 Unix Domain Sockets 进行,避免了本地标准 TCP 带来的开销。
🚀 快速开始
运行服务端
此仓库提供了用于初始化环境的辅助脚本。
选项 A:本地二进制文件 + 日志堆栈
切换到服务端模块并运行本地初始化脚本:
cd server
./init-server-local.sh
此脚本会将 Go 二进制文件构建到 server/dist/,准备数据、日志和套接字目录,并通过 Docker Compose 启动 Loki + Alloy + Grafana 日志堆栈,然后在前台启动服务端。
警告: 不要在此脚本前加上
sudo。脚本会在需要时自行调用提升后的权限。在最外层使用sudo会导致本地开发时出现权限错误。
选项 B:完整 Docker Compose 堆栈
在同一个 server 目录中运行:
cd server
./init-server-docker.sh
此操作会确保主机目录存在,导出你的 UID/GID,并调用 docker compose up --build,在容器中运行所有内容。
使用 CLI
直接与本地服务端交互:
cd cli
go run . put mykey "hello world"
go run . get mykey
go run . delete mykey
HTTP 代理
如果你想使用标准 HTTP REST 端点而非 Unix Sockets,请运行 Go HTTP 代理:
cd http-proxy-go
go run main.go -port 8080
这样你就可以运行 curl http://localhost:8080/get?key=mykey。
MCP 服务
LLM 客户端(如 Claude Desktop)可以通过 Model Context Protocol 使用 getMe。
cd mcp-server
uv run getme-mcp-server
(配置和集成说明请参阅 mcp-server/README.md)。
📊 运行基准测试和测试
若要确保性能没有退化,或对数据库进行压力测试:
- 导航到相应模块(例如
server)。 - 运行标准测试:
go test ./... - 运行基准测试:
(注意:如需进行更高强度的压力测试或正确性测试,请查看go test -bench . ./...server/tests/)。
📦 SDK
我们提供了多种语言的 SDK。请在 sdks/ 目录中查找:
所有 SDK 都直接通过 Unix Domain Socket 进行交互,以实现最佳延迟。
⚠️ 关于 SDK 发布的说明:SDK 版本管理和发布由 临时发布结构 自动处理。CI/CD 流水线会自主协调整个发布生命周期——从创建分离提交并为其打标签,到生成变更日志并将构建产物推送到公共注册表——所有操作都由单个版本升级类型触发器启动。这使 main 分支完全不受无意义的版本升级提交影响。
如果你正在了解代码或参与贡献,PR 中请勿手动升级版本。你可以在 SDKs README 中详细了解这一高级架构。
📄 许可证
本项目根据 GNU Affero General Public License v3.0(AGPLv3)授权许可,详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。