QueryNest是一个基于MCP (Model Context Protocol) 的MongoDB多实例查询服务,它能提供智能化的数据库结构发现、语义分析和自然语言查询生成功能,极大地简化了MongoDB的查询操作。
使用uvx快速启动服务:
# 安装uv工具(如果尚未安装)
pip install uv
# 从项目目录启动(推荐)
cd /path/to/QueryNest
uvx --from . --no-cache querynest-mcp
# 或从任何位置启动
uvx --from /path/to/QueryNest --no-cache querynest-mcp
uvx启动的优势:
git clone https://github.com/niuzaishu/QueryNest.git
cd QueryNest
cd QueryNest
pip install -r requirements.txt
# 复制配置模板
cp config.example.yaml config.yaml
# 编辑配置文件(根据实际环境修改MongoDB连接字符串)
vim config.yaml # 或使用您喜欢的编辑器
# 开发模式(直接运行)
python mcp_server.py --log-level DEBUG
# 生产模式(使用uvx,推荐)
uvx --from . --no-cache querynest-mcp
# 设置配置文件路径(如果需要)
export QUERYNEST_CONFIG_PATH=/path/to/config.yaml
# 构建并启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
使用uvx快速启动服务:
# 安装uv工具(如果尚未安装)
pip install uv
# 从项目目录启动(推荐)
cd /path/to/QueryNest
uvx --from . --no-cache querynest-mcp
# 或从任何位置启动
uvx --from /path/to/QueryNest --no-cache querynest-mcp
uvx启动的优势:
git clone https://github.com/niuzaishu/QueryNest.git
cd QueryNest
cd QueryNest
pip install -r requirements.txt
# 复制配置模板
cp config.example.yaml config.yaml
# 编辑配置文件(根据实际环境修改MongoDB连接字符串)
vim config.yaml # 或使用您喜欢的编辑器
# 开发模式(直接运行)
python mcp_server.py --log-level DEBUG
# 生产模式(使用uvx,推荐)
uvx --from . --no-cache querynest-mcp
# 设置配置文件路径(如果需要)
export QUERYNEST_CONFIG_PATH=/path/to/config.yaml
# 构建并启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
用户:"帮我查看有哪些可用的数据库实例"
助手:使用 discover_instances 工具
用户:"分析一下电商数据库中的用户表结构"
助手:使用 analyze_collection 工具分析 users 集合
用户:"查找最近一周注册的活跃用户,按注册时间排序"
助手:使用 generate_query 生成查询,然后用 confirm_query 执行
用户:"帮我理解日志集合中各个字段的含义"
助手:使用 manage_semantics 进行批量语义分析
用户:"统计每小时的错误日志数量,按时间分组"
助手:生成聚合查询并执行
发现和列出所有可用的MongoDB实例。
{
"name": "discover_instances",
"arguments": {
"include_health": true,
"include_stats": true
}
}
列出指定实例中的所有数据库。
{
"name": "discover_databases",
"arguments": {
"instance_id": "prod-main",
"include_collections": true,
"exclude_system": true
}
}
分析指定集合的结构和字段信息。
{
"name": "analyze_collection",
"arguments": {
"instance_id": "prod-main",
"database_name": "ecommerce",
"collection_name": "users",
"include_semantics": true,
"include_examples": true,
"rescan": false
}
}
管理字段的业务语义信息。
{
"name": "manage_semantics",
"arguments": {
"action": "batch_analyze",
"instance_id": "prod-main",
"database_name": "ecommerce",
"collection_name": "users"
}
}
根据自然语言描述生成MongoDB查询。
{
"name": "generate_query",
"arguments": {
"instance_id": "prod-main",
"database_name": "ecommerce",
"collection_name": "orders",
"query_description": "查找今天创建的订单,按金额降序排列",
"query_type": "auto",
"limit": 50
}
}
执行生成的查询并返回结果。
{
"name": "confirm_query",
"arguments": {
"instance_id": "prod-main",
"database_name": "ecommerce",
"collection_name": "orders",
"query_type": "find",
"mongodb_query": {
"filter": {"created_at": {"$gte": "2024-01-01T00:00:00Z"}},
"sort": {"amount": -1},
"limit": 50
},
"explain": true
}
}
服务启动后,可以在支持MCP协议的AI客户端中配置QueryNest服务以实现智能数据库查询功能。
QueryNest/
├── 📄 配置文件
│ ├── config.yaml # 主配置文件
│ ├── config.example.yaml # 配置模板
│ └── config.py # 配置管理
├── 🚀 核心服务
│ ├── mcp_server.py # MCP服务器入口
│ ├── start.py # 备用启动脚本
│ └── database/ # 数据库连接和管理
├── 🔧 MCP工具集
│ └── mcp_tools/ # MCP协议工具实现
├── 🔍 扫描分析
│ └── scanner/ # 数据库扫描和语义分析
├── 🛠️ 工具类
│ └── utils/ # 验证、错误处理、工作流管理
├── 🧪 测试代码
│ └── tests/ # 单元测试和集成测试
├── 📚 文档
│ └── docs/ # 完整项目文档
├── 📦 部署
│ └── deployment/ # Docker和服务配置
└── 📜 脚本
└── scripts/ # 数据库检查和测试工具
📖 详细结构说明请参考
QueryNest 已经配置为可通过 uvx 运行的包,项目包含以下关键文件:
setup.py - 包配置文件:
setup(
name="querynest",
version="1.0.0",
description="QueryNest MCP MongoDB查询服务",
py_modules=["mcp_server", "config"],
packages=["database", "scanner", "mcp_tools", "utils"],
entry_points={
"console_scripts": [
"querynest-mcp=mcp_server:cli_main",
]
},
)
入口点配置 - 在 mcp_server.py 中定义了 CLI 入口:
def cli_main():
"""命令行入口点"""
# 自动查找配置文件并设置环境
# 支持从不同目录启动
asyncio.run(main())
if __name__ == "__main__":
cli_main()
步骤 1:安装 uv 工具 如果尚未安装uv,可通过以下方式安装:
# 使用pip安装(推荐)
pip install uv
# 或使用官方安装脚本(Linux/macOS)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows PowerShell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# 验证安装
uvx --version
步骤 2:启动服务 在项目根目录下运行:
# 推荐方式:从项目目录运行
cd /path/to/QueryNest
uvx --from . --no-cache querynest-mcp
# 或设置环境变量指定配置文件
export QUERYNEST_CONFIG_PATH=/path/to/QueryNest/config.yaml
uvx --from /path/to/QueryNest --no-cache querynest-mcp
步骤 3:验证服务启动 服务启动成功后,您应该看到类似以下的日志输出:
{"event": "Starting QueryNest MCP server initialization", "config_path": "/path/to/config.yaml"}
{"event": "Configuration loaded successfully", "instances_count": 2}
{"event": "MCP tools initialized successfully", "tools_count": 13}
{"event": "Starting stdio MCP server"}
uvx 工作原理: uvx 是一个现代的 Python 包执行工具,它可以:
.)安装包MCP 客户端配置要点: 对于支持MCP协议的AI客户端,QueryNest 的配置示例:
{
"mcpServers": {
"QueryNest": {
"command": "uvx",
"args": ["--from", "/path/to/QueryNest", "--no-cache", "querynest-mcp"],
"cwd": "/path/to/QueryNest",
"env": {
"QUERYNEST_CONFIG_PATH": "/path/to/QueryNest/config.yaml",
"QUERYNEST_LOG_LEVEL": "INFO"
}
}
}
}
Windows 配置示例:
{
"mcpServers": {
"QueryNest": {
"command": "uvx",
"args": ["--from", "C:\\path\\to\\QueryNest", "--no-cache", "querynest-mcp"],
"cwd": "C:\\path\\to\\QueryNest",
"env": {
"QUERYNEST_CONFIG_PATH": "C:\\path\\to\\QueryNest\\config.yaml"
}
}
}
}
关键配置说明:
--from /path/to/QueryNest: 指定项目绝对路径--no-cache: 确保使用最新代码cwd: 设置工作目录为项目根目录querynest-mcp: 在 setup.py 中定义的入口点命令优势:
常见问题及解决方案: 问题 1:uvx 命令不存在
# 解决方案:安装uv工具
pip install uv
# 或使用官方安装脚本
curl -LsSf https://astral.sh/uv/install.sh | sh # Linux/macOS
# powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
# 验证安装
uvx --version
问题 2:配置文件未找到
# 检查配置文件是否存在
ls -la config.yaml
# 从示例创建配置文件
cp config.example.yaml config.yaml
# 设置环境变量
export QUERYNEST_CONFIG_PATH=/path/to/QueryNest/config.yaml
问题 3:MCP 服务连接失败
config.yaml 是否存在问题 4:MongoDB连接失败
# 检查MongoDB服务状态
python scripts/check_db.py
# 手动测试MongoDB连接
python -c "
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
print('MongoDB连接成功')
"
# 检查MongoDB服务是否运行
# Linux/macOS
sudo systemctl status mongod
# Windows
net start | findstr -i mongo
验证配置成功:
# 测试本地运行
cd /path/to/QueryNest
uvx --from . --no-cache querynest-mcp --help
# 检查项目结构
ls -la setup.py mcp_server.py config.yaml
# 验证入口点
python -c "
from mcp_server import cli_main
print('Entry point OK')
"
# 测试完整启动流程
uvx --from . --no-cache querynest-mcp --log-level INFO
QueryNest支持灵活的环境配置,您可以根据实际需求配置不同类型的实例:
mongodb:
instances:
prod-main:
name: "生产主库"
environment: "prod"
connection_string: "mongodb://admin:password@localhost:27017/admin"
database: "prod_database"
description: "生产环境主数据库"
status: "active"
tags: ["production", "primary"]
crm-prod:
name: "CRM生产库"
environment: "crm-prod"
connection_string: "mongodb://crm_user:${CRM_DB_PASSWORD}@crm-db.company.com:27017/admin"
database: "crm_database"
description: "CRM系统生产数据库"
status: "active"
tags: ["crm", "production"]
beijing-cluster:
name: "北京集群"
environment: "beijing"
connection_string: "mongodb://readonly:${BEIJING_DB_PASSWORD}@beijing-mongo.company.com:27017/admin"
database: "beijing_database"
description: "北京地域MongoDB集群"
status: "active"
tags: ["beijing", "cluster"]
security:
permissions:
allowed_operations:
- "find"
- "count"
- "aggregate"
- "distinct"
forbidden_operations:
- "insert"
- "update"
- "delete"
limits:
max_documents: 1000
query_timeout: 30
data_masking:
enabled: true
sensitive_field_patterns:
- "password"
- "email"
- "phone"
支持多实例独立的环境变量管理:
# .env 文件示例
# 传统环境密码
PROD_DB_PASSWORD=your_prod_password
TEST_DB_PASSWORD=your_test_password
DEV_DB_PASSWORD=your_dev_password
# 业务系统密码
CRM_DB_PASSWORD=your_crm_password
ORDER_DB_PASSWORD=your_order_password
USER_CENTER_DB_PASSWORD=your_user_center_password
# 地域集群密码
BEIJING_DB_PASSWORD=your_beijing_password
SHANGHAI_DB_PASSWORD=your_shanghai_password
GUANGZHOU_DB_PASSWORD=your_guangzhou_password
# 自定义实例密码
CUSTOM_INSTANCE_PASSWORD=your_custom_password
端口说明:
QUERYNEST_MCP_PORT 配置端口metadata:
instance_id: "dev-local" # 可以是任意环境标识
database_name: "querynest_metadata"
collections:
instances: "instances"
databases: "databases"
collections: "collections"
fields: "fields"
query_history: "query_history"
QueryNest/
├── src/
│ ├── __init__.py
│ ├── config.py # 配置管理
│ ├── mcp_server.py # MCP服务器主文件
│ ├── database/ # 数据库模块
│ │ ├── __init__.py
│ │ ├── connection_manager.py
│ │ ├── metadata_manager.py
│ │ └── query_engine.py
│ ├── scanner/ # 扫描模块
│ │ ├── __init__.py
│ │ ├── structure_scanner.py
│ │ └── semantic_analyzer.py
│ └── mcp_tools/ # MCP工具
│ ├── __init__.py
│ ├── instance_discovery.py
│ ├── database_discovery.py
│ ├── collection_analysis.py
│ ├── semantic_management.py
│ ├── query_generation.py
│ └── query_confirmation.py
├── config.yaml # 配置文件
├── requirements.txt # 依赖列表
└── README.md # 项目文档
class NewTool:
def get_tool_definition(self) -> Tool:
# 定义工具接口
pass
async def execute(self, arguments: Dict[str, Any]) -> List[TextContent]:
# 实现工具逻辑
pass
# 在 mcp_server.py 中注册
new_tool = NewTool(...)
self.tools["new_tool"] = new_tool
# 在 semantic_analyzer.py 中添加
self.semantic_patterns.update({
"custom_field": {
"patterns": [r"custom_.*"],
"meaning": "自定义字段",
"confidence": 0.8
}
})
def analyze_custom_semantics(self, field_info):
# 实现自定义语义分析逻辑
pass
python -m pytest tests/ -v
# 测试连接管理器
python -m pytest tests/unit/test_connection_manager.py -v
# 测试查询引擎
python -m pytest tests/unit/test_query_engine.py -v
# 测试元数据管理器
python -m pytest tests/unit/test_metadata_manager.py -v
# 测试数据库扫描器
python -m pytest tests/unit/test_database_scanner.py -v
# 测试MCP工具
python -m pytest tests/unit/test_mcp_tools.py -v
pip install pytest-cov
python -m pytest tests/ --cov=src --cov-report=html
# 验证启动环境
python -c "
from utils.startup_validator import validate_startup_environment
print(validate_startup_environment())
"
| 属性 | 详情 |
|---|---|
| 模型类型 | 基于MCP(Model Context Protocol)的MongoDB多实例查询服务 |
| 训练数据 | 未提及 |
QueryNest/
├── src/
│ ├── __init__.py
│ ├── config.py # 配置管理
│ ├── mcp_server.py # MCP服务器主文件
│ ├── database/ # 数据库模块
│ │ ├── __init__.py
│ │ ├── connection_manager.py
│ │ ├── metadata_manager.py
│ │ └── query_engine.py
│ ├── scanner/ # 扫描模块
│ │ ├── __init__.py
│ │ ├── structure_scanner.py
│ │ └── semantic_analyzer.py
│ └── mcp_tools/ # MCP工具
│ ├── __init__.py
│ ├── instance_discovery.py
│ ├── database_discovery.py
│ ├── collection_analysis.py
│ ├── semantic_management.py
│ ├── query_generation.py
│ └── query_confirmation.py
├── config.yaml # 配置文件
├── requirements.txt # 依赖列表
└── README.md # 项目文档
class NewTool:
def get_tool_definition(self) -> Tool:
# 定义工具接口
pass
async def execute(self, arguments: Dict[str, Any]) -> List[TextContent]:
# 实现工具逻辑
pass
# 在 mcp_server.py 中注册
new_tool = NewTool(...)
self.tools["new_tool"] = new_tool
# 在 semantic_analyzer.py 中添加
self.semantic_patterns.update({
"custom_field": {
"patterns": [r"custom_.*"],
"meaning": "自定义字段",
"confidence": 0.8
}
})
def analyze_custom_semantics(self, field_info):
# 实现自定义语义分析逻辑
pass
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
⚠️ 重要提示
- 确保只允许读取操作
- 配置适当的查询限制
- 启用数据脱敏功能
- 使用SSL/TLS连接
- 配置防火墙规则
- 定期更新密码
- 避免记录敏感信息
- 定期清理查询历史
- 监控异常访问
💡 使用建议
- 合理配置连接池大小
- 启用连接复用
- 监控连接健康状态
- 使用适当的索引
- 限制查询结果数量
- 避免复杂的聚合操作
- 启用元数据缓存
- 缓存常用查询结果
- 定期清理过期缓存
# 检查MongoDB服务状态
sudo systemctl status mongod
# 测试网络连接
telnet
# 验证认证信息
mongo --host --port -u -p
# 验证配置文件
python -c "
from utils.config_validator import ConfigValidator
validator = ConfigValidator()
print(validator.validate_config_file('config.yaml'))
"
cd /path/to/QueryNest
# 重新安装依赖
pip install -r requirements.txt --force-reinstall
# 检查Python版本
python --version
# 检查关键包安装状态
pip list | grep -E "(mcp|pymongo|motor)"
# 检查文件是否存在
ls -la config.yaml mcp_server.py
# 检查目录权限
ls -ld . logs/
# 修复权限(如果需要)
chmod 755 .
chmod 644 config.yaml
chmod +x mcp_server.py
# 创建日志目录(如果不存在)
mkdir -p logs/
查看详细日志:
# 查看应用日志
tail -f logs/querynest.log
# 查看错误日志
tail -f logs/error.log
# 查看系统日志
journalctl -u querynest -f
# 查看系统资源使用
top
htop
# 查看MongoDB性能
mongotop
mongostat
# 查看网络连接
netstat -an | grep :27017
我们欢迎各种形式的贡献!请查看 CONTRIBUTING.md 了解如何参与项目开发。
git checkout -b feature/AmazingFeature)python -m pytest tests/ -v)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)# 克隆项目
git clone
cd QueryNest
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# 安装开发依赖
pip install -r requirements.txt
pip install pytest pytest-cov black flake8
# 运行代码格式化
black src/ tests/
# 运行代码检查
flake8 src/ tests/
感谢所有贡献者和以下开源项目:
QueryNest - 让MongoDB查询变得简单智能 🚀