Skip to main content
Glama
roshanponnappa

Multi-Database MCP Server

MCP-сервер для работы с несколькими базами данных

MCP-сервер (Model Context Protocol), предоставляющий инструменты для одновременного доступа к нескольким базам данных. Сервер работает в Docker и поддерживает параллельное выполнение запросов к базам данных разных типов. Этот сервер был создан из потребности сравнивать базы данных или поддерживать миграции.

Возможности

  • Различные типы баз данных: Поддержка PostgreSQL, MySQL/MariaDB, SQL Server и SQLite

  • Поддержка нескольких баз данных: Подключение и выполнение запросов к нескольким базам данных одновременно (даже разных типов)

  • Параллельные запросы: Выполнение одного и того же запроса к нескольким базам данных одновременно

  • Исследование схем: Просмотр списка баз данных, схем, таблиц и описание структуры таблиц

  • Контейнеризация: Работает в 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 в контейнере: Используйте абсолютные пути внутри контейнера

Пример команды запуска Docker с томом SQLite:

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-клиент к потокам stdio Docker-контейнера.

Пример конфигурации 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 для SQL Server (предпочтительно v18, v17 также поддерживается; установлен в образе Docker)

  • Использует pyodbc с оберткой asyncio

  • Важно: SQL Server должен быть настроен на прием TCP/IP-соединений

  • Для именованных экземпляров убедитесь, что служба SQL Server Browser запущена

  • Используйте host.docker.internal для подключения к SQL Server на хост-машине из Docker

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