🚀 企业级多数据库MCP服务器
Model Context Protocol (MCP) 服务器提供多数据库与AI代理之间安全高效的通信。
此项目使用Anthropic的Model Context Protocol,使像Claude这样的AI模型能够同时与多个数据库进行交互。在微服务架构(MSA)环境中,它整合了分散的数据库,并通过自然语言提供了跨数据库查询、模式探索、数据分析等功能的安全访问。
要在Claude Code环境中使用此DB MCP服务器,请参阅Claude Code使用指南。
快速开始:
.env 文件)| 功能 | MySQL | PostgreSQL |
|---|---|---|
| 性能 | 适合读优化、Web应用 | 适合复杂查询、大数据处理 |
| 数据类型 | 支持基本数据类型 | 支持JSON、数组、自定义类型等 |
| 扩展性 | 水平扩展(分片)优秀 | 垂直扩展优秀,支持并行处理 |
| ACID一致性 | 使用InnoDB引擎时完全支持 | 完全支持ACID |
| 高级功能 | 以基础功能为主 | 支持窗口函数、CTE、全文搜索等 |
| 云支持 | AWS RDS、Azure Database | AWS RDS、Azure Database、Google Cloud SQL |
系统会自动检测数据库类型:
DB_TYPE 环境变量或config.type设置推荐使用MySQL:
推荐使用PostgreSQL:
在微服务架构(MSA)环境中,经常需要同时连接多个数据库。此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
{
"mcpServers": {
"multi-database": {
"command": "node",
"args": ["path/to/db-mcp/dist/multi-database-server.js"],
"env": {
"DB_CONFIG_FILE": "./db-config.json"
}
}
}
}
改进的配置方式:通过简化环境变量来简化配置(从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"
}
}
}
}
核心改进点:
src/config/index.ts中自动检测multi-DB模式工作原理:
DB_CONFIG_FILE环境变量时,自动切换到multi-DB模式db-config.json文件管理验证方法:
# 验证MCP服务器连接
claude mcp list
# 运行健康检查
# 在Claude Code中: "运行db-mcp服务器的健康检查"
为每个数据库运行单独的MCP服务器实例。
{
"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服务器上使用多数据库时,提供的额外功能:
"显示用户服务和订单服务的数据对比"
→ 从多个数据库检索数据并进行综合分析
"检查所有带有microservice标签的数据库状态"
→ 基于标签的数据库组管理
"一次性检查所有数据库连接状态"
→ 整体基础设施监控
"根据用户ID查找所有服务的相关数据"
→ 微服务间的数据追踪
list_databases 🗂execute_query 🚀cross_database_query 🔄natural_language_query 🤖database_health_check 🏥database://connections 🔗database://{db_name}/schema 📊database://{db_name}/tables 📁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'
]
};
npm install
创建.env文件:
# 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连接信息(本地或远程)
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
在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"
}
}
}
}
在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"
}
}
}
}
💬 "分析最近一周新注册用户在user-service和order-service中的订单模式"
🤖 Claude自动:
1. 从user-service数据库中查询最近注册的用户
2. 从order-service数据库中查询这些用户的订单数据
3. 通过跨数据库分析识别模式
4. 创建综合报告
💬 "检查所有带有production标签的数据库状态,找出性能问题"
🤖 结果:
- 5个生产数据库中有4个正常,1个警告
- analytics-db:响应时间