插件式数据库协议服务器

一个基于插件架构的模型上下文协议(MCP)服务器实现,支持多种数据库的动态加载和类型安全操作。

  • by Nam088
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Nam088/mcp-server

使用说明

@nam088/mcp服务器

一个基于插件架构的专业MCP(模型上下文协议)服务器实现。

特性

  • 基于插件的体系结构:模块化设计,带有独立插件
  • 工作区结构:每个插件都是一个单独的npm包,有自己的依赖项
  • 动态加载:从配置或环境变量加载插件
  • 类型安全:完全支持TypeScript
  • 可扩展:易于创建自定义插件

建筑

此项目使用monorepo工作区结构,其中:

  • 核心系统 (@nam088/mcp-core):插件接口和注册表
  • 插件 (例如。, @nam088/mcp-redis):具有自己依赖关系的独立包
  • 主服务器:加载和编排插件

看 建筑.md 获取详细的架构文档。

安装

npm install

建筑

# Build all packages
npm run build

# Clean build artifacts
npm run clean

用法

在项目中安装所需的软件包:

npm install @nam088/mcp-core @nam088/mcp-mysql @nam088/mcp-sql-server @nam088/mcp-mongodb @nam088/mcp-postgres @nam088/mcp-redis

创建您的MCP服务器:

import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { PluginRegistry } from '@nam088/mcp-core';
import { MysqlPlugin } from '@nam088/mcp-mysql';
import { SqlServerPlugin } from '@nam088/mcp-sql-server';
import { MongoDBPlugin } from '@nam088/mcp-mongodb';
import { PostgresPlugin } from '@nam088/mcp-postgres';
import { RedisPlugin } from '@nam088/mcp-redis';

const server = new Server(
  { name: 'my-mcp-server', version: '1.0.0' },
  { capabilities: { tools: {} } }
);

const registry = new PluginRegistry(server);

// Register plugins with connection strings (recommended)
await registry.registerPlugin(MongoDBPlugin, {
  uri: process.env.MONGODB_URI || 'mongodb://localhost:27017',
  mode: 'READONLY',
});

await registry.registerPlugin(PostgresPlugin, {
  url: process.env.POSTGRES_URL || 'postgresql://postgres:password@localhost:5432/mydb',
  mode: 'READONLY',
});

await registry.registerPlugin(RedisPlugin, {
  url: process.env.REDIS_URL || 'redis://localhost:6379',
});

// MySQL (using individual config - connection string not yet supported)
await registry.registerPlugin(MysqlPlugin, {
  host: process.env.MYSQL_HOST || 'localhost',
  port: parseInt(process.env.MYSQL_PORT || '3306'),
  user: process.env.MYSQL_USER || 'root',
  password: process.env.MYSQL_PASSWORD,
  database: process.env.MYSQL_DATABASE,
  mode: 'READONLY',
});

// SQL Server (using individual config)
await registry.registerPlugin(SqlServerPlugin, {
  server: process.env.MSSQL_HOST || 'localhost',
  port: parseInt(process.env.MSSQL_PORT || '1433'),
  user: process.env.MSSQL_USER || 'sa',
  password: process.env.MSSQL_PASSWORD,
  database: process.env.MSSQL_DATABASE,
  mode: 'READONLY',
});

// Start server
const transport = new StdioServerTransport();
await server.connect(transport);

配置示例

MCP服务器配置(适用于Cursor/Claude桌面)

添加到您的 ~/.cursor/mcp.json 或Claude桌面配置:

{
  "mcpServers": {
    "mongodb": {
      "command": "npx",
      "args": ["-y", "@nam088/mcp-mongodb"],
      "env": {
        "MONGODB_URI": "mongodb://admin:admin@localhost:27017/db_name?authMechanism=SCRAM-SHA-256",
        "MONGODB_DATABASE": "mydb",
        "MONGODB_MODE": "READONLY"
      }
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@nam088/mcp-postgres"],
      "env": {
        "POSTGRES_URL": "postgresql://postgres:password@localhost:5432/mydb",
        "POSTGRES_MODE": "READONLY"
      }
    },
    "redis": {
      "command": "npx",
      "args": ["-y", "@nam088/mcp-redis"],
      "env": {
        "REDIS_URL": "redis://localhost:6379"
      }
    },
    "mysql": {
      "command": "npx",
      "args": ["-y", "@nam088/mcp-mysql"],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "root",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "mydb",
        "MYSQL_MODE": "READONLY"
      }
    },
    "sql-server": {
      "command": "npx",
      "args": ["-y", "@nam088/mcp-sql-server"],
      "env": {
        "MSSQL_HOST": "localhost",
        "MSSQL_PORT": "1433",
        "MSSQL_USER": "sa",
        "MSSQL_PASSWORD": "your_password",
        "MSSQL_DATABASE": "mydb",
        "MSSQL_MODE": "READONLY"
      }
    }
  }
}

