DBHub MCP服务器
用Go编写的模型上下文协议(MCP)服务器,为MySQL和PostgreSQL提供安全、只读的数据库操作。
特性
- ✅ MCP协议合规性:全面实施MCP规范
- ✅ 双重运输支持:STDIO(适用于Claude Desktop)和HTTP(适用于web/网络客户端)
- ✅ 多数据库支持:MySQL和PostgreSQL通过统一接口
- ✅ 只读执行:多层安全性,防止写入操作
- ✅ 连接池:高效的连接管理
- ✅ 查询验证:SQL注入预防和只读查询强制
- ✅ HTTP安全:可选API密钥身份验证和CORS支持
- ✅ 可扩展架构:易于添加对更多数据库和传输的支持
MCP工具
服务器公开了以下MCP工具:
- list_tables -列出数据库中的所有表
- describe_table -返回特定表的架构信息
- execute_readony_query -执行SELECT查询(写入操作被阻止)
- 解释查询 -返回查询执行计划,不执行
安装
先决条件
- 转到1.21或更高版本
- MySQL或PostgreSQL数据库
- 只读数据库用户(推荐)
构建
# Clone the repository
git clone
cd dbhubMCP
# Install dependencies
go mod download
# Build the server
go build -o dbhub-mcp-server ./cmd/server配置
使用环境变量配置服务器:
# Copy example configuration
cp .env.example .env
# Edit configuration
nano .env环境变量
数据库配置
| 变量 | 描述 | 默认值 |
|---|---|---|
DB_TYPE | 数据库类型:“mysql”或“postgres” | mysql |
DB_HOST | 数据库主机 | localhost |
DB_PORT | 数据库端口 | 3306 |
DB_NAME | 数据库名称 | (必填) |
DB_USER | 数据库用户名 | (必填) |
DB_PASSWORD | 数据库密码 | (必填) |
DB_MAX_CONNS | 最大打开连接数 | 10 |
DB_MAX_IDLE_CONNS | 最大空闲连接数 | 5 |
DB_CONN_TIMEOUT_SEC | 连接超时(秒) | 10 |
QUERY_TIMEOUT_SEC | 查询执行超时 | 30 |
MAX_ROWS | 要返回的最大行数 | 1000 |
LOG_LEVEL | 日志级别 | 信息 |
传输配置(可选)
| 变量 | 描述 | 默认值 |
|---|---|---|
TRANSPORT_TYPE | 传输模式:“stdio”或“http” | stdio |
HTTP_ADDR | HTTP服务器地址(仅限HTTP模式) | :8080 |
HTTP_CORS_ORIGINS | 逗号分隔的CORS源(HTTP模式) | \* |
HTTP_API_KEY | 用于身份验证的可选API密钥 | (无) |
用法
运行服务器
STDIO模式(默认-适用于克劳德桌面):
# Load environment variables and run
export $(cat .env | xargs) && ./dbhub-mcp-serverHTTP模式(适用于web/网络客户端):
export TRANSPORT_TYPE=http
export HTTP_ADDR=:8080
export HTTP_CORS_ORIGINS=*
export HTTP_API_KEY=your-secret-key
export $(cat .env | xargs) && ./dbhub-mcp-server有关完整的HTTP模式文档,请参阅 README_HTTP.md.
与Claude Desktop一起使用
添加到您的Claude Desktop MCP配置(claude_desktop_config.json):
{
"mcpServers": {
"dbhub": {
"command": "/path/to/dbhub-mcp-server",
"env": {
"DB_TYPE": "mysql",
"DB_HOST": "localhost",
"DB_PORT": "3306",
"DB_NAME": "mydb",
"DB_USER": "readonly_user",
"DB_PASSWORD": "password"
}
}
}
}安全
多层只读执行
- SQL验证层
- 块INSERT、UPDATE、DELETE、DROP、ALTER、TRUNCATE - 验证以SELECT、EXPLAIN、DESCRIBE或SHOW开头的查询 - 检测SQL注入模式
- 数据库权限层
- 使用只读数据库用户 - 仅授予SELECT权限
- 查询限制
- 每个查询的可配置超时 - 防止内存问题的最大行限制
创建只读用户
MySQL:
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'secure_password';
GRANT SELECT ON mydb.* TO 'readonly_user'@'%';
FLUSH PRIVILEGES;PostgreSQL:
CREATE USER readonly_user WITH PASSWORD 'secure_password';
GRANT CONNECT ON DATABASE mydb TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly_user;建筑
┌─────────────────────────────────┐
│ MCP Clients │
│ ├─ Claude Desktop (STDIO) │
│ ├─ Web Browser (HTTP) │
│ └─ Custom Client (HTTP) │
└────────────┬────────────────────┘
│
┌───────┴───────┐
↓ ↓
┌─────────┐ ┌──────────┐
│ STDIO │ │ HTTP │
│ (stdin/ │ │ (POST │
│ stdout) │ │ /mcp) │
└────┬────┘ └────┬─────┘
│ │
└──────┬───────┘
↓
┌────────────────────────────┐
│ MessageTransport Interface │
└────────────┬───────────────┘
│
┌────────────▼────────────────────┐
│ MCP Server │
│ - Protocol handling │
│ - Tool routing │
└────────────┬────────────────────┘
│
┌────────────▼────────────────────┐
│ Security/Validation Layer │
└────────────┬────────────────────┘
│
┌────────────▼────────────────────┐
│ Database Adapter Interface │
└──────┬──────────────┬───────────┘
│ │
┌───▼────┐ ┌───▼─────┐
│ MySQL │ │ Postgres│
└────────┘ └─────────┘发展
项目结构
dbhubMCP/
├── cmd/
│ └── server/
│ └── main.go # Entry point
├── internal/
│ ├── mcp/
│ │ ├── server.go # MCP server implementation
│ │ ├── protocol.go # MCP protocol types
│ │ ├── transport_interface.go # Transport abstraction
│ │ ├── transport_stdio.go # STDIO transport
│ │ ├── transport_http.go # HTTP transport
│ │ ├── transport_http_test.go # HTTP transport tests
│ │ └── handlers.go # Tool handlers
│ ├── database/
│ │ ├── adapter.go # Database interface
│ │ ├── mysql.go # MySQL implementation
│ │ └── postgres.go # PostgreSQL implementation
│ ├── security/
│ │ └── validator.go # SQL validation
│ └── config/
│ └── config.go # Configuration
├── go.mod
├── README.md
└── README_HTTP.md # HTTP transport documentation运行测试
go test ./...添加新数据库
- 实施
database.Adapter接口在internal/database/ - 添加特定于数据库的驱动程序导入
- 注册于
main.goswitch语句
MCP交互示例
看 examples/ 完整JSON-RPC请求/响应示例的目录:
initialize.json-服务器初始化list_tools.json-工具发现call_list_tables.json-列表表示例call_execute_query.json-执行查询示例
许可证
MIT许可证
贡献
欢迎投稿!请确保:
- 代码遵循Go惯例
- 维护安全最佳实践
- 包括对新功能的测试
