数据库适配器

Model Context Protocol (MCP)系统的数据库适配器,支持内存存储和MongoDB存储,用于管理AI模型元数据和用户账户。

  • by Jensinjames
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 jensinjames/mcp-server-setup

使用说明

模型上下文协议数据库适配器

本指南解释了如何为模型上下文协议(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+版本)

安装

  1. 如果你还没有安装MongoDB:

    # Ubuntu/Debian
    sudo apt-get install mongodb
    
    # macOS with Homebrew
    brew install mongodb-community
    
  2. 启动MongoDB服务:

    # Ubuntu/Debian
    sudo systemctl start mongodb
    
    # macOS
    brew services start mongodb-community
    
  3. 安装所需的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)用示例数据初始化数据库。这对于开发和生产环境中的初始设置非常有用。

脚本:

  1. 连接到配置的数据库
  2. 如果不存在示例模型,则创建示例模型
  3. 如果不存在,则创建默认用户
  4. 输出默认凭据(仅用于开发)

添加自定义适配器

要添加新的数据库适配器,请执行以下操作:

  1. 为您的适配器创建一个新文件(例如。, src/db/postgres-adapter.ts)
  2. 实施 DatabaseAdapter 接口
  3. 更新 DatabaseFactory 类以包含您的适配器
  4. 将适配器类型添加到 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
  // ...
}