database-mcp-server
A Model Context Protocol server for unified database access and management, supporting multiple databases with CRUD operations, transactions, metadata queries, and built-in security features.
README
Database MCP Server
一个基于 Model Context Protocol (MCP) 的数据库连接服务器,支持多种数据库的统一访问和管理。
功能特性
支持的数据库
- MySQL - 完整支持
- PostgreSQL - 完整支持
- Vastbase G100 - 完整支持(基于 PostgreSQL 适配)
- ClickHouse - 完整支持(支持无密码连接)
- Oracle - 基础支持(需要 OCI 库)
- SQL Server - 基础支持(使用 tedious 驱动)
核心功能
- 连接管理 - 连接池、心跳检测、自动回收
- CRUD 操作 - select、insert、update、delete、count
- 元数据查询 - list_tables、describe_table、get_table_indexes、list_databases
- SQL 执行 - 参数化查询、执行计划分析
- 事务管理 - begin_transaction、commit、rollback(支持隔离级别)
- 高级查询 - GROUP BY、HAVING、ORDER BY
安全特性
- SQL 注入防护 - SQL 解析校验、危险操作拦截
- 数据脱敏 - 敏感字段自动脱敏(手机号、身份证、邮箱等)
- 限流保护 - 令牌桶限流、并发查询限制
- 熔断机制 - 自动熔断、故障恢复
- 查询超时 - 超时控制、慢查询检测
- 大表保护 - WHERE 条件强制、执行计划分析
日志审计
- 审计日志 - 完整记录所有工具调用
- 查询日志 - 记录 SQL 执行详情
- 错误日志 - 详细的错误追踪
- 日志轮转 - 自动轮转、保留期管理
快速开始
安装
# 克隆项目
git clone <repository-url>
cd database-mcp-server
# 安装依赖
npm install
# 构建
npm run build
配置
复制环境变量配置文件:
cp .env.example .env
编辑 .env 文件配置必要参数:
# 连接管理配置
CONNECTION_MAX_CONNECTIONS_PER_CLIENT=3
CONNECTION_IDLE_TIMEOUT=600000
CONNECTION_MAX_LIFETIME=1800000
# 查询配置
QUERY_TIMEOUT=30000
# 日志配置
LOG_LEVEL=info
LOG_DIR=./logs
启动
# 开发模式
npm run dev
# 生产模式
npm start
# 或直接运行构建后的文件
node dist/index.js
MCP 工具列表
连接管理
| 工具 | 描述 |
|---|---|
connect |
连接到数据库 |
disconnect |
断开当前连接 |
get_connection |
获取连接状态 |
元数据查询
| 工具 | 描述 |
|---|---|
list_databases |
列出所有数据库 |
list_tables |
列出所有表 |
describe_table |
查看表结构 |
get_table_indexes |
获取索引信息 |
CRUD 操作
| 工具 | 描述 |
|---|---|
select |
查询数据(支持 GROUP BY/HAVING) |
insert |
插入数据 |
update |
更新数据 |
delete |
删除数据 |
count |
统计行数 |
SQL 执行
| 工具 | 描述 |
|---|---|
execute_sql |
执行原始 SQL |
get_query_plan |
获取执行计划 |
事务管理
| 工具 | 描述 |
|---|---|
begin_transaction |
开始事务 |
commit |
提交事务 |
rollback |
回滚事务 |
高级功能
| 工具 | 描述 |
|---|---|
get_server_info |
获取服务器信息 |
truncate_table |
清空表(危险操作) |
get_security_status |
获取安全中间件状态 |
使用示例
1. 连接数据库
{
"tool": "connect",
"arguments": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"database": "test_db",
"username": "root",
"password": "password"
}
}
2. 查询数据
{
"tool": "select",
"arguments": {
"table": "users",
"columns": ["id", "name", "email"],
"where": {
"status": "active",
"age": { "gte": 18 }
},
"orderBy": [{"column": "created_at", "direction": "desc"}],
"limit": 10
}
}
3. 分组聚合
{
"tool": "select",
"arguments": {
"table": "orders",
"columns": ["user_id", "count(*) as total", "sum(amount) as revenue"],
"groupBy": ["user_id"],
"having": { "count(*)": { "gt": 5 } }
}
}
4. 执行事务
{
"tool": "begin_transaction",
"arguments": {
"isolationLevel": "READ_COMMITTED"
}
}
{
"tool": "insert",
"arguments": {
"table": "accounts",
"values": {"user_id": 1, "balance": 100}
}
}
{
"tool": "update",
"arguments": {
"table": "accounts",
"values": {"balance": 50},
"where": {"user_id": 2}
}
}
{
"tool": "commit"
}
5. 查看安全状态
{
"tool": "get_security_status",
"arguments": {}
}
配置说明
完整配置文件 (config/default.yaml)
connectionManager:
maxConnectionsPerClient: 3
idleTimeout: 600000 # 10 分钟
maxLifetime: 1800000 # 30 分钟
heartbeatInterval: 120000
pool:
min: 0
max: 5
acquireTimeout: 10000
idleTimeout: 60000
query:
maxRows: 1000
maxResultSize: 10485760 # 10MB
timeout: 30000
requireWhereForLargeTables: true
largeTableThreshold: 1000000
maxJoins: 5
maxSubqueryDepth: 3
rateLimit:
requestsPerSecond: 10
concurrentQueries: 5
burstSize: 20
circuitBreaker:
enabled: true
errorThreshold: 50
windowSize: 100
timeout: 300000
security:
sensitiveFields:
hide: [password, passwd, secret, token, api_key, private_key]
mask: [phone, id_card, credit_card, email]
blockedSqlPatterns:
- DROP\s+(TABLE|DATABASE)
- TRUNCATE\s+
- GRANT\s+
- REVOKE\s+
audit:
enabled: true
filePath: ./logs/audit.log
rotate: daily
retention: 180
logQueryParams: true
logSql: true
logResult: false
logSlowQueries: true
slowQueryThreshold: 1000
数据脱敏配置
敏感字段分为两类:
-
hide - 完全隐藏,不出现在结果中
- password, passwd, secret, token, api_key, private_key
-
mask - 部分脱敏显示
- phone: 138****1234
- id_card: 110101********1234
- credit_card: 6222 **** **** 1234
- email: j***@example.com
限流熔断配置
| 参数 | 默认值 | 说明 |
|---|---|---|
| requestsPerSecond | 10 | 每秒请求数限制 |
| concurrentQueries | 5 | 并发查询数限制 |
| burstSize | 20 | 突发流量大小 |
| errorThreshold | 50 | 错误阈值(触发熔断) |
| timeout | 300000 | 熔断超时(毫秒) |
开发
项目结构
database-mcp-server/
├── src/
│ ├── index.ts # 入口文件
│ ├── server.ts # MCP 服务器
│ ├── connection/ # 连接管理
│ │ ├── manager.ts
│ │ ├── pool.ts
│ │ └── string-builder.ts
│ ├── tools/ # MCP 工具实现
│ │ ├── connection.ts
│ │ ├── metadata.ts
│ │ ├── crud.ts
│ │ ├── sql.ts
│ │ └── transaction.ts
│ ├── middleware/ # 安全中间件
│ │ ├── data-masking.ts # 数据脱敏
│ │ ├── rate-limiter.ts # 限流熔断
│ │ └── security.ts # 安全集成
│ ├── logger/ # 日志系统
│ │ ├── audit.ts
│ │ ├── query.ts
│ │ └── error.ts
│ └── types/ # 类型定义
│ ├── config.ts
│ └── database.ts
├── tests/
└── dist/
运行测试
# 运行所有测试
npm test
# 监听模式
npm run test:watch
# 生成覆盖率报告
npm run test:coverage
构建
# 编译 TypeScript
npm run build
# 清理并重新编译
npm run clean && npm run build
代码检查
# ESLint
npm run lint
# 格式化代码
npm run format
MCP 客户端配置
本服务器支持标准的 MCP 协议,可以在各种 AI 工具和客户端中使用。以下是详细的配置说明。
传输方式
Database MCP Server 使用 Stdio 传输方式(标准输入输出,用于本地进程通信)。
Claude Code 配置
Claude Code 是 Anthropic 官方的 CLI 工具,支持 MCP 协议。
配置位置
- 全局配置:
~/.claude/settings.json - 项目配置:
.claude/settings.local.json
配置示例
在项目目录中创建或编辑 .claude/settings.local.json:
{
"mcpServers": {
"database-mcp": {
"command": "node",
"args": ["/absolute/path/to/database-mcp-server/dist/index.js"]
}
}
}
使用步骤
-
构建项目
cd /path/to/database-mcp-server npm run build -
配置 Claude Code
# 在项目目录中 mkdir -p .claude # 创建配置文件 -
启动 Claude Code
claude -
验证连接
在对话中输入:/mcp 查看已连接的 MCP 服务器
使用示例
用户:连接到 MySQL 数据库
Claude: 使用 database-mcp 的 connect 工具...
用户:查询 users 表中的所有数据
Claude: 使用 select 工具查询...
Cline (VS Code 扩展) 配置
Cline 是一个 VS Code 扩展,支持 MCP 协议。
配置位置
在 VS Code 中打开设置,搜索 "Cline",找到 MCP 配置项。
或者编辑 VS Code 设置文件:
- Windows:
%APPDATA%\Code\User\settings.json - macOS:
~/Library/Application Support/Code/User/settings.json - Linux:
~/.config/Code/User/settings.json
配置示例
{
"cline.mcpServers": [
{
"name": "database-mcp",
"type": "stdio",
"command": "node",
"args": ["C:/path/to/database-mcp-server/dist/index.js"]
}
]
}
使用步骤
-
安装 Cline 扩展
- 打开 VS Code
- 搜索 "Cline" 并安装
-
配置 MCP 服务器
- 打开 VS Code 设置
- 搜索 "MCP"
- 添加服务器配置
-
验证连接
- 打开 Cline 面板
- 查看 MCP 服务器状态
OpenCode 配置
OpenCode 是一个开源的 MCP 客户端。
配置位置
- macOS/Linux:
~/.opencode/config.json - Windows:
%USERPROFILE%\.opencode\config.json
配置示例
{
"mcp": {
"servers": {
"database": {
"command": "node",
"args": ["/path/to/database-mcp-server/dist/index.js"]
}
}
}
}
使用步骤
-
安装 OpenCode
npm install -g @opencode/core -
配置 MCP 服务器
mkdir -p ~/.opencode # 创建 config.json 文件 -
启动 OpenCode
opencode
Cursor 配置
Cursor 是支持 MCP 协议的 AI 代码编辑器。
配置位置
在 Cursor 中打开设置,搜索 "MCP"。
配置示例
在项目根目录创建 .cursor/mcp.json:
{
"servers": [
{
"name": "database-mcp",
"type": "stdio",
"command": "node",
"args": ["${workspaceFolder}/../database-mcp-server/dist/index.js"]
}
]
}
使用步骤
-
打开 Cursor 设置
- File → Preferences → Settings
-
搜索 MCP
- 找到 "MCP Servers" 配置项
-
添加服务器
- 点击 "Add Server"
- 填写配置信息
-
验证
- 在 Cursor 中打开 AI 对话框
- 输入 "@database 查询..." 测试
Windsurf 配置
Windsurf 是支持 MCP 的代码编辑器。
配置位置
- 配置目录:
~/.windsurf/mcp-config.json
配置示例
{
"mcpServers": {
"database": {
"command": "node",
"args": ["/path/to/database-mcp-server/dist/index.js"]
}
}
}
常见问题排查
1. 服务器无法启动
检查路径:
# 确认构建文件存在
ls -la dist/index.js
# 重新构建
npm run build
检查权限:
# Windows
# 以管理员身份运行 VS Code 或终端
# macOS/Linux
chmod +x dist/index.js
2. 连接超时
- 检查服务器日志
- 确认端口未被占用
- 检查防火墙设置
3. 工具不可见
- 确认 MCP 服务器已正确连接
- 在客户端中刷新 MCP 连接
- 检查服务器日志输出
环境变量
| 变量名 | 默认值 | 说明 |
|---|---|---|
| CONNECTION_MAX_CONNECTIONS_PER_CLIENT | 3 | 每客户端最大连接数 |
| CONNECTION_IDLE_TIMEOUT | 600000 | 空闲超时(毫秒) |
| CONNECTION_MAX_LIFETIME | 1800000 | 最长存活时间(毫秒) |
| QUERY_TIMEOUT | 30000 | 查询超时(毫秒) |
安全注意事项
- 数据库权限 - 使用最小权限原则创建专用数据库用户
- 敏感数据 - 根据实际需求配置敏感字段列表
- 日志安全 - 避免在生产环境日志中记录查询结果
- 网络隔离 - 建议将服务器部署在内网环境
故障排查
常见问题
1. 连接失败
- 检查数据库服务是否运行
- 验证连接参数(host、port、credentials)
- 检查防火墙设置
2. 查询超时
- 增加
QUERY_TIMEOUT配置 - 优化 SQL 查询性能
- 检查数据库负载
3. 限流触发
- 检查
get_security_status查看限流状态 - 调整
requestsPerSecond配置
日志位置
- 审计日志:
./logs/audit.log - 错误日志:
./logs/error.log - 查询日志:
./logs/query.log
License
MIT
版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| 0.1.0 | 2026-03-05 | 初始版本,支持 MySQL/PostgreSQL/Vastbase/ClickHouse |
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.