Skip to main content
Glama
roshanponnappa

Multi-Database MCP Server

多数据库 MCP 服务器

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

功能特性

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

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

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

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

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

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

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

可用工具

  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

-
security - not tested
A
license - permissive license
-
quality - not tested

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