使用说明
项目简介
ZenMemory MCP 服务器是一个基于 Model Context Protocol (MCP) 构建的后端服务,旨在为 AI 应用提供去中心化的记忆管理能力。它利用 '@modelcontextprotocol/typescript-sdk' 实现了完整的 MCP 服务器功能,并结合 Solana 区块链技术实现了链上记忆上下文存储。同时,通过 Express.js 提供了 HTTP API,方便客户端进行交互。
主要功能点
- MCP 服务器: 基于 '@modelcontextprotocol/typescript-sdk' 完整实现了 MCP 协议的核心功能,包括资源和工具的注册与管理。
- Solana 链上记忆: 利用 '@solana/agent-kit' 将记忆上下文存储在 Solana 区块链上,实现数据的去中心化和持久化。
- HTTP API: 提供简洁的 HTTP API ('/memory', '/memory/:id', '/user/:userId/memories'),方便客户端进行记忆的创建、查询和管理。
- 灵活存储: 支持内存存储,并可扩展到数据库或 IPFS 等持久化存储方案。
- 内容验证工具: 内置 'validateMemory' 工具,用于验证记忆内容的有效性。
- 用户记忆资源: 提供 'memories://user/{userId}' 资源,用于获取用户记忆列表(当前示例仅返回空数组,需自行实现数据库集成)。
安装步骤
- 克隆仓库
git clone https://github.com/ZenMemoryAI/zenmemory-mcp-sol.git cd zenmemory-mcp-sol - 安装依赖
npm install
服务器配置
此 MCP 服务器通过 Node.js 运行,并使用 HTTP 协议提供服务。对于 MCP 客户端而言,虽然此服务器未直接暴露 JSON-RPC 端点,但其内部使用了 MCP SDK 进行了工具和资源的定义。若要将此服务器作为 MCP 后端集成到 MCP 客户端(例如 LLM 客户端),您需要配置客户端以 HTTP 方式与此服务器交互。
以下是一个理论上 MCP 客户端可能的配置信息 (JSON 格式,请注意,实际使用时,MCP 客户端可能需要适配此服务器提供的 HTTP API,而非直接的 MCP 协议交互):
{ "serverName": "ZenMemoryMCP", "command": "node", "args": ["src/index.js"], "transport": "http", "httpEndpoint": "http://localhost:4000" }
参数注释:
- 'serverName': 服务器名称,这里设置为 "ZenMemoryMCP"。
- 'command': 启动服务器的命令,由于是 Node.js 应用,所以使用 "node"。
- 'args': 启动命令的参数,指向服务器入口文件 'src/index.js'。
- 'transport': 理论上的传输协议,虽然实际是 HTTP API,但如果 MCP 客户端支持 HTTP 作为传输层,可以设置为 "http"。
- 'httpEndpoint': HTTP API 的根 URL,默认为 'http://localhost:4000'。
请注意: 上述配置仅为 理论上的 MCP 客户端配置示例。由于此仓库实际提供的是基于 HTTP API 的服务,标准的 MCP 客户端可能无法直接通过 command/args 的方式与之交互。您可能需要开发一个适配层,或者直接在客户端通过 HTTP 请求调用此服务器的 API。
基本使用方法
-
启动服务器 在项目根目录下,设置必要的环境变量(例如 'SOLANA_RPC', 'AGENT_KEYPAIR_SECRET', 'ENABLE_SOLANA', 'ENABLE_MCP', 'PORT'),然后运行:
npm start服务器默认运行在 4000 端口。
-
使用 HTTP API
-
创建记忆 (POST /memory) 发送 POST 请求到 '/memory' 接口,请求体为 JSON 格式,包含 'userId' 和 'content' (必填),以及可选的 'emotion' 和 'tags'。
{ "userId": "user123", "content": "今天学习了 MCP 协议。", "emotion": "开心", "tags": ["学习", "MCP"] }服务器将返回状态码 201 和包含记忆信息的 JSON 响应。
-
获取记忆 (GET /memory/:id) 发送 GET 请求到 '/memory/{memoryId}' 接口,例如 '/memory/your-memory-id',获取指定 ID 的记忆信息。
-
获取用户记忆列表 (GET /user/:userId/memories) 发送 GET 请求到 '/user/{userId}/memories' 接口,例如 '/user/user123/memories',获取指定用户的所有记忆列表(包括链下和链上记忆,如果启用了 Solana)。
-
信息
分类
数据库与文件