使用说明
MCP内存服务器
基于模型上下文协议(MCP)的智能内存管理服务器,为AI模型提供持久的内存存储和强大的向量搜索功能。
🌟 特性
核心功能
- CRUD操作:创建、读取、更新和删除内存条目
- 多种内存类型:支持全局、对话和临时记忆
- 文件夹管理:创建、删除和重命名文件夹以组织和分类记忆
- 灵活存储:用户可自定义存储路径
- JSON格式:基于JSON的存储,便于读取和备份
🎯 矢量搜索功能(新增!)
- 语义搜索:基于含义而非关键字的智能搜索
- 混合搜索:结合语义搜索和关键字搜索
- 多提供商支持:支持Ollama、Gemini、OpenAI嵌入模型
- 自动向量化:创建记忆时自动生成嵌入
- 相似计算:计算任意两个文本之间的语义相似度
- 高性能:内存缓存+文件持久化
高级功能
- 内存缓存:提高了读取性能
- 索引系统:快速搜索和过滤
- 性能监控:实时性能指标
- 文件管理:自动备份和恢复
- 全面的错误处理:运行稳定可靠
📦 安装
从NPM安装(推荐)
npm install @qianjue/mcp-memory-server
从源代码安装
# Clone the repository
git clone https://github.com/QianJue-CN/mcp-memory-server.git
cd mcp-memory-server
# Install dependencies
npm install
# Build the project
npm run build
🚀 快速开始
MCP服务器配置
将此服务器添加到MCP客户端配置文件中:
适用于Claude Desktop(config.json)
{
"mcpServers": {
"memory-server": {
"command": "node",
"args": ["path/to/mcp-memory-server/dist/index.js"],
"env": {
"MCP_MEMORY_STORAGE_PATH": "/path/to/your/memory/storage"
}
}
}
}
使用NPM包
{
"mcpServers": {
"memory-server": {
"command": "npx",
"args": ["@qianjue/mcp-memory-server"],
"env": {
"MCP_MEMORY_STORAGE_PATH": "/path/to/your/memory/storage"
}
}
}
}
配置选项
MCP_MEMORY_STORAGE_PATH:自定义存储目录路径MCP_EMBEDDING_PROVIDER:默认嵌入提供程序(ollama/gegemini/openai)MCP_EMBEDDING_API_KEY:嵌入提供程序的默认API密钥LOG_LEVEL:日志记录级别(调试/信息/警告/错误)
基本用法
# Start the server directly
npm start
# Or run from dist
node dist/index.js
矢量搜索快速入门
1.配置嵌入提供程序
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "configure_embedding",
"arguments": {
"provider": "gemini",
"apiKey": "your-gemini-api-key",
"baseUrl": "https://generativelanguage.googleapis.com",
"model": "text-embedding-004"
}
}
}
2.创建内存(自动生成向量)
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "create_memory",
"arguments": {
"content": "I am learning JavaScript programming",
"type": "global",
"tags": ["programming", "learning"]
}
}
}
3.语义搜索
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "semantic_search",
"arguments": {
"query": "programming learning",
"limit": 5,
"threshold": 0.7
}
}
}
📚 MCP工具
基本内存管理
1.create_memory
创建新的内存条目
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_memory",
"arguments": {
"content": "Memory content",
"type": "global",
"tags": ["tag1", "tag2"],
"metadata": {"key": "value"}
}
}
}
2.read_memories
读取内存条目
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "read_memories",
"arguments": {
"type": "global",
"limit": 10,
"searchText": "search keywords"
}
}
}
3.update_memory
更新内存条目
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "update_memory",
"arguments": {
"id": "memory-id",
"content": "Updated content"
}
}
}
4.删除记忆
删除内存条目
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "delete_memory",
"arguments": {
"id": "memory-id"
}
}
}
5.获取信息统计
获取内存统计信息
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "get_memory_stats",
"arguments": {}
}
}
矢量搜索工具
1.配置嵌入
配置嵌入模型提供程序
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "configure_embedding",
"arguments": {
"provider": "gemini",
"apiKey": "your-gemini-api-key",
"baseUrl": "https://generativelanguage.googleapis.com",
"model": "text-embedding-004"
}
}
}
2.语义研究
语义相似度搜索
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "semantic_search",
"arguments": {
"query": "programming learning",
"limit": 5,
"threshold": 0.7,
"hybridSearch": false
}
}
}
3.生成嵌入
为现有内存生成嵌入
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "generate_embeddings",
"arguments": {}
}
}
4.计算相似性
计算两个文本之间的相似度
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "calculate_similarity",
"arguments": {
"text1": "learning programming",
"text2": "writing code"
}
}
}
5.获取向量状态
获取矢量存储统计信息
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "get_vector_stats",
"arguments": {}
}
}
文件夹管理工具
1.创建文件夹
创建新的内存文件夹
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_folder",
"arguments": {
"folderPath": "Work/ProjectA",
"description": "Memories related to Project A"
}
}
}
参数:
folderPath:文件夹路径,支持多级路径(例如“工作/项目A/文档”)description:可选文件夹描述
使用案例:
- 为不同的项目整理记忆
- 按主题对记忆进行分类
- 创建分层内存结构
2.删除文件夹
删除文件夹
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "delete_folder",
"arguments": {
"folderPath": "Work/ProjectA",
"deleteMemories": false
}
}
}
参数:
folderPath:要删除的文件夹的路径deleteMemories:是否删除文件夹中的所有内存(默认值:false)true:删除文件夹及其所有内存false:仅删除文件夹,保留记忆,但删除文件夹标签
重要提示:
- 删除文件夹前确认是否需要保留记忆
- 设置
deleteMemories: true将永久删除文件夹中的所有记忆
3.重命名文件夹
重命名文件夹
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "rename_folder",
"arguments": {
"oldPath": "Work/ProjectA",
"newPath": "Work/ProjectAlpha"
}
}
}
参数:
oldPath:当前文件夹路径newPath:新文件夹路径
特征:
- 自动更新文件夹中所有内存的元数据
- 确保重命名操作的原子性
- 防止数据不一致
重要提示:
重命名文件夹时,系统会自动同步和更新 metadata.folderPath 文件夹中所有内存的字段,确保内存和文件夹之间的正确关联。
4.列表文件夹
列出所有文件夹
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "list_folders",
"arguments": {}
}
}
退货:
- 文件夹路径
- 文件夹名称
- 创建时间
- 包含的内存数量
- 父文件夹路径
使用带有记忆的文件夹
创建内存时,可以使用指定文件夹 metadata.folderPath 字段:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_memory",
"arguments": {
"content": "Project A requirements document completed",
"type": "conversation",
"tags": ["project", "documentation"],
"metadata": {
"folderPath": "Work/ProjectA",
"priority": "high"
}
}
}
}
笔记:
- 全局存储器(类型:“全局”)不需要文件夹标签
- 文件夹路径会自动存储在内存中
metadata.folderPath领域 - 重命名文件夹时,所有相关内存的文件夹路径都会自动更新
🔧 配置
嵌入提供程序配置
Ollama(本地模型)
{
"provider": "ollama",
"baseUrl": "http://localhost:11434",
"model": "nomic-embed-text",
"dimensions": 768
}
API双子星
{
"provider": "gemini",
"apiKey": "your-gemini-api-key",
"baseUrl": "https://generativelanguage.googleapis.com",
"model": "text-embedding-004",
"dimensions": 768
}
OpenAI API
{
"provider": "openai",
"apiKey": "your-openai-api-key",
"model": "text-embedding-3-small",
"dimensions": 1536
}
环境变量
# Optional: Set default storage path
MCP_MEMORY_STORAGE_PATH=/path/to/storage
# Optional: Set embedding configuration
MCP_EMBEDDING_PROVIDER=gemini
MCP_EMBEDDING_API_KEY=your-gemini-api-key
完整配置示例
以下是如何在Claude Desktop中配置MCP内存服务器的完整示例:
{
"mcpServers": {
"memory-server": {
"command": "npx",
"args": ["@qianjue/mcp-memory-server"],
"env": {
"MCP_MEMORY_STORAGE_PATH": "~/Documents/AI-Memory",
"MCP_EMBEDDING_PROVIDER": "gemini",
"MCP_EMBEDDING_API_KEY": "your-gemini-api-key",
"LOG_LEVEL": "info"
}
}
}
}
添加此配置后:
- 重新启动克劳德桌面
- 内存服务器将提供所有11个工具
- 如果提供了API键,将自动启用矢量搜索
- 内存将存储在指定目录中
📊 数据结构
记忆
interface MemoryEntry {
id: string; // UUID
content: string; // Memory content
type: MemoryType; // Memory type
conversationId?: string; // Conversation ID (optional)
createdAt: string; // Creation time (ISO 8601)
updatedAt: string; // Update time (ISO 8601)
tags?: string[]; // Tags array
metadata?: object; // Metadata object
embedding?: number[]; // Embedding vector (optional)
}
内存类型
enum MemoryType {
GLOBAL = 'global', // Global memory
CONVERSATION = 'conversation', // Conversation memory
TEMPORARY = 'temporary' // Temporary memory
}
🏗️ 项目结构
src/
├── types/ # Type definitions
│ ├── memory.ts # Memory-related types
│ └── vector.ts # Vector-related types
├── memory/ # Memory management core
├── embedding/ # Embedding model providers
│ ├── EmbeddingProvider.ts
│ ├── EmbeddingManager.ts
│ └── providers/ # Provider implementations
├── vector/ # Vector storage and computation
│ ├── VectorStore.ts
│ └── VectorUtils.ts
├── utils/ # Utility classes
├── tools/ # MCP tool interfaces
└── index.ts # Server entry point
🤝 贡献
欢迎投稿、问题和功能请求!
- 分叉项目
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
