使用说明
模型上下文协议数据库适配器
本指南解释了如何为模型上下文协议(MCP)系统使用数据库适配器,特别关注MongoDB适配器的实现。
目录
概述
MCP系统使用灵活的数据库抽象层,允许不同的存储后端,同时保持一致的API。系统目前支持:
- 内存存储(用于开发/测试)
- MongoDB存储(用于生产)
数据库适配器管理两个主要实体:
- 模型:AI模型元数据
- 用户:系统用户帐户
数据库适配器接口
所有数据库适配器都实现 DatabaseAdapter 接口(src/db/database-adapter.ts),提供了以下方法:
连接方法
connect():连接到数据库disconnect():断开与数据库的连接isConnected():检查连接状态
模型操作
getAllModels():获取所有模型getModelById(id):获取特定型号createModel(model):创建新模型updateModel(id, updates):更新模型deleteModel(id):删除模型
用户操作
getAllUsers():获取所有用户getUserById(id):按ID获取用户getUserByUsername(username):按用户名获取用户createUser(user):创建新用户updateUser(id, updates):更新用户deleteUser(id):删除用户
可用适配器
内存适配器
内存适配器(src/db/memory-adapter.ts)将数据存储在内存中,主要用于开发和测试。应用程序重新启动时数据丢失。
MongoDB适配器
MongoDB适配器(src/db/mongodb-adapter.ts)将数据存储在MongoDB数据库中,提供适合生产环境的持久存储。
主要特点:
- 连接池
- 自动ID管理
- 为性能建立适当的索引
- 常见场景的错误处理
- 模型的版本跟踪
设置MongoDB
先决条件
- MongoDB服务器(4.4+版本)
- Node.js(16+版本)
安装
-
如果你还没有安装MongoDB:
# Ubuntu/Debian sudo apt-get install mongodb # macOS with Homebrew brew install mongodb-community -
启动MongoDB服务:
# Ubuntu/Debian sudo systemctl start mongodb # macOS brew services start mongodb-community -
安装所需的npm包:
npm install mongodb dotenv bcrypt jsonwebtoken
初始设置
运行数据库安装脚本以初始化数据库:
# Copy the example environment file
cp .env.example .env
# Edit the environment variables as needed
nano .env
# Run the setup script
npx ts-node src/scripts/db-setup.ts
数据库配置
数据库配置通过环境变量直接或通过 .env 文件:
# Database type: 'memory' or 'mongodb'
DB_TYPE=mongodb
# MongoDB connection URL
DB_URL=mongodb://localhost:27017
# Database name
DB_NAME=mcp
使用示例
连接到MongoDB
import { DatabaseFactory } from './db/database-factory.js';
// Create MongoDB adapter
const db = DatabaseFactory.createAdapter({
type: 'mongodb',
url: 'mongodb://localhost:27017',
dbName: 'mcp'
});
// Connect to database
await db.connect();
// Use the database
const models = await db.getAllModels();
console.log(models);
// Disconnect when done
await db.disconnect();
使用模型
// Create a new model
const newModel = await db.createModel({
name: 'Claude 3.5 Sonnet',
provider: 'Anthropic',
parameters: 235000000000,
metadata: {
releaseDate: '2025-01-15',
contextWindow: 200000
}
});
// Get a model by ID
const model = await db.getModelById(newModel.id);
// Update a model
const updatedModel = await db.updateModel(model.id, {
parameters: 240000000000,
metadata: {
...model.metadata,
contextWindow: 250000
}
});
// Delete a model
const deleted = await db.deleteModel(model.id);
与用户合作
import { hashPassword } from './utils/auth.js';
// Create a new user
const newUser = await db.createUser({
username: 'alice',
password: await hashPassword('securePassword123'),
role: 'admin'
});
// Get a user by username
const user = await db.getUserByUsername('alice');
// Update a user
const updatedUser = await db.updateUser(user.id, {
role: 'user'
});
// Delete a user
const deleted = await db.deleteUser(user.id);
数据库初始化
该系统包括一个设置脚本(src/scripts/db-setup.ts)用示例数据初始化数据库。这对于开发和生产环境中的初始设置非常有用。
脚本:
- 连接到配置的数据库
- 如果不存在示例模型,则创建示例模型
- 如果不存在,则创建默认用户
- 输出默认凭据(仅用于开发)
添加自定义适配器
要添加新的数据库适配器,请执行以下操作:
- 为您的适配器创建一个新文件(例如。,
src/db/postgres-adapter.ts) - 实施
DatabaseAdapter接口 - 更新
DatabaseFactory类以包含您的适配器 - 将适配器类型添加到
DatabaseType类型
新适配器的示例骨架:
import { DatabaseAdapter, ModelData, UserData } from './database-adapter.js';
export class CustomAdapter implements DatabaseAdapter {
async connect(): Promise<void> {
// Implementation
}
async disconnect(): Promise<void> {
// Implementation
}
isConnected(): boolean {
// Implementation
}
// Implement all model and user operations
// ...
}