schemagate — доступ к таблицам для text-to-sql
schemagate
Python-библиотека и MCP-сервер отдают модели только нужные вопросу и разрешенные роли таблицы, сокращая схему в промпте
- 136 ★ репозитория
- Последний коммит
- Apache-2.0
Широкий доступ
Почему такой уровень
- `run_query` выполняет чтения в вашей базе и возвращает строки модели
- Без OAuth роль берется из вызова клиента, и любой с доступом к серверу может выдать себя за другую роль
Установка
- Работает в
В терминале, через SkillFoxx CLI
npx skillfoxx add mcp/schemagateОпределит агенты на машине, покажет уровень доступа и зафиксирует версию.
Другие способы установки
Доступ и проверки
Как мы проверяемШирокий доступИнструмент может менять данные, выполнять команды или работать с секретами.
- `run_query` выполняет чтения в вашей базе и возвращает строки модели
- Без OAuth роль берется из вызова клиента, и любой с доступом к серверу может выдать себя за другую роль
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
schemagate стоит перед моделью, которая пишет SQL. Вместо полной схемы базы в промпт идут DDL только тех таблиц, что подходят вопросу и доступны вызывающему по его роли. Недоступная таблица не попадает в запрос вовсе, поэтому ее не достать переформулировкой вопроса и нечего вычищать из ответа. Установка идет через `pip install schemagate`, а демонстрация без базы и ключа запускается командой `schemagate demo "salary by employee"`. Поддерживаются PostgreSQL, Oracle, MySQL, SQL Server и SQLite. Команда `schemagate select` печатает выбранные таблицы, с флагом `--answer` сразу пишет SQL, `schemagate studio` дает то же в виде страницы. MCP-сервер `schemagate-mcp` отдает агенту девять инструментов только на чтение: `select_schema`, `list_objects`, `describe_object`, `run_query`, `semantic_query`, `answer`, `deep_answer`, `refresh_catalog` и `health`. Каждое решение пишется в журнал аудита.
Для кого. Инженерам данных и командам, которые строят text-to-sql для базы с сотнями таблиц и ролями доступа, и хотят экономить токены и не показывать модели лишнего.
Подходит, если
- Схема на тысячи объектов съедает почти весь промпт, а на вопрос нужны три таблицы
- Аналитик из отдела продаж не должен видеть таблицу зарплат, даже если спросит о ней прямо
- Защита `row-level security` в базе скрывает строки, и модель отвечает «записей нет» вместо «доступа нет»
- Агент в Cursor или Claude Desktop пишет запросы к вашей базе, и вы хотите ограничить ему обзор схемы
Не подходит, если
- База маленькая, и вся схема умещается в промпт без потерь: тут выигрыш около девяти процентов
- Нужна надежная защита от утечек: сервер доверяет роли из вызова и служит ограничителем обзора, а не замком, пока не включен OAuth
- Требуется только текст-в-SQL без разграничения доступа: достаточно любого более простого генератора
Пример запроса к агенту
Через schemagate выбери таблицы для вопроса «выручка по месяцам» для роли `finance` и напиши запрос к базе приложения.MCP
- Транспорт
- stdio, http
- Авторизация
- не нужна
Переменные окружения
SCHEMAGATE_DATABASE_URLсекрет- Адрес подключения к базе, пароль держите здесь, не в аргументах.
SCHEMAGATE_MCP_OAUTH_ISSUER- Издатель токенов для включения OAuth по HTTP.
Ограничения
По умолчанию MCP-сервер доверяет `principal` и `roles`, которые передает клиент, и это ограничитель обзора, а не защита: через HTTP его надо ставить за аутентификацию или включать OAuth (переменные `SCHEMAGATE_MCP_OAUTH_ISSUER` и `SCHEMAGATE_MCP_OAUTH_AUDIENCE`). Инструмент `run_query` возвращает строки, то есть данные.
Выбор таблиц может пропустить нужную: на хранилищах Spider 2.0 все нужные таблицы попали в выборку в 86,7 % вопросов. Для работы с базой нужен драйвер своего диалекта, например `schemagate[mcp,postgres]`.
Как отключить. Удалите сервер schemagate из конфигурации клиента командой `claude mcp remove schemagate` или правкой JSON. Файлы аудита и памяти, если включали `SCHEMAGATE_AUDIT_LOG` и `SCHEMAGATE_MEMORY`, лежат в `~/.schemagate`.
Частые вопросы
Как подключить schemagate к Claude Code?
Командой `claude mcp add schemagate -- uvx --from "schemagate[mcp]" schemagate-mcp --url demo` для встроенной схемы. Для своей базы добавьте драйвер, например `schemagate[mcp,postgres]`, и задайте `SCHEMAGATE_DATABASE_URL` в `env`.
Чем это лучше `row-level security`?
`Row-level security` скрывает строки, но модель все равно видит запретную таблицу и пишет к ней запрос, а пользователь получает «записей нет». schemagate не пускает такую таблицу в промпт.
Куда писать пароль к базе?
В переменную `SCHEMAGATE_DATABASE_URL` в `env`, а не в аргумент `--url`: аргументы команд видны всем процессам на машине.
Можно ли попробовать без базы?
Да: `schemagate demo "salary by employee"` работает на встроенной схеме без базы и ключа, а в браузере есть демонстрация на странице проекта.
Какие базы данных поддерживаются?
PostgreSQL, Oracle, MySQL, SQL Server и SQLite. Для каждой, кроме SQLite, ставят свой драйвер как дополнение к пакету, например `postgres`, `mysql`, `mssql` или `oracle`.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
MCP-серверыText2SQL-сервер FalkorDB: агент задает вопрос к базе обычным языком, а граф схемы помогает собрать верный SQL
MCP-сервер text-to-SQL: агент спрашивает базу словами, получает SQL и трассу ответа, а при нехватке данных отказ с причиной.
MCP-сервер на Python для работы с MySQL: список таблиц, чтение данных, выполнение SQL и разбор схемы через контролируемый интерфейс
Десктопное рабочее место для SQL с встроенным MCP-сервером: агент читает схему и выполняет запросы в том же клиенте, где работаете вы
MCP-сервер и скиллы от TigerData, с которыми агент пишет схемы и запросы PostgreSQL по актуальной документации и практикам
vi-sql — терминальный клиент для SQL-баз со встроенным MCP-сервером: агент видит схему и пишет запросы прямо в ваш редактор
Коротко о README
README показывает проблему text-to-sql с полной схемой, демонстрацию с двумя ролями, замеры экономии токенов на публичных схемах, режимы CLI, Studio и MCP, а в конце предупреждает, что сервер доверяет переданной роли без OAuth.