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
デフォルトスキーマ:
dboMicrosoft 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
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