Multi-Database MCP Server
다중 데이터베이스 MCP 서버
여러 데이터베이스에 동시에 액세스할 수 있는 도구를 제공하는 MCP(Model Context Protocol) 서버입니다. 이 서버는 Docker에서 실행되며 서로 다른 유형의 여러 데이터베이스를 병렬로 쿼리하는 것을 지원합니다. 이 서버는 데이터베이스 비교나 마이그레이션 지원의 필요성에서 영감을 받았습니다.
기능
다중 데이터베이스 유형: PostgreSQL, MySQL/MariaDB, SQL Server 및 SQLite 지원
다중 데이터베이스 지원: 여러 데이터베이스(서로 다른 유형 포함)에 동시에 연결 및 쿼리
병렬 쿼리: 여러 데이터베이스에서 동시에 동일한 쿼리 실행
스키마 탐색: 데이터베이스, 스키마, 테이블 목록 확인 및 테이블 구조 설명
Docker화: 쉬운 배포를 위해 Docker 컨테이너에서 실행
연결 풀링: 모든 데이터베이스 유형에 대한 효율적인 연결 관리
유연한 구성: 유형별로 데이터베이스 구성
사용 가능한 도구
list_databases - 구성된 모든 데이터베이스 연결 목록 표시
query_database - 특정 데이터베이스에서 SQL 쿼리 실행
list_tables - 데이터베이스 스키마의 모든 테이블 목록 표시
describe_table - 테이블에 대한 상세 스키마 정보 가져오기
list_schemas - 데이터베이스의 모든 스키마 목록 표시
query_multiple_databases - 여러 데이터베이스에서 동시에 동일한 쿼리 실행
설정
1. 데이터베이스 구성 생성
예제 구성 파일을 복사하고 데이터베이스 자격 증명으로 편집하십시오:
cp databases.json.example databases.jsondatabases.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에 매핑됩니다.
사용법
서버는 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 제외)
종속성 설치:
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
기본 스키마:
dboSQL 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
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