Multi-Database MCP Server
MCP-сервер для работы с несколькими базами данных
MCP-сервер (Model Context Protocol), предоставляющий инструменты для одновременного доступа к нескольким базам данных. Сервер работает в Docker и поддерживает параллельное выполнение запросов к базам данных разных типов. Этот сервер был создан из потребности сравнивать базы данных или поддерживать миграции.
Возможности
Различные типы баз данных: Поддержка PostgreSQL, MySQL/MariaDB, SQL Server и SQLite
Поддержка нескольких баз данных: Подключение и выполнение запросов к нескольким базам данных одновременно (даже разных типов)
Параллельные запросы: Выполнение одного и того же запроса к нескольким базам данных одновременно
Исследование схем: Просмотр списка баз данных, схем, таблиц и описание структуры таблиц
Контейнеризация: Работает в Docker-контейнере для простоты развертывания
Пул соединений: Эффективное управление соединениями для всех типов баз данных
Гибкая конфигурация: Организация баз данных по типам
Доступные инструменты
list_databases - Список всех настроенных подключений к базам данных
query_database - Выполнение SQL-запроса к конкретной базе данных
list_tables - Список всех таблиц в схеме базы данных
describe_table - Получение подробной информации о схеме таблицы
list_schemas - Список всех схем в базе данных
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 --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 в контейнере: Используйте абсолютные пути внутри контейнера
Пример команды запуска 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)
Установите зависимости:
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
Схема по умолчанию:
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
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