插件配置(用于动态加载)

创建一个 plugins.config.json 动态插件加载文件:

[
  {
    "package": "@nam088/mcp-mongodb",
    "export": "MongoDBPlugin",
    "enabled": true,
    "config": {
      "uri": "mongodb://admin:admin@localhost:27017/db_name",
      "mode": "READONLY"
    }
  },
  {
    "package": "@nam088/mcp-postgres",
    "export": "PostgresPlugin",
    "enabled": true,
    "config": {
      "url": "postgresql://postgres:password@localhost:5432/mydb",
      "mode": "READONLY"
    }
  },
  {
    "package": "@nam088/mcp-redis",
    "export": "RedisPlugin",
    "enabled": true,
    "config": {
      "url": "redis://localhost:6379"
    }
  },
  {
    "package": "@nam088/mcp-mysql",
    "export": "MysqlPlugin",
    "enabled": true,
    "config": {
      "host": "localhost",
      "port": 3306,
      "user": "root",
      "password": "your_password",
      "database": "mydb",
      "mode": "READONLY"
    }
  },
  {
    "package": "@nam088/mcp-sql-server",
    "export": "SqlServerPlugin",
    "enabled": true,
    "config": {
      "server": "localhost",
      "port": 1433,
      "user": "sa",
      "password": "your_password",
      "database": "mydb",
      "mode": "READONLY"
    }
  }
]

可用插件

MySQL插件(@nam088/mcp-mysql)

全面的MySQL/MariaDB插件,包含20多种工具。

工具:

  • mysql_query -使用参数执行SELECT查询
  • mysql_execute -执行插入/更新/删除/DDL(仅写入或完全模式)
  • mysql_list_databases -列出所有数据库
  • mysql_list_tables -列出数据库中的表
  • mysql_describe_table -获取表结构
  • mysql_list_indexes -列出表索引
  • mysql_list_constraints -列出表约束
  • mysql_explain_query -查询执行计划
  • mysql_processlist -查看正在运行的查询
  • mysql_kill_query -终止正在运行的查询(WRITEONLY或FULL模式)
  • mysql_optimize_table -优化表(WRITEONLY或FULL模式)
  • mysql_analyze_table -分析表(WRITEONLY或FULL模式)
  • mysql_list_views -列表视图
  • mysql_list_procedures -列出存储过程
  • mysql_list_functions -列出存储的函数
  • mysql_list_triggers -列表触发器
  • 还有更多。..

依赖关系: mysql2
模式: 只读、只读、满
请参阅: 包/mysql/README.md

SQL Server插件(@nam088/mcp-sql-server)

带有全面工具的Microsoft SQL Server插件。

工具:

  • sqlserver_query -执行SELECT查询
  • sqlserver_execute -执行插入/更新/删除/DDL(完全模式)
  • sqlserver_list_databases -列出所有数据库
  • sqlserver_list_tables -列出架构中的表
  • sqlserver_describe_table -获取表结构
  • sqlserver_list_schemas -列出所有架构
  • sqlserver_list_indexes -列出表索引
  • sqlserver_list_constraints -列出表约束
  • sqlserver_explain_query -查询执行计划
  • sqlserver_active_sessions -查看活动会话
  • sqlserver_kill_session -终止会话(完全模式)
  • sqlserver_rebuild_index -重建索引(完全模式)
  • sqlserver_update_statistics -更新统计信息(完全模式)
  • 还有更多。..

依赖关系: mssql
模式: 只读,已满
请参阅: 包/sql-server/README.md

MongoDB插件(@nam088/mcp-mongodb)

支持CRUD和聚合的MongoDB插件。

工具:

  • mongodb_find -通过过滤、排序、投影查找文档
  • mongodb_count -清点文件
  • mongodb_aggregate -运行聚合管道
  • mongodb_insert_one -插入单个文档(完整模式)
  • mongodb_insert_many -插入多个文档(完整模式)
  • mongodb_update_one -更新单个文档(完整模式)
  • mongodb_update_many -更新多个文档(完整模式)
  • mongodb_delete_one -删除单个文档(完整模式)
  • mongodb_delete_many -删除多个文档(完整模式)
  • mongodb_list_databases -列出所有数据库
  • mongodb_list_collections -列出数据库中的集合
  • mongodb_collection_stats -获取收藏统计信息
  • mongodb_list_indexes -列出集合索引
  • mongodb_create_index -创建索引(完全模式)
  • mongodb_drop_index -跌落指数(满模式)
  • 还有更多。..

依赖关系: mongodb
模式: 只读,已满
请参阅: 软件包/mongodb/README.md

