返回市场
数据库-MCP

数据库-MCP

作者:tomtomjskim0 星标更新:2025-11-06

项目介绍

数据库MCP服务器

🚀 企业级多数据库MCP服务器

Model Context Protocol (MCP) 服务器提供多数据库与AI代理之间安全高效的通信。

🌟 主要特性

  • 🏢 完美支持MSA环境:在一个MCP服务器中管理多个微服务数据库
  • 🔒 企业级安全性:只读模式、SSL/TLS、查询验证、审计日志
  • 🌐 云原生:完美支持AWS RDS、Azure Database、Google Cloud SQL
  • 高性能:连接池、智能缓存、并行查询处理
  • 🤖 AI友好:自然语言查询、模式分析、数据质量分析

概述

此项目使用Anthropic的Model Context Protocol,使像Claude这样的AI模型能够同时与多个数据库进行交互。在微服务架构(MSA)环境中,它整合了分散的数据库,并通过自然语言提供了跨数据库查询、模式探索、数据分析等功能的安全访问。

🚀 在Claude Code中使用

要在Claude Code环境中使用此DB MCP服务器,请参阅Claude Code使用指南

快速开始:

  1. 设置环境变量(.env 文件)
  2. 添加到MCP服务器设置
  3. 请求Claude“分析数据库模式”
  4. 使用自然语言查询和分析数据

支持的数据库

  • MySQL - 完全支持(本地、AWS RDS、Azure Database)
  • PostgreSQL - 完全支持(本地、AWS RDS、Azure Database、Google Cloud SQL)
  • 🔄 SQLite (开发中)
  • 🔄 ClickHouse (开发中)

数据库选择指南

MySQL vs PostgreSQL 对比

功能MySQLPostgreSQL
性能适合读优化、Web应用适合复杂查询、大数据处理
数据类型支持基本数据类型支持JSON、数组、自定义类型等
扩展性水平扩展(分片)优秀垂直扩展优秀,支持并行处理
ACID一致性使用InnoDB引擎时完全支持完全支持ACID
高级功能以基础功能为主支持窗口函数、CTE、全文搜索等
云支持AWS RDS、Azure DatabaseAWS RDS、Azure Database、Google Cloud SQL

自动选择适配器

系统会自动检测数据库类型:

  1. 显式指定DB_TYPE 环境变量或config.type设置
  2. 基于端口检测
    • 3306 → MySQL
    • 5432 → PostgreSQL
  3. 基于主机名检测
    • 主机名包含'mysql' → MySQL
    • 主机名包含'postgres' → PostgreSQL
  4. 默认值:MySQL

推荐使用案例

推荐使用MySQL:

  • Web应用后端
  • 以简单的CRUD操作为中心
  • 高并发读取操作
  • 利用现有的MySQL基础设施

推荐使用PostgreSQL:

  • 复杂的分析查询
  • JSON数据处理
  • 地理信息系统(PostGIS)
  • 数据完整性至关重要的应用程序

在MSA环境中的多数据库连接

在微服务架构(MSA)环境中,经常需要同时连接多个数据库。此MCP服务器支持两种方法:

方法1:单个MCP服务器支持多数据库(推荐)

在一个MCP服务器实例中管理多个数据库。

配置文件方式

创建db-config.json文件:

{
  "connections": {
    "user-service": {
      "name": "user-service",
      "type": "mysql",
      "host": "user-db.cluster-xxx.rds.amazonaws.com",
      "port": 3306,
      "user": "readonly_user",
      "password": "secure_password",
      "database": "user_service",
      "description": "用户服务数据库",
      "tags": ["微服务", "用户", "mysql"]
    },
    "order-service": {
      "name": "order-service",
      "type": "postgresql",
      "host": "order-db.cluster-yyy.rds.amazonaws.com",
      "port": 5432,
      "user": "readonly_user",
      "password": "secure_password",
      "database": "order_service",
      "description": "订单服务数据库",
      "tags": ["微服务", "订单", "postgresql"]
    }
  },
  "defaultConnection": "user-service"
}

