Skip to main content
Glama
Multi-Database MCP Server

Multi-Database MCP Server

多数据库 MCP 服务器

一个提供同时访问多个数据库工具的 MCP(模型上下文协议)服务器。该服务器在 Docker 中运行,并支持并行查询不同类型的多个数据库。此服务器的灵感来源于数据库对比或支持迁移的需求。

功能特性

  • 多种数据库类型:支持 PostgreSQL、MySQL/MariaDB、SQL Server 和 SQLite

  • 多数据库支持:同时连接并查询多个数据库(甚至是不同类型的数据库)

  • 并行查询:一次性在多个数据库上执行相同的查询

  • 架构探索:列出数据库、架构、表,并描述表结构

  • 容器化:在 Docker 容器中运行,便于部署

  • 连接池:为所有数据库类型提供高效的连接管理

  • 灵活配置:按类型组织数据库

Related MCP server: Universal SQL MCP Server

可用工具

  1. list_databases - 列出所有已配置的数据库连接

  2. query_database - 在特定数据库上执行 SQL 查询

  3. list_tables - 列出数据库架构中的所有表

  4. describe_table - 获取表的详细架构信息

  5. list_schemas - 列出数据库中的所有架构

  6. 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 --build

3. 使用 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-server

4. 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-server

SQLite 配置示例:

{
  "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)

  1. 安装依赖项:

pip install -r requirements.txt
  1. 设置环境变量:

export DB_CONFIG_PATH=./databases.json
  1. 运行服务器:

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables connecting to and querying multiple database types (PostgreSQL, MySQL, SQLite) through a unified interface. Supports managing multiple concurrent database connections with connection pooling and SQL query execution through MCP tools.
    5
    14 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables secure interaction with multiple SQL database engines (MySQL, PostgreSQL, SQLite, SQL Server) through a standardized interface. Supports schema inspection, safe query execution, and controlled write operations with built-in security restrictions.
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables safe exploration and querying of multiple databases (PostgreSQL, MySQL, SQLite, DB2) with read-only defaults, connection pooling, and parameterized queries for SQL injection prevention.
    1
    MIT
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables interaction with 20+ databases (PostgreSQL, MongoDB, Neo4j, Elasticsearch, Redis, and more) through a single unified interface, allowing cross-database queries and operations via natural language.
    1
    -