Skip to main content
Glama
roshanponnappa

Multi-Database MCP Server

다중 데이터베이스 MCP 서버

여러 데이터베이스에 동시에 액세스할 수 있는 도구를 제공하는 MCP(Model Context Protocol) 서버입니다. 이 서버는 Docker에서 실행되며 서로 다른 유형의 여러 데이터베이스를 병렬로 쿼리하는 것을 지원합니다. 이 서버는 데이터베이스 비교나 마이그레이션 지원의 필요성에서 영감을 받았습니다.

기능

  • 다중 데이터베이스 유형: PostgreSQL, MySQL/MariaDB, SQL Server 및 SQLite 지원

  • 다중 데이터베이스 지원: 여러 데이터베이스(서로 다른 유형 포함)에 동시에 연결 및 쿼리

  • 병렬 쿼리: 여러 데이터베이스에서 동시에 동일한 쿼리 실행

  • 스키마 탐색: 데이터베이스, 스키마, 테이블 목록 확인 및 테이블 구조 설명

  • Docker화: 쉬운 배포를 위해 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에 매핑됩니다.

사용법

서버는 MCP 프로토콜을 사용하여 stdio를 통해 통신합니다. 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

  • SQL Server용 Microsoft ODBC 드라이버 필요 (v18 권장, v17도 지원; Docker 이미지에 설치됨)

  • asyncio 래퍼와 함께 pyodbc 사용

  • 중요: SQL Server는 TCP/IP 연결을 허용하도록 구성되어야 합니다.

  • 명명된 인스턴스의 경우 SQL Server Browser 서비스가 실행 중인지 확인하십시오.

  • Docker에서 호스트 머신의 SQL Server에 연결하려면 host.docker.internal을 사용하십시오.

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