环境变量方式

# 用户服务数据库
DB_USER_HOST=user-db.cluster-xxx.rds.amazonaws.com
DB_USER_PORT=3306
DB_USER_TYPE=mysql
DB_USER_USER=readonly_user
DB_USER_PASSWORD=secure_password
DB_USER_DATABASE=user_service
DB_USER_DESCRIPTION=用户服务数据库
DB_USER_TAGS=微服务,用户,mysql

# 订单服务数据库
DB_ORDER_HOST=order-db.cluster-yyy.rds.amazonaws.com
DB_ORDER_PORT=5432
DB_ORDER_TYPE=postgresql
DB_ORDER_USER=readonly_user
DB_ORDER_PASSWORD=secure_password
DB_ORDER_DATABASE=order_service
DB_ORDER_DESCRIPTION=订单服务数据库
DB_ORDER_TAGS=微服务,订单,postgresql

# 默认连接
DB_DEFAULT_CONNECTION=user

Claude Desktop配置(多数据库)

{
  "mcpServers": {
    "multi-database": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/multi-database-server.js"],
      "env": {
        "DB_CONFIG_FILE": "./db-config.json"
      }
    }
  }
}

Claude Code配置(多数据库 - 简化方式)

改进的配置方式:通过简化环境变量来简化配置(从8个减少到3个)

~/.claude.json文件中添加:

{
  "mcpServers": {
    "db-mcp": {
      "command": "node",
      "args": ["/绝对路径/to/db-mcp/dist/multi-index.js"],
      "env": {
        "DB_CONFIG_FILE": "/绝对路径/to/db-mcp/db-config.json",
        "LOG_LEVEL": "info",
        "MCP_SERVER_NAME": "db-mcp"
      }
    }
  }
}

核心改进点

  • 移除不必要的dummy环境变量:MYSQL_HOST, MYSQL_PORT, MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD 不再需要
  • 真正的多租户服务器:仅通过DB_CONFIG_FILE即可管理所有连接
  • 代码级别改进src/config/index.ts中自动检测multi-DB模式
  • 配置简化:环境变量减少62.5%(从8个减少到3个)

工作原理

  1. 存在DB_CONFIG_FILE环境变量时,自动切换到multi-DB模式
  2. 所有数据库连接信息由db-config.json文件管理
  3. 跳过环境变量验证逻辑,不需要dummy值

验证方法

# 验证MCP服务器连接
claude mcp list

# 运行健康检查
# 在Claude Code中: "运行db-mcp服务器的健康检查"

方法2:每个数据库单独的MCP服务器(简单方法)

为每个数据库运行单独的MCP服务器实例。

Claude Desktop配置(独立服务器)

{
  "mcpServers": {
    "user-db": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_TYPE": "mysql",
        "MYSQL_HOST": "user-db.cluster-xxx.rds.amazonaws.com",
        "MYSQL_DB": "user_service"
      }
    },
    "order-db": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_TYPE": "postgresql",
        "POSTGRES_HOST": "order-db.cluster-yyy.rds.amazonaws.com",
        "POSTGRES_DB": "order_service"
      }
    }
  }
}

多数据库专用功能

当在单个MCP服务器上使用多数据库时,提供的额外功能:

1. 跨数据库查询

"显示用户服务和订单服务的数据对比"
→ 从多个数据库检索数据并进行综合分析

2. 数据库标签过滤

"检查所有带有microservice标签的数据库状态"
→ 基于标签的数据库组管理

3. 综合健康检查

"一次性检查所有数据库连接状态"
→ 整体基础设施监控

4. 数据库间关系分析

"根据用户ID查找所有服务的相关数据"
→ 微服务间的数据追踪

🛠 提供的功能

