使用说明
带Qdrant矢量数据库的MCP内存服务器
🎉 状态:生产就绪 ✅ | 完成所有9个实施步骤
一种模型上下文协议(MCP)服务器,使用Qdrant向量数据库进行语义搜索和存储,提供智能内存管理功能。专为Cursor IDE集成而构建,具有全面的策略治理功能。
🌟 完整功能集
🧠 多种内存类型
- 全局内存:所有代理共享共同知识
- 学习记忆:吸取的教训和应避免的错误
- 代理特定内存:个体代理人背景和专业知识
🔍 高级搜索和处理
- 基于向量的句子变换相似度搜索
- 重复检测,防止冗余内容
- 可配置的相似性阈值
- Markdown处理与智能内容清理
- YAML前体提取与节组织
🏛️ 政策治理体系 新
- 75可执行规则 分为4类(原则、禁止的行为、要求、风格指南)
- 语义策略搜索 基于向量嵌入的上下文规则发现
- 合规性跟踪 有违规记录和代理责任
- 版本管理 SHA-256完整性验证
- 架构验证 强制执行所需的部分和数据一致性
📋 提示管理系统 新
- 动态模板引擎 变量替换和条件逻辑
- 代理商特定提示 具有自定义配置和角色定义
- 验证框架 确保及时的一致性和格式标准
- 上下文集成 具有增强提示的内存和策略系统
🔧 完成MCP集成
- 9 MCP工具:内存管理、降价处理、策略合规性、提示生成
- 4 MCP资源:对内存、策略、提示和系统状态的只读访问
- Cursor IDE符合标准MCP协议
- 具有全面错误处理功能的stdin/stdout通信
建筑
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ Cursor IDE │◄──►│ MCP Server │◄──►│ Qdrant Vector │
│ │ │ (stdin/stdout) │ │ Database │
│ │ │ │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ Sentence │
│ Transformers │
│ (Embeddings) │
└──────────────────┘
安装
先决条件
- Python 3.10+ 使用pip
- Qdrant数据库 (可以用Docker在本地运行)
- 光标IDE 用于MCP集成
设置Qdrant数据库
使用Docker(推荐):
docker run -p 6333:6333 -v $(pwd)/qdrant_storage:/qdrant/storage qdrant/qdrant
或者按照以下步骤在本地安装Qdrant 安装指南.
再进行
使用诗歌(推荐):
# Install dependencies using Poetry
poetry install
或者使用pip:
# Install Python dependencies
pip install -r requirements.txt
配置
- 复制示例环境文件:
cp .env.example .env
- 编辑
.env使用您的设置:
# Qdrant Configuration
QDRANT_HOST=localhost
QDRANT_PORT=6333
QDRANT_API_KEY=
# Embedding Model Configuration
EMBEDDING_MODEL=all-MiniLM-L6-v2
EMBEDDING_DIMENSION=384
# Memory Configuration
SIMILARITY_THRESHOLD=0.8
MAX_RESULTS=10
# Agent Configuration
DEFAULT_AGENT_ID=default
# Server Configuration
LOG_LEVEL=INFO
用法
启动服务器
python server.py
服务器将:
- 连接到Qdrant数据库
- 初始化向量集合
- 加载嵌入模型
- 通过stdin/stdout开始监听MCP命令
游标IDE集成
将服务器添加到Cursor MCP配置中:
{
"mcpServers": {
"memory-server": {
"command": "/media/hannesn/storage/Code/MCP/.venv/bin/python",
"args": ["/media/hannesn/storage/Code/MCP/server.py"],
"cwd": "/media/hannesn/storage/Code/MCP",
"env": {
"PYTHONPATH": "/media/hannesn/storage/Code/MCP",
"QDRANT_HOST": "localhost",
"QDRANT_PORT": "6333",
"EMBEDDING_MODEL": "all-MiniLM-L6-v2",
"SIMILARITY_THRESHOLD": "0.8",
"MAX_RESULTS": "10",
"LOG_LEVEL": "INFO"
}
}
}
}
或者,您可以使用Poetry运行服务器:
poetry run python server.py
MCP工具
1. set_agent_context
从markdown文件初始化代理上下文。
参数:
agent_id(string):代理的唯一标识符context_file_path(string):带有代理上下文的markdown文件的路径description(字符串,可选):上下文描述
例子:
{
"tool": "set_agent_context",
"arguments": {
"agent_id": "frontend_dev",
"context_file_path": "./contexts/frontend_agent.md",
"description": "Frontend development agent context"
}
}
2. add_to_global_memory
将内容添加到所有代理共享的全局内存中。
参数:
file_path(string):markdown文件的路径description(字符串,可选):内容描述
例子:
{
"tool": "add_to_global_memory",
"arguments": {
"file_path": "./docs/coding_standards.md",
"description": "Company coding standards"
}
}
3. add_to_learned_memory
储存经验教训,避免重复错误。
参数:
file_path(string):包含课程的markdown文件的路径lesson_type(string):课程类型(例如“部署”、“安全”)description(字符串,可选):课程描述
例子:
{
"tool": "add_to_learned_memory",
"arguments": {
"file_path": "./lessons/deployment_issues.md",
"lesson_type": "deployment",
"description": "Critical deployment lessons"
}
}
4. add_to_agent_memory
将内容添加到特定于代理的内存中。
参数:
agent_id(string):目标代理标识符file_path(string):markdown文件的路径description(字符串,可选):内容描述
例子:
{
"tool": "add_to_agent_memory",
"arguments": {
"agent_id": "backend_dev",
"file_path": "./docs/api_patterns.md",
"description": "Backend API design patterns"
}
}
5. query_memory
在内存集合中搜索相关内容。
参数:
query(string):搜索查询memory_type(string):“全局”、“已学习”、“代理”或“全部”agent_id(字符串,可选):特定于代理的查询的代理IDmax_results(整数,可选):最大结果(默认值:10)
例子:
{
"tool": "query_memory",
"arguments": {
"query": "authentication best practices",
"memory_type": "all",
"max_results": 5
}
}
6. compare_against_learned_memory
对照过去的经验教训检查拟议的行动。
参数:
action_description(string):拟议行动的描述agent_id(string,可选):发出请求的代理
例子:
{
"tool": "compare_against_learned_memory",
"arguments": {
"action_description": "Deploy database migration on Friday afternoon",
"agent_id": "devops_agent"
}
}
内存类型说明
全局内存
- 目的:存储所有代理共享的知识
- 内容:编码标准、文件、最佳做法
- 访问:所有代理都可以查询此内存
- 用例:公司范围内的政策、架构决策
学习记忆
- 目的:从过去的错误中吸取教训
- 内容:事故报告、尸检、反模式
- 访问:大多数代理(不包括“类人”测试人员)
- 用例:避免重复过去的错误,改进决策
代理特定内存
- 目的:存储特定于单个代理的知识
- 内容:角色定义、专业知识、背景
- 访问:只有特定代理人
- 用例:代理初始化,专业知识
测试
运行基本功能测试
python tests/test_basic_functionality.py
这将测试:
- Qdrant连接和收集设置
- 内存操作(添加、查询、重复检测)
- Markdown处理和内容清理
- 矢量嵌入与相似性搜索
使用样本数据进行手动测试
- 启动服务器:
python server.py
- 在中使用提供的示例markdown文件
sample_data/:frontend_agent_context.md:前端代理上下文backend_agent_context.md:后端代理上下文deployment_lessons.md:吸取的经验教训global_standards.md:全球发展标准
故障排除
常见问题
Qdrant连接失败
❌ Failed to initialize Qdrant: ConnectionError
- 确保Qdrant在配置的主机/端口上运行
- 检查防火墙设置
- 如果使用Qdrant Cloud,请验证API密钥
嵌入模型下载问题
❌ Failed to load embedding model
- 确保首次下载时有互联网连接
- 检查可用磁盘空间(型号可能很大)
- 在配置中尝试替代模型
内存已满/性能问题
- 减少
EMBEDDING_DIMENSION对于较小的型号 - 增加
SIMILARITY_THRESHOLD减少结果 - 考虑从集合中删除旧内容
调试
启用调试日志记录:
export LOG_LEVEL=DEBUG
python server.py
检查Qdrant集合:
curl http://localhost:6333/collections
配置参考
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
QDRANT_HOST |
localhost | Qdrant服务器主机 |
QDRANT_PORT |
6333 | Qdrant服务器端口 |
QDRANT_API_KEY |
Qdrant Cloud的API密钥 | |
EMBEDDING_MODEL |
全MiniLM-L6-v2 | 句子转换模型 |
EMBEDDING_DIMENSION |
384 | 矢量维度大小 |
SIMILARITY_THRESHOLD |
0.8 | 重复检测阈值 |
MAX_RESULTS |
10 | 默认最大查询结果 |
DEFAULT_AGENT_ID |
默认 | 默认代理标识符 |
LOG_LEVEL |
信息 | 记录详细信息 |
集合名称
- 全局内存:
global_memory - 学习记忆:
learned_memory - 代理内存:
agent_specific_memory_{agent_id}
发展
项目结构
mcp-memory-server/
├── server.py # Main MCP server
├── src/
│ ├── __init__.py
│ ├── config.py # Configuration management
│ ├── memory_manager.py # Qdrant operations
│ └── markdown_processor.py # Markdown handling
├── tests/
│ └── test_basic_functionality.py
├── sample_data/ # Example markdown files
├── docs/ # Additional documentation
├── requirements.txt # Python dependencies
├── pyproject.toml # Poetry configuration
└── README.md # This file
贡献
- 复刻仓库
- 创建要素分支
- 进行更改
- 运行测试:
python -m pytest tests/ - 提交拉取请求
添加新工具
- 添加工具功能
MCPMemoryServer._register_tools() - 更新
_list_tools()带有工具模式的方法 - 为新功能添加测试
- 更新此自述文件
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
支持
对于问题和疑问:
- 检查上面的故障排除部分
- 查看Qdrant文档以了解数据库问题
- 检查MCP协议文档是否存在集成问题
- 打开一个包含详细日志和配置的问题
