database-mcp
database-mcp
SQL MCP сервер для баз данных с настоящей постраничной выдачей результатов на стороне сервера — функция, которой нет ни у одного устоявшегося MCP сервера для баз данных (DBHub ограничивает количество строк, Google's MCP Toolbox возвращает всё, mcp-alchemy обрезает на 4000 символов).
Эталонная реализация для PostgreSQL.
Зачем
Каждый существующий SQL MCP сервер либо обрезает большие результаты, либо сбрасывает их целиком в контекст модели. Спецификация MCP поддерживает пагинацию только для операций list (tools/list), но не для результатов инструментов. database-mcp закрывает этот пробел:
Запрос выполняется один раз как серверный курсор PostgreSQL (
DECLARE/FETCH FORWARD) внутри удерживаемой транзакции.Каждый
fetch(cursor)продолжает ровно с того места, где закончилась последняя страница — без повторного выполнения, без повторного сканированияOFFSET, а снимок MVCC сохраняет результат стабильным даже при конкурентных записях.Страницы ограничены количеством строк (
page_size) и размером в байтах (max_page_bytes); слишком большие ячейки обрезаются с явным маркером.Удерживаемые курсоры ограничены: максимум N одновременных (вытеснение LRU), вытеснение по TTL простоя, плюс
idle_in_transaction_session_timeoutкак серверная страховка. Исчерпанные курсоры закрываются автоматически.
Related MCP server: pgsql-mcp
Профили подключения — управляются ИИ в рантайме
Подключения — это именованные профили, сохраняемые в ~/.config/database-mcp/profiles.json (chmod 600). ИИ может добавлять, изменять, тестировать и удалять их на лету через инструменты — без перезапуска сервера:
profile_add(name, dsn, allow_writes=false, description, make_default, test=true)profile_remove(name)·profile_test(name)·profiles()каждый инструмент запроса принимает необязательный параметр
profile; при его отсутствии используется профиль по умолчанию.
Профили по умолчанию доступны только для чтения (сессионный default_transaction_read_only); запись требует явного профиля с allow_writes=true.
SSH-мост
Профиль может получить доступ к базе данных, доступной только через SSH (классическая схема «Postgres слушает localhost на удалённом хосте»):
profile_add(name="prod", dsn="postgresql://app@dbhost:5432/app",
ssh_host="dbhost")Туннель — это подпроцесс системного
ssh(-N -L, BatchMode, keepalives) — ваш~/.ssh/config, ключи и агент применяются без изменений. Аутентификация должна работать без интерактивного ввода.ssh_remote_host/ssh_remote_portпо умолчанию соответствуют хосту/порту DSN, видимому с SSH-хоста; если хост DSN совпадает с SSH-хостом, по умолчанию используется127.0.0.1(обычный случай).Туннели запускаются лениво, проверяются на каждом использовании и автоматически пересоздаются. Если туннель умирает во время пагинации, его курсоры инвалидируются с понятной ошибкой, а следующий запрос переподключается.
Мультиплексирование (
ControlMaster) явно отключено для туннельных соединений, чтобы время жизни туннеля точно совпадало с временем жизни подпроцесса.
Инструменты
Инструмент | Назначение |
| Выполнить SQL, получить первую страницу + |
| Следующая страница из удерживаемого курсора — без повторного выполнения |
| Закрыть один/все курсоры досрочно |
| Список таблиц/представлений с оценкой строк и размерами |
| Колонки, ограничения, индексы одной таблицы |
| План запроса (опционально |
| Ориентационная карточка: все таблицы + оценка строк + имена колонок одним вызовом |
| Поиск таблиц/колонок/функций по имени или комментарию |
| Статистика колонок из |
| Внешние ключи таблицы, в обе стороны |
| Кратчайший путь по внешним ключам между двумя таблицами как готовая цепочка JOIN |
| Мгновенная оценка планировщика (опционально |
| Действительно случайные строки через |
| Управление подключениями в рантайме |
| Профили, пулы, открытые курсоры, лимиты |
Результаты — компактный JSON: колонки один раз, строки как массивы — примерно вдвое меньше токенов, чем формат «строка-словарь», который используют другие серверы. query также возвращает estimated_rows (оценка планировщика через EXPLAIN), чтобы модель знала, с чем она работает при пагинации.
Установка и запуск
uv pip install -e .
database-mcp --dsn postgresql://user@host:5432/db # registers profile "default"
database-mcp # start empty, add profiles at runtimeРегистрация в Claude Code:
claude mcp add database -- database-mcp --dsn postgresql://user@host:5432/dbОпции: --profiles FILE, --allow-writes, --page-size 50, --max-page-size 500, --max-page-bytes 32000, --max-cell 400, --cursor-ttl 300, --max-cursors 4, --statement-timeout 30, --keepalive 120, --connect-timeout 5. Переменные окружения: DATABASE_MCP_DSN / DATABASE_URL, DATABASE_MCP_PROFILES.
Обработка устаревших соединений
Мёртвые соединения обнаруживаются быстро на каждом уровне, а не зависают:
SSH-туннели:
ServerAliveInterval=--keepalive(по умолчанию 2 мин) сServerAliveCountMax=1— один пропущенный пробный пакет завершает процесс туннеля, который менеджер движка обнаруживает при следующем использовании и лениво пересоздаёт.Соединения с БД: TCP keepalives (
keepalives_idle=--keepalive, пробы каждые 10 с, 3 пропуска) ловят мёртвых пиров за ~30 с — включая закреплённые курсорные соединения вне пула.Проверка при выдаче из пула: каждое выдаваемое соединение проверяется дешёвым round-trip; устаревшее отбрасывается и прозрачно заменяется — вызывающий никогда не видит ошибку. Простаивающие соединения в пуле перерабатываются через
--keepaliveсекунд; попытки подключения завершаются ошибкой через--connect-timeout(по умолчанию 5 с) вместо стандартных ~2 мин TCP.
Тесты
uv pip install -e '.[dev]'
pytest # needs a local PostgreSQL (DBMCP_TEST_DSN to override)Лицензия
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables comprehensive PostgreSQL database management including index tuning, query plan analysis, health monitoring, schema-aware SQL generation, and safe SQL execution with configurable access control for both development and production environments.9MIT
- AlicenseBqualityBmaintenanceEnables interaction with PostgreSQL databases through comprehensive database management tools including index tuning, query execution plans, health checks, schema intelligence, and safe SQL execution with configurable read-only mode for production use.35MIT
- FlicenseNot gradedqualityBmaintenanceEnables querying PostgreSQL databases via MCP, with multi-database routing, credential isolation, and truncated results plus full CSV export.
- FlicenseNot gradedqualityCmaintenanceEnables read-only SQL queries and schema inspection for PostgreSQL databases with up to 3 named connections.
Related MCP Connectors
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Connect to PlanetScale databases, branches, schema, query insights, and execute SQL
Comprehensive PostgreSQL documentation and best practices, including ecosystem tools
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/thhart/database-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server