🔗 1. 多数据库连接管理

  • 🏢 完美支持MSA:一个MCP服务器管理数十个微服务数据库
  • ⚡ 高性能连接池:每个数据库独立的连接池优化资源管理
  • 🔄 自动故障转移:连接中断时自动重新连接并恢复状态
  • 📊 实时监控:实时跟踪连接状态、活跃查询、响应时间
  • 🏷 标签基础管理:按环境、服务对数据库进行分组管理(生产、测试、分析等)

⚙️ 2. 高级查询执行工具(工具)

list_databases 🗂

  • 功能:查询所有已连接数据库的列表及状态
  • 输出:数据库类型、连接状态、标签、描述、性能指标
  • 用途:了解整体基础设施状况,进行健康检查

execute_query 🚀

  • 功能:在特定数据库上执行SQL查询
  • 输入:SQL字符串、目标数据库、参数
  • 输出:结构化的结果 + 执行指标
  • 安全:仅允许只读查询,防止SQL注入

cross_database_query 🔄

  • 功能:在多个数据库中同时执行查询并整合结果
  • 输入:每个数据库的查询数组
  • 输出:整合的结果集 + 性能比较
  • 用途:微服务间的跨数据库数据比较,综合报告

natural_language_query 🤖

  • 功能:将自然语言转换为SQL并执行
  • 输入:自然语言问题、目标数据库、上下文
  • 输出:生成的SQL + 执行结果 + 可靠性
  • AI支持:基于模式信息的智能查询生成

database_health_check 🏥

  • 功能:全面或个别数据库的状态检查
  • 输出:响应时间、连接池状态、性能指标
  • 用途:基础设施监控,早期发现故障

📋 3. 综合模式信息资源(资源)

database://connections 🔗

  • 内容:所有已连接数据库的详细信息
  • 包含:连接设置、状态、元数据、标签

database://{db_name}/schema 📊

  • 内容:特定数据库的完整模式信息
  • 包含:表、视图、过程、索引、外键关系
  • 支持:针对MySQL和PostgreSQL分别优化的分析

database://{db_name}/tables 📁

  • 内容:每个表的详细信息和统计
  • 包含:列信息、数据类型、约束、行数、大小

🔍 4. 高级数据分析工具

模式分析引擎

  • MySQL特化:优化查询information_schema
  • PostgreSQL特化:分析pg_catalog及扩展信息
  • 性能优化:通过智能缓存实现快速响应

数据质量分析

  • 列分析:类型统计、NULL比例、唯一值分析
  • 模式检测:自动检测电子邮件、电话号码、URL等数据模式
  • 异常检测:基于3-σ规则发现数值异常
  • 质量评分:综合评估数据完整性、一致性和准确性

关系分析

  • 表关系映射:基于外键自动创建关系图
  • 数据链接追踪:分析微服务间的数据关联性
  • 依赖性分析:评估模式变更的影响

安全及限制

安全功能

1. 查询限制

  • 只读:禁止DML(INSERT, UPDATE, DELETE)和DDL(CREATE, DROP)
  • 白名单:仅执行允许的SQL关键字
  • 语法验证:解析验证以防止SQL注入

2. 执行限制

const SECURITY_LIMITS = {
  MAX_EXECUTION_TIME: 30000,    // 30秒
  MAX_RESULT_ROWS: 10000,       // 最大10,000行
  MAX_RESULT_SIZE: '50MB',      // 最大50MB
  MAX_QUERY_LENGTH: 10000,      // 最大10,000字符
  ALLOWED_KEYWORDS: [
    'SELECT', 'FROM', 'WHERE', 'JOIN', 'ORDER BY',
    'GROUP BY', 'HAVING', 'LIMIT', 'OFFSET',
    'SHOW', 'DESCRIBE', 'EXPLAIN'
  ]
};

3. 访问控制

  • 数据库级权限:每个数据库连接都有单独的权限设置
  • 表级限制:可以限制对特定表的访问
  • 审计日志:保存所有查询执行记录

4. 网络安全

  • TLS/SSL加密:强制远程数据库连接加密(如AWS RDS、Azure DB)
  • VPC支持:在AWS VPC、Azure VNet内访问
  • 连接限制:支持IP白名单
  • 基于时间的访问:仅在特定时间段内允许访问
  • 连接超时:设置远程连接时间限制

功能限制

1. 不支持的功能

  • ❌ 数据修改操作(INSERT, UPDATE, DELETE)
  • ❌ 模式变更(CREATE, ALTER, DROP)
  • ❌ 存储过程执行
  • ❌ 事务控制(BEGIN, COMMIT, ROLLBACK)
  • ❌ 用户管理命令
  • ❌ 文件系统访问

2. 性能限制

  • 同时连接:最多10个同时查询
  • 缓存:模式信息缓存5分钟
  • 速率限制:每分钟100次查询限制

3. 数据类型限制

  • BLOB/TEXT:仅提供大数据的摘要信息
  • JSON/XML:以结构化形式提供解析
  • 二进制:有限支持Base64编码

安装及配置

1. 安装

npm install

2. 环境配置

创建.env文件:

MySQL配置

# MySQL连接信息(本地或远程)
DB_TYPE=mysql                           # 明确类型指定(可选)
MYSQL_HOST=localhost                    # 或者AWS RDS端点
MYSQL_PORT=3306
MYSQL_DB=mydb
MYSQL_USER=readonly_user
MYSQL_PASSWORD=secure_password

# 远程数据库配置(AWS RDS示例)
# MYSQL_HOST=mydb.cluster-xxx.us-east-1.rds.amazonaws.com
# MYSQL_SSL_MODE=REQUIRED
# MYSQL_SSL_CA=/path/to/rds-ca-2019-root.pem
# MYSQL_CONNECTION_TIMEOUT=60000
# MYSQL_ACQUIRECONNECTION_TIMEOUT=60000

PostgreSQL配置

# PostgreSQL连接信息(本地或远程)
DB_TYPE=postgresql                      # 明确类型指定(可选)
POSTGRES_HOST=localhost                 # 或者AWS RDS端点
POSTGRES_PORT=5432
POSTGRES_DB=mydb
POSTGRES_USER=readonly_user
POSTGRES_PASSWORD=secure_password

# 远程数据库配置(AWS RDS PostgreSQL示例)
# POSTGRES_HOST=mydb.cluster-xxx.us-east-1.rds.amazonaws.com
# POSTGRES_SSL_MODE=REQUIRED
# POSTGRES_SSL_CA=/path/to/rds-ca-2019-root.pem
# POSTGRES_CONNECTION_TIMEOUT=60000

公共安全配置

MAX_QUERY_EXECUTION_TIME=30000
MAX_RESULT_ROWS=10000
ENABLE_QUERY_LOGGING=true

3. Claude Desktop配置

使用MySQL时

claude_desktop_config.json中添加:

{
  "mcpServers": {
    "database": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_TYPE": "mysql",
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_DB": "mydb",
        "MYSQL_USER": "readonly_user",
        "MYSQL_PASSWORD": "secure_password"
      }
    }
  }
}

使用PostgreSQL时

claude_desktop_config.json中添加:

{
  "mcpServers": {
    "database": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_TYPE": "postgresql",
        "POSTGRES_HOST": "localhost",
        "POSTGRES_PORT": "5432",
        "POSTGRES_DB": "mydb",
        "POSTGRES_USER": "readonly_user",
        "POSTGRES_PASSWORD": "secure_password"
      }
    }
  }
}

💡 实际使用示例

🏢 在MSA环境中的应用

微服务间的数据分析

💬 "分析最近一周新注册用户在user-service和order-service中的订单模式"

🤖 Claude自动:
1. 从user-service数据库中查询最近注册的用户
2. 从order-service数据库中查询这些用户的订单数据
3. 通过跨数据库分析识别模式
4. 创建综合报告

整体基础设施监控

💬 "检查所有带有production标签的数据库状态,找出性能问题"

🤖 结果:
- 5个生产数据库中有4个正常,1个警告
- analytics-db:响应时间