Konect数据库MCP服务器
为Drivio应用程序提供数据库查询功能的MCP(模型上下文协议)服务器。此服务器允许您使用主应用程序中使用的相同模型和模式查询MongoDB集合。
✅ 当前状态
完全工作:
- ✅ 所有19款车型均已自动加载并注册
- ✅ MongoDB连接(本地和Atlas)
- ✅ 数据库查询工作正常
- ✅ 模型验证和错误处理
- ✅ 通过真实数据库查询进行测试和验证
测试型号: 所有19个模型均已成功加载:插件、ApiKey、BlockedDate、预订、日历、对话、文档、收藏夹、密钥库、消息、通知、支付方式、支付方法、审核、角色、支持请求、交易、用户、车辆
特性
- ✅ 自动模型加载:自动从driveio web服务加载所有19款Mongoose车型
- ✅ 真实数据库查询:具有完全查询支持的直接MongoDB连接
- ✅ MongoDB查询运算符:支持$gt、$gte、$lt、$lte、$in、$ne、$regex等。
- ✅ 现场投影:在结果中包含/排除特定字段
- ✅ 排序和分页:完全支持排序和分页(跳过/限制)
- ✅ 人口:填充引用的文档(例如,预订中的客人、主人、车辆)
- ✅ 类型安全:已验证的模型名称和查询参数
- ✅ 错误处理:全面的错误处理,信息清晰
可用模型
服务器支持查询以下模型:
- 用户 -用户帐户和配置文件
- 车辆 -车辆列表
- 预订 -租赁预订
- 交易 -付款交易
- 审查 -用户和车辆评论
- 附加组件 -附加服务/功能
- 对话 -用户对话
- 消息 -聊天信息
- 文档 -上传文件
- 支付方式 -付款方式
- 付款方式 -支付方式
- 通知 -用户通知
- 最爱 -用户收藏夹
- 支持请求 -支持票
- 日历 -可用性日历
- 封锁日期 -阻止日期
- 角色 -用户角色
- 密钥库 -身份验证密钥
- ApiKey -API密钥
安装
- 安装依赖项:
npm install- 配置环境变量:
cp env.example .env
# Edit .env and set your MONGODB_CONNECTION_STRING- 构建TypeScript代码:
npm run build用法
运行服务器
npm start或者直接运行:
node build/index.js服务器在stdio上运行,并通过模型上下文协议进行通信。
测试MCP服务器
快速测试
构建后,用一个简单的查询测试服务器:
cd /home/mrinal/Desktop/Drivio-Application/KONECT_MCP_Server
MONGODB_CONNECTION_STRING="your-connection-string" NODE_ENV=development SALT_ROUNDS=10 \
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"query_database","arguments":{"model":"User","query":{},"limit":1}}}' | \
node build/index.js您应该看到:
Connected to MongoDBModels loaded successfullyRegistered models: [ 'AddOn', 'ApiKey', 'BlockedDate', 'Booking', ... ]- 带有查询结果的JSON响应
步骤1:验证构建成功
运行后 npm run build,检查是否已创建构建目录:
ls -la build/您应该看到:
build/index.js(可执行)build/loadModels.js
步骤2:测试服务器启动
运行服务器并检查启动消息:
MONGODB_CONNECTION_STRING="your-connection-string" NODE_ENV=development SALT_ROUNDS=10 \
node build/index.js预期产量:
Connected to MongoDB
Models loaded successfully
Registered models: [
'AddOn', 'ApiKey',
'BlockedDate', 'Booking',
'Calendar', 'Conversation',
'Document', 'Favorite',
'Keystore', 'Message',
'Notification', 'PaymentMethod',
'PayoutMethod', 'Review',
'Role', 'SupportRequest',
'Transaction', 'User',
'Vehicle'
]
Konect Database MCP Server running on stdio注: 服务器将等待stdin上的输入。按Ctrl+C退出。
步骤3:测试模型加载
验证所有19个模型是否已加载:
MONGODB_CONNECTION_STRING="your-connection-string" NODE_ENV=development SALT_ROUNDS=10 \
node build/index.js 2>&1 | grep "Registered models"您应该看到列出的所有19个型号。
步骤4:测试数据库查询
使用JSON-RPC测试一个简单的查询:
MONGODB_CONNECTION_STRING="your-connection-string" NODE_ENV=development SALT_ROUNDS=10 \
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"query_database","arguments":{"model":"User","query":{},"limit":1}}}' | \
node build/index.js 2>&1 | grep -A 20 '"success"'预期: JSON响应 "success": true 以及查询结果。
步骤5:测试不同的模型
测试各种模型以确保它们都能正常工作:
# Test User model
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"query_database","arguments":{"model":"User","query":{"status":"active"},"limit":2}}}' | \
MONGODB_CONNECTION_STRING="your-connection-string" NODE_ENV=development SALT_ROUNDS=10 \
node build/index.js 2>&1 | tail -5
# Test Vehicle model
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"query_database","arguments":{"model":"Vehicle","query":{"isActive":true},"limit":2}}}' | \
MONGODB_CONNECTION_STRING="your-connection-string" NODE_ENV=development SALT_ROUNDS=10 \
node build/index.js 2>&1 | tail -5步骤6:使用过滤器和排序进行测试
测试高级查询功能:
# Test with filter and sort
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"query_database","arguments":{"model":"User","query":{"status":"active"},"sort":{"createdAt":-1},"limit":3}}}' | \
MONGODB_CONNECTION_STRING="your-connection-string" NODE_ENV=development SALT_ROUNDS=10 \
node build/index.js 2>&1 | grep -A 10 '"success"'步骤7:验证数据库连接
在测试查询之前,请确保:
- MongoDB是可访问的(本地或Atlas)
- 连接字符串正确
- 数据库包含数据
手动测试MongoDB连接:
# For MongoDB Atlas
mongosh "mongodb+srv://user:password@cluster.mongodb.net/database"
# For local MongoDB
mongosh "mongodb://localhost:27017/database"步骤8:使用MCP客户端(Claude Desktop等)
要与Claude Desktop等MCP客户端一起使用:
- 将服务器添加到MCP客户端配置中(通常在
~/.config/Claude/claude_desktop_config.json):
{
"mcpServers": {
"konect-database": {
"command": "/home/mrinal/.nvm/versions/node/v18.20.8/bin/node",
"args": [
"/home/mrinal/Desktop/Drivio-Application/KONECT_MCP_Server/build/index.js"
],
"env": {
"MONGODB_CONNECTION_STRING": "mongodb+srv://user:password@cluster.mongodb.net/database",
"NODE_ENV": "development",
"SALT_ROUNDS": "10"
}
}
}
}重要提示:
- 使用Node.js的完整路径(或确保
node在PATH中) - 使用绝对路径
build/index.js - 包含
NODE_ENV和SALT_ROUNDS用于模型加载 - 使用实际的MongoDB连接字符串
- 完全重新启动克劳德桌面
- 通过询问“列出所有可用的MCP工具”来验证工具是否可用
- 这
query_database工具现在应该可用
故障排除
构建错误:
- 跑
npm install确保所有依赖项都已安装 - 检查是否安装了TypeScript:
npm list typescript - 验证Node.js版本:
node --version(应大于等于18.0.0)
运行时错误:
MongoDB连接错误:
- 检查MongoDB是否正在运行:
mongosh --version或mongo --version - 验证中的连接字符串
.env - 手动测试连接:
mongosh "your-connection-string"
找不到模型错误:
- 检查所有19个型号是否已注册:在stderr输出中查找“已注册型号:”
- 确保
drivio-web-service/database/mongoose/models目录存在 - 验证
drivio-web-service/config.js存在(模型需要它来进行saltRound) - 检查一下
NODE_ENV和SALT_ROUNDS设置环境变量
未加载的型号:
- 模型使用CommonJS并要求
config.js来自driveio web服务 - 确保
drivio-web-service目录位于正确的相对路径:../../drivio-web-service从build/loadModels.js - 检查一下
keys/private.pem和keys/public.pem存在于drivio web服务中(config.js读取它们) - 在模型加载之前验证MongoDB连接是否已建立
工具:查询_数据库
使用MongoDB查询语法查询数据库。
参数
- 模型 (必填):要查询的车型名称(例如,“用户”、“车辆”、“预订”)
- 怎么翻译 (必填):MongoDB查询对象
- 投影 (可选):要包含/排除的字段
- 排序 (可选):排序顺序
- 限制 (可选):最大结果数(默认值:100,最大值:1000)
- 跳过 (可选):要跳过的文档数(用于分页)
- 填充 (可选):要填充的字段名数组
查询示例
查询活跃用户:
{
"model": "User",
"query": {
"status": "active"
},
"limit": 10
}按类别查询车辆:
{
"model": "Vehicle",
"query": {
"category": "SUV",
"isActive": true,
"status": "active"
},
"sort": {
"createdAt": -1
},
"limit": 20
}查询具有日期范围的预订:
{
"model": "Booking",
"query": {
"startDate": {
"$gte": "2024-01-01T00:00:00.000Z"
},
"status": "confirmed"
},
"populate": ["guest", "host", "vehicle"],
"sort": {
"startDate": 1
}
}带字段投影的查询:
{
"model": "User",
"query": {
"status": "active"
},
"projection": {
"name": 1,
"emails": 1,
"status": 1
},
"limit": 50
}使用MongoDB运算符进行查询:
{
"model": "Review",
"query": {
"rating": {
"$gte": 4
}
},
"sort": {
"rating": -1,
"createdAt": -1
}
}使用正则表达式查询:
{
"model": "Vehicle",
"query": {
"make": {
"$regex": "Toyota",
"$options": "i"
}
}
}响应格式
服务器返回一个JSON对象:
- 成功:表示查询成功的布尔值
- 模型:查询的模型
- 怎么翻译:执行的查询
- 计数:返回的结果数
- 总数:匹配文档的总数
- 跳过:跳过的文档数
- 限制:最大结果数
- 还有更多:布尔值,指示是否有更多结果
- 结果:匹配文档数组
错误处理
服务器处理各种错误情况:
- 型号名称无效
- MongoDB连接错误
- 查询语法无效
- 数据库操作错误
所有错误均以MCP错误格式返回,并带有相应的错误代码。
发展
此服务器遵循与天气MCP服务器相同的模式,使用 @modelcontextprotocol/sdk MCP协议实现包。
许可证
麻省理工学院