重定向插件(@nam088/mcp-redis)

Redis插件,支持所有数据类型。

工具:

  • redis_get -按键获取值
  • redis_set -使用可选TTL设置值
  • redis_del -删除密钥
  • redis_keys -按模式查找密钥
  • redis_info -获取服务器信息
  • 还有更多。..(哈希、列表、集合、排序集合操作)

依赖关系: redis
请参阅: packages/redis/README.md

PostgreSQL插件(@nam088/mcp-postgres)

PostgreSQL插件,全面支持SQL。

工具:

  • postgres_query -执行SELECT查询
  • postgres_execute -执行插入/更新/删除/DDL(完全模式)
  • postgres_list_tables -列出架构中的所有表
  • postgres_describe_table -获取表结构
  • postgres_list_schemas -列出所有架构
  • postgres_list_indexes -列出表索引
  • postgres_database_info -获取数据库信息

依赖关系: pg
请参阅: packages/postgres/README.md

创建自定义插件

1.创建插件包

mkdir -p packages/mydb/src
cd packages/mydb
npm init -y

2.安装package.json

{
  "name": "@nam088/mcp-mydb",
  "version": "0.1.0",
  "type": "module",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "scripts": {
    "build": "tsc",
    "clean": "rm -rf dist",
    "type-check": "tsc --noEmit"
  },
  "peerDependencies": {
    "@modelcontextprotocol/sdk": "^1.21.1",
    "@nam088/mcp-core": "^0.1.0"
  },
  "dependencies": {
    "mydb-client": "^1.0.0"
  },
  "devDependencies": {
    "@types/node": "^22.10.2",
    "typescript": "^5.7.2"
  }
}

3.创建tsconfig.json

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src/**/*"]
}

4.实现插件

// packages/mydb/src/index.ts
import { PluginBase, PluginConfig, PluginContext } from '@nam088/mcp-core';
import { z } from 'zod';

export class MyDBPlugin extends PluginBase {
  readonly metadata: PluginConfig = {
    name: 'mydb',
    version: '0.1.0',
    description: 'MyDB plugin for MCP',
  };

  async initialize(context: PluginContext): Promise<void> {
    await super.initialize(context);
    // Initialize your DB connection
  }

  register(context: PluginContext): void {
    const { server } = context;
    
    server.registerTool('mydb_query', {
      description: 'Query MyDB',
      inputSchema: {
        query: z.string().describe('SQL query'),
      }
    }, async ({ query }) => {
      // Implement your tool
      return {
        content: [{ type: 'text', text: 'Result' }]
      };
    });
  }

  async cleanup(): Promise<void> {
    await super.cleanup();
    // Cleanup resources
  }
}

5.构建和使用

# Build your plugin
cd packages/mydb
npm run build

# Use it in your server
npm install @nam088/mcp-mydb

发展

# Build all packages
npm run build

# Type checking
npm run type-check

# Linting
npm run lint
npm run lint:fix

# Formatting
npm run format
npm run format:check

# Clean build artifacts
npm run clean

项目结构

mcp-server/
├── packages/
│   ├── core/                    # @nam088/mcp-core
│   │   ├── src/
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── mysql/                   # @nam088/mcp-mysql
│   │   ├── src/
│   │   ├── bin/
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── sql-server/              # @nam088/mcp-sql-server
│   │   ├── src/
│   │   ├── bin/
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── mongodb/                 # @nam088/mcp-mongodb
│   │   ├── src/
│   │   ├── bin/
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── redis/                   # @nam088/mcp-redis
│   │   ├── src/
│   │   ├── bin/
│   │   ├── package.json
│   │   └── tsconfig.json
│   └── postgres/                # @nam088/mcp-postgres
│       ├── src/
│       ├── bin/
│       ├── package.json
│       └── tsconfig.json
├── package.json                # Root package with workspaces
├── tsconfig.json               # Shared TypeScript config
├── ARCHITECTURE.md             # Architecture documentation
└── QUICK_START.md              # Vietnamese quick start guide

这种架构的好处

  1. 插件独立性:每个插件都有自己的依赖项
    • MySQL: mysql2
    • SQL服务器: mssql
    • MongoDB: mongodb
    • Redis: redis
    • PostgreSQL: pg
  2. 选择性安装:只安装您需要的插件
  3. 无依赖冲突:插件不会相互干扰
  4. 轻松发布:每个插件都可以独立发布到npm
  5. 柔性加荷:选择静态导入或动态加载
  6. 类型安全:所有软件包都完全支持TypeScript
  7. 模式控制:只读、只读(MySQL)或完整模式以确保安全
  8. 独立服务器:每个插件都可以作为独立的MCP服务器运行

许可证

麻省理工学院

作者

nam088