🚀 mcp-db-bridge
mcp-db-bridge 是一个支持 MySQL、PostgreSQL 和 SQLite 的 MCP(Model Context Protocol)服务器,具备细粒度权限控制、多数据库支持以及云就绪的 SSL/TLS 功能。它采用适配器模式构建,具有良好的可扩展性。
English | Português
🚀 快速开始
安装
npm install mcp-db-bridge
pnpm add mcp-db-bridge
配置示例
MySQL(本地)
DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASS=password
DB_NAME=mydb
PostgreSQL(本地)
DB_TYPE=postgresql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=postgres
DB_PASS=password
DB_NAME=mydb
SQLite(内存数据库)
DB_TYPE=sqlite
SQLITE_DB=:memory:
运行
pnpm build
pnpm start
node dist/index.js
✨ 主要特性
- 🔌 多数据库支持:支持 MySQL、PostgreSQL 和 SQLite。
- 🏗️ 适配器模式:架构清晰,易于扩展。
- ☁️ 云就绪:支持 AWS RDS、Google Cloud SQL 和 Azure Database 的 SSL/TLS 连接。
- 🔒 安全优先:具备只读模式和细粒度的模式权限控制。
- 🌐 多数据库模式:可同时访问多个模式或数据库。
- 🔄 事务处理:自动处理 BEGIN/COMMIT/ROLLBACK。
- 🚀 HTTP 模式:可选的远程 HTTP 服务器(基于 Express)。
📦 安装指南
安装依赖
npm install mcp-db-bridge
pnpm add mcp-db-bridge
💻 使用示例
MySQL 搭配 Unix 套接字
DB_TYPE=mysql
MYSQL_SOCKET_PATH=/tmp/mysql.sock
DB_USER=root
DB_PASS=password
DB_NAME=mydb
带权限控制的 PostgreSQL 多数据库模式
DB_TYPE=postgresql
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASS=password
DB_NAME=
SCHEMA_INSERT_PERMISSIONS=app_db:true
SCHEMA_UPDATE_PERMISSIONS=app_db:true
SCHEMA_DELETE_PERMISSIONS=app_db:false
只读模式的 SQLite
DB_TYPE=sqlite
SQLITE_DB=/var/lib/data/production.db
DB_READ_ONLY_MODE=true
带 SSL 的 AWS RDS MySQL
DB_TYPE=mysql
DB_HOST=prod.abc123.us-east-1.rds.amazonaws.com
DB_PORT=3306
DB_USER=admin
DB_PASS=secure_password
DB_NAME=production
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true
ALLOW_INSERT_OPERATION=false
ALLOW_UPDATE_OPERATION=false
ALLOW_DELETE_OPERATION=false
ALLOW_DDL_OPERATION=false
📚 详细文档
配置
数据库类型
DB_TYPE=mysql
DB_TYPE=postgresql
DB_TYPE=sqlite
连接设置
通用设置(适用于所有数据库)
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASS=password
DB_NAME=mydb
DB_CONNECTION_LIMIT=10
MySQL 特定设置(向后兼容)
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASS=password
MYSQL_DB=mydb
MYSQL_SOCKET_PATH=/tmp/mysql.sock
PostgreSQL 特定设置
POSTGRESQL_HOST=127.0.0.1
POSTGRESQL_PORT=5432
POSTGRESQL_DB=mydb
SQLite 特定设置
SQLITE_DB=:memory:
SQLITE_DB=/var/lib/app/data.db
安全与权限
只读模式
在应用层阻止所有写操作:
DB_READ_ONLY_MODE=true
全局写权限
按操作类型进行细粒度的全局控制:
ALLOW_INSERT_OPERATION=true
ALLOW_UPDATE_OPERATION=true
ALLOW_DELETE_OPERATION=false
ALLOW_DDL_OPERATION=false
模式特定权限
覆盖特定模式的全局权限:
SCHEMA_INSERT_PERMISSIONS=prod_db:false,test_db:true,staging_db:true
SCHEMA_UPDATE_PERMISSIONS=prod_db:false,test_db:true,staging_db:true
SCHEMA_DELETE_PERMISSIONS=prod_db:false,test_db:false,staging_db:false
SCHEMA_DDL_PERMISSIONS=prod_db:false,test_db:true,staging_db:false
工作原理:
- 如果模式有特定权限,则使用该权限。
- 否则,使用全局标志。
示例:
ALLOW_INSERT_OPERATION=false
SCHEMA_INSERT_PERMISSIONS=test_db:true,prod_db:false
多数据库模式
通过单个连接访问多个数据库或模式。
激活
将 DB_NAME 留空(仅适用于 MySQL/PostgreSQL):
DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASS=password
DB_NAME=
写保护
默认情况下,为了安全起见,多数据库模式为只读模式。若要允许写操作:
MULTI_DB_WRITE_MODE=true
建议:使用 SCHEMA_*_PERMISSIONS 进行细粒度控制,而不是直接设置 MULTI_DB_WRITE_MODE=true。
完整示例
DB_TYPE=mysql
DB_NAME=
ALLOW_INSERT_OPERATION=false
SCHEMA_INSERT_PERMISSIONS=test_db:true
SCHEMA_UPDATE_PERMISSIONS=test_db:true
SCHEMA_DELETE_PERMISSIONS=test_db:false
SCHEMA_DDL_PERMISSIONS=test_db:true
云数据库的 SSL/TLS 配置
AWS RDS(MySQL/PostgreSQL)
DB_TYPE=mysql
DB_HOST=myinstance.123456789012.us-east-1.rds.amazonaws.com
DB_PORT=3306
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true
Google Cloud SQL(PostgreSQL)
DB_TYPE=postgresql
DB_HOST=34.123.45.67
DB_PORT=5432
DB_SSL=true
DB_SSL_CA=/path/to/server-ca.pem
DB_SSL_CERT=/path/to/client-cert.pem
DB_SSL_KEY=/path/to/client-key.pem
Azure Database for MySQL
DB_TYPE=mysql
DB_HOST=myserver.mysql.database.azure.com
DB_PORT=3306
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true
远程 MCP(HTTP 服务器)
通过 HTTP 运行 MCP 服务器并进行身份验证:
IS_REMOTE_MCP=true
REMOTE_SECRET_KEY=your-secret-key-here
PORT=3000
端点:POST http://localhost:3000/mcp
请求头:Authorization: Bearer your-secret-key-here
🔧 技术细节
架构
src/
├── db/
│ ├── adapters/
│ │ ├── types.ts # 接口和类型定义
│ │ ├── factory.ts # 工厂模式
│ │ ├── mysql.adapter.ts # 通过 mysql2 实现的 MySQL 适配器
│ │ ├── postgresql.adapter.ts # 通过 pg 实现的 PostgreSQL 适配器
│ │ └── sqlite.adapter.ts # 通过 better-sqlite3 实现的 SQLite 适配器
│ ├── index.ts # 核心查询处理程序
│ ├── utils.ts # SQL 解析(使用 node-sql-parser)
│ └── permissions.ts # 模式权限检查
├── config/
│ └── index.ts # 环境配置
├── utils/
│ └── index.ts # 日志记录和工具函数
└── types/
└── index.ts # 类型定义
适配器模式
每个适配器都实现了 DatabaseAdapter 接口:
export interface DatabaseAdapter {
readonly type: DatabaseType;
createPool(config: ConnectionConfig): Promise<DatabasePool>;
executeQuery<T>(pool: DatabasePool, sql: string, params?: any[]): Promise<T>;
setReadOnly(connection: DatabaseConnection): Promise<void>;
unsetReadOnly(connection: DatabaseConnection): Promise<void>;
normalizeResult(result: any): NormalizedResult;
supportsReadOnlyMode(): boolean;
}
事务流程
读操作:
BEGIN → SET TRANSACTION READ ONLY → QUERY → ROLLBACK → RESET TO READ WRITE
写操作:
BEGIN → QUERY → COMMIT (或在出错时 ROLLBACK)
📄 许可证
本项目采用 MIT 许可证。
致谢