这是使用官方Rust MCP SDK实现的Model Context Protocol (MCP) 内存服务。
store_memory: 存储包含内容、标签和元数据的新记忆retrieve_memory: 检索与查询语义相似的记忆search_by_tag: 根据标签搜索记忆delete_memory: 根据哈希值删除记忆cargo build
对于发布构建:
cargo build --release
直接运行服务器:
cargo run
通过环境变量配置:
MCP_MEMORY_STORAGE_BACKEND=chromadb \
MCP_MEMORY_CHROMA_PATH=/path/to/chroma \
MCP_MEMORY_EMBEDDING_MODEL=onnx \
cargo run
服务器可以通过环境变量进行配置:
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_MEMORY_STORAGE_BACKEND | 存储后端(inmemory 或 chromadb) | inmemory |
MCP_MEMORY_CHROMA_PATH | ChromaDB数据目录路径 | 平台特定的数据目录 |
MCP_MEMORY_CHROMA_URL | ChromaDB服务器URL(可选) | 无 |
MCP_MEMORY_CHROMA_COLLECTION | ChromaDB集合名称 | memory_collection |
MCP_MEMORY_EMBEDDING_MODEL | 嵌入模型(dummy 或 onnx) | dummy |
MCP_MEMORY_EMBEDDING_MODEL_PATH | ONNX模型文件路径(可选) | 无 |
MCP_MEMORY_EMBEDDING_SIZE | 嵌入向量大小 | 384 |
MCP_MEMORY_LOG_LEVEL | 日志级别 | info |
该项目包括一个简单的Node.js测试脚本,用于测试服务器。要运行测试:
npm test
src/main.rs: 主服务器实现src/config.rs: 配置处理src/models.rs: 数据模型src/storage/: 存储实现
mod.rs: 存储特性及内存实现chroma.rs: ChromaDB存储实现src/embeddings.rs: 嵌入模型实现src/utils.rs: 工具函数Cargo.toml: Rust项目配置package.json: Node.js项目配置,用于测试工具test-mcp-server.js: 一个简单的Node.js脚本,用于程序化地测试服务器服务器使用来自Rust MCP SDK的rmcp库实现。它使用:
#[tool(tool_box)]属性宏定义工具ServerHandler特性实现MCP协议stdio()传输用于命令行使用启动服务器后,可以向其标准输入发送JSON-RPC请求。例如:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocol_version":"2024-11-05","capabilities":{"tools":true},"client_info":{"name":"test-client","version":"0.1.0"}}}
{"jsonrpc":"2.0","id":2,"method":"list_tools","params":{}}
{"jsonrpc":"2.0","id":3,"method":"call_tool","params":{"name":"store_memory","arguments":{"content":"这是一条测试记忆","tags":["测试","示例"]}}}
ONNX嵌入模型实现使用ONNX运行时来运行基于转换器的模型以生成嵌入。以下是工作原理:
OnnxEmbeddingGenerator从指定路径加载预训练的转换器模型(ONNX格式)和分词器。tokenizers库对输入文本进行分词,将其转换为令牌ID、注意力掩码和令牌类型ID。要使用ONNX嵌入模型:
transformers.onnx等工具将转换器模型(如BERT、RoBERTa等)导出为ONNX格式。tokenizer.json文件,或指定单独的路径。MCP_MEMORY_EMBEDDING_MODEL=onnx
MCP_MEMORY_EMBEDDING_MODEL_PATH=/path/to/model.onnx
MCP_MEMORY_EMBEDDING_SIZE=768 # 根据您的模型输出大小调整
要将此服务器注册到MCP客户端(如Claude),需要将其添加到客户端的MCP配置中。这里是一个示例JSON配置:
{
"mcpServers": {
"memory-service": {
"command": "/path/to/mcp-rust-server",
"args": [],
"env": {
"MCP_MEMORY_STORAGE_BACKEND": "inmemory",
"MCP_MEMORY_EMBEDDING_MODEL": "onnx",
"MCP_MEMORY_EMBEDDING_MODEL_PATH": "/path/to/model.onnx",
"MCP_MEMORY_EMBEDDING_SIZE": "768",
"MCP_MEMORY_LOG_LEVEL": "info"
},
"disabled": false,
"autoApprove": []
}
}
}
对于Claude Desktop,该配置应添加到:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json对于Claude VSCode扩展,配置应添加到:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsongraph TD
subgraph "外部交互"
direction LR
客户端([MCP客户端]) -. JSON-RPC .-> StdioTransport[标准输入输出传输]
环境变量[(环境变量)] -.-> 配置
ChromaDB服务器[(ChromaDB服务器)] <-. HTTP API .-> Chroma存储
ONNX模型文件[("ONNX模型文件(.onnx)")] <-. 加载 .-> ONNX嵌入
分词器文件[("分词器文件(tokenizer.json)")] <-. 加载 .-> ONNX嵌入
end
subgraph "MCP内存服务(Rust应用)"
direction TB
StdioTransport -- 转发请求 --> 服务器核心{MCP服务器核心}
服务器核心 -- 读取 --> 配置(配置)
服务器核心 -- 实例化 --> 嵌入实现{{选定的嵌入生成器}}
服务器核心 -- 实例化 --> 存储实现{{选定的存储后端}}
服务器核心 -- 使用工具实现 --> 工具逻辑(工具逻辑:存储、检索、搜索、删除)
工具逻辑 -- 使用 --> 存储实现
工具逻辑 -- 使用 --> 嵌入实现
工具逻辑 -- 使用 --> 模型(数据模型)
工具逻辑 -- 使用 --> 工具(工具)
%% FIX: 在下面的子图中添加了IDs EL和SL
subgraph EL [嵌入层]
direction TB
嵌入实现 -- 是实例 --> 嵌入特性(嵌入生成器特性)
虚拟嵌入(VirtualEmbeddingGenerator) -- 实现 --> 嵌入特性
ONNX嵌入(ONNXEmbeddingGenerator) -- 实现 --> 嵌入特性
ONNX嵌入 -- 使用库 --> Ort库[ort库]
ONNX嵌入 -- 使用库 --> Tokenizers库[tokenizers库]
end
subgraph SL [存储层]
direction TB
存储实现 -- 是实例 --> 存储特性(内存存储特性)
内存存储(内存存储) -- 实现 --> 存储特性
Chroma存储(Chroma内存存储) -- 实现 --> 存储特性
存储实现 -- 使用 --> 嵌入实现
存储实现 -- 使用 --> 模型
Chroma存储 -- 使用库 --> Reqwest库[reqwest库]
end
end
%% 样式
classDef 外部 fill:#f9f,stroke:#333,stroke-width:1px;
classDef rust_app fill:#e6ffed,stroke:#333,stroke-width:1px;
classDef 特性 fill:#lightblue,stroke:#333,stroke-width:1px;
classDef 实现 fill:#lightgrey,stroke:#333,stroke-width:1px;
classDef 模块 fill:#whitesmoke,stroke:#333,stroke-width:1px;
classDef 库 fill:#cornsilk,stroke:#333,stroke-width:1px;
class 客户端,环境变量,ChromaDB服务器,ONNX模型文件,分词器文件 外部;
class StdioTransport,服务器核心,工具逻辑,配置,模型,工具 rust_app;
class 嵌入特性,存储特性 特性;
class 嵌入实现,存储实现,虚拟嵌入,ONNX嵌入,内存存储,Chroma存储 实现;
class Ort库,Tokenizers库,Reqwest库 库;
%% FIX: 下面使用了子图IDs EL和SL
class EL,SL 模块
本项目根据MIT许可证发布 - 查看LICENSE文件获取详细信息。