Multi-Database MCP Server
多数据库 MCP 服务器
一个提供同时访问多个数据库工具的 MCP(模型上下文协议)服务器。该服务器在 Docker 中运行,并支持并行查询不同类型的多个数据库。此服务器的灵感来源于数据库对比或支持迁移的需求。
功能特性
多种数据库类型:支持 PostgreSQL、MySQL/MariaDB、SQL Server 和 SQLite
多数据库支持:同时连接并查询多个数据库(甚至是不同类型的数据库)
并行查询:一次性在多个数据库上执行相同的查询
架构探索:列出数据库、架构、表,并描述表结构
容器化:在 Docker 容器中运行,便于部署
连接池:为所有数据库类型提供高效的连接管理
灵活配置:按类型组织数据库
可用工具
list_databases - 列出所有已配置的数据库连接
query_database - 在特定数据库上执行 SQL 查询
list_tables - 列出数据库架构中的所有表
describe_table - 获取表的详细架构信息
list_schemas - 列出数据库中的所有架构
query_multiple_databases - 同时在多个数据库上执行相同的查询
设置
1. 创建数据库配置
复制示例配置文件并使用您的数据库凭据进行编辑:
cp databases.json.example databases.json使用您的数据库连接详细信息编辑 databases.json。在根级别按类型组织数据库:
{
"postgresql": {
"postgres_db": {
"host": "localhost",
"port": 5432,
"user": "postgres",
"password": "your_password",
"database": "database1"
},
"another_postgres": {
"host": "remote.example.com",
"port": 5432,
"user": "admin",
"password": "secret",
"database": "production"
}
},
"mysql": {
"mysql_db": {
"host": "localhost",
"port": 3306,
"user": "root",
"password": "your_password",
"database": "mydatabase"
}
},
"sqlserver": {
"sqlserver_db": {
"host": "localhost",
"port": 1433,
"user": "sa",
"password": "your_password",
"database": "MyDatabase"
}
},
"sqlite": {
"sqlite_db": {
"database": "/path/to/database.db"
}
},
"clickhouse": {
"clickhouse_db": {
"host": "localhost",
"port": 8123,
"user": "default",
"password": "",
"database": "default"
}
}
}支持的数据库类型
PostgreSQL (
"postgresql","postgres", 或"pg")MySQL/MariaDB (
"mysql"或"mariadb")SQL Server (
"sqlserver","mssql", 或"sql server")SQLite (
"sqlite"或"sqlite3")ClickHouse (
"clickhouse"或"ch")
2. 使用 Docker Compose 构建并运行
docker-compose up --build3. 使用 Docker 构建并运行
# Build the image
docker build -t multidb-mcp-server .
# Run the container
docker run -it \
-v $(pwd)/databases.json:/app/databases.json:ro \
multidb-mcp-server4. Docker 连接提示
在 Docker 内部配置数据库连接时,请记住以下提示:
网络连接 (PostgreSQL, MySQL, SQL Server)
访问宿主机数据库:使用
host.docker.internal作为主机名(Windows/Mac)或172.17.0.1(Linux)访问其他容器:使用
docker-compose.yml中的容器名称或服务名称访问远程数据库:使用实际的主机名或 IP 地址
访问宿主机 PostgreSQL 的示例:
{
"postgresql": {
"local_db": {
"host": "host.docker.internal",
"port": 5432,
"user": "postgres",
"password": "password",
"database": "mydb"
}
}
}访问另一个 Docker 容器中数据库的示例:
{
"postgresql": {
"container_db": {
"host": "postgres-container",
"port": 5432,
"user": "postgres",
"password": "password",
"database": "mydb"
}
}
}访问宿主机 SQL Server 的示例:
{
"sqlserver": {
"sqlserver_db": {
"host": "host.docker.internal",
"port": 1433,
"user": "sa",
"password": "password",
"database": "MyDatabase"
}
}
}关于 SQL Server 的说明:确保 SQL Server 配置为接受 TCP/IP 连接,并且如果使用命名实例,则 SQL Server Browser 服务正在运行。默认端口为 1433。
文件路径 (SQLite)
宿主机上的 SQLite 数据库:将包含数据库文件的目录挂载为卷,并使用容器路径
容器内的 SQLite 数据库:使用容器内的绝对路径
带有 SQLite 卷的 Docker 运行命令示例:
docker run -it \
-v $(pwd)/databases.json:/app/databases.json:ro \
-v $(pwd)/data:/app/data:ro \
multidb-mcp-serverSQLite 配置示例:
{
"sqlite": {
"local_db": {
"database": "/app/data/mydatabase.db"
}
}
}注意:路径 /app/data/mydatabase.db 是容器内的路径,它通过卷挂载映射到宿主机上的 ./data/mydatabase.db。
使用方法
服务器通过 stdio 使用 MCP 协议进行通信。将您的 MCP 客户端连接到 Docker 容器的 stdio 流。
MCP 客户端配置示例
如果与 MCP 客户端一起使用,请将其配置为连接到 Docker 容器:
{
"mcpServers": {
"multidb": {
"command": "docker",
"args": [
"run",
"-i",
"-v",
"[YOUR/PATH]/databases.json:/app/databases.json:ro",
"multidb-mcp-server"
]
}
}
}工具示例
列出所有数据库
{
"tool": "list_databases",
"arguments": {}
}查询单个数据库
{
"tool": "query_database",
"arguments": {
"database_name": "db1",
"query": "SELECT * FROM users LIMIT 10"
}
}列出表
{
"tool": "list_tables",
"arguments": {
"database_name": "db1",
"schema": "public"
}
}描述表
{
"tool": "describe_table",
"arguments": {
"database_name": "db1",
"table_name": "users",
"schema": "public"
}
}同时查询多个数据库
您可以同时查询不同类型的多个数据库:
{
"tool": "query_multiple_databases",
"arguments": {
"database_names": ["db1", "db2", "sqlserver_db"],
"query": "SELECT COUNT(*) as total FROM users"
}
}注意:在查询不同类型的多个数据库时,请确保 SQL 语法在所有数据库类型中兼容,或者为每个数据库分别使用特定于数据库的查询。
开发
本地开发(不使用 Docker)
安装依赖项:
pip install -r requirements.txt设置环境变量:
export DB_CONFIG_PATH=./databases.json运行服务器:
python server.py数据库特定说明
PostgreSQL
默认端口:5432
默认架构:
public使用
asyncpg进行异步操作
MySQL/MariaDB
默认端口:3306
架构参数是可选的(使用当前数据库)
使用
aiomysql进行异步操作
SQL Server
默认端口:1433
默认架构:
dbo需要 Microsoft ODBC Driver for SQL Server(首选 v18,也支持 v17;已安装在 Docker 镜像中)
使用带有 asyncio 包装器的
pyodbc重要:SQL Server 必须配置为接受 TCP/IP 连接
对于命名实例,确保 SQL Server Browser 服务正在运行
使用
host.docker.internal从 Docker 连接到宿主机上的 SQL Server
SQLite
无需网络连接
使用
database字段指定文件路径(或使用:memory:进行内存中操作)默认架构:
main使用
aiosqlite进行异步操作
安全说明
切勿提交
databases.json- 它包含敏感凭据在生产环境中使用环境变量或密钥管理
考虑对远程数据库使用 SSL/TLS 连接
限制对 Docker 容器的网络访问
对于 SQLite,确保文件路径安全且可访问
故障排除
连接问题
验证
databases.json中的数据库凭据确保从 Docker 容器可以访问数据库
检查网络连通性(使用
docker network进行容器间通信)
权限问题
确保
databases.json文件具有正确的读取权限检查 Docker 卷挂载是否正确
许可证
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/roshanponnappa/multidb-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server