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

  • Microsoft ODBC Driver for SQL Server が必要(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
    -