Skip to main content
Glama
roshanponnappa

Multi-Database MCP Server

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

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

Возможности

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

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

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

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

  • Контейнеризация: Работает в Docker-контейнере для простоты развертывания

  • Пул соединений: Эффективное управление соединениями для всех типов баз данных

  • Гибкая конфигурация: Организация баз данных по типам

Доступные инструменты

  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

-
security - not tested
A
license - permissive license
-
quality - not tested

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