valv — MCP-сервер для Claude Code: доступ к SQL-базе без SQL
Подключает агента к живой базе по строке подключения. По умолчанию только чтение, а видимость таблиц ограничивают политики.
claude mcp add --env DATABASE_URL=<DATABASE_URL> --env VALV_PROVIDER=<VALV_PROVIDER> --env VALV_DATABASE=<VALV_DATABASE> --env VALV_TABLES=<VALV_TABLES> --env VALV_EXCLUDE=<VALV_EXCLUDE> --transport stdio mcp -- npx -y @valv/mcpЧто делает valv
Сервер ставится на строку подключения к базе, сам читает схему и отдаёт агенту четыре инструмента: list_resources, search_resources, describe_resource и query. SQL до модели не доходит — она работает через эти вызовы. Поддерживаются PostgreSQL, MySQL, SQLite, CockroachDB, ClickHouse и MongoDB.
Быстрый путь — npx @valv/mcp init: он проверяет базу, показывает таблицы, предлагает режим доступа и дописывает запись сервера в конфиг Claude, Claude Desktop, Cursor или Codex, не затирая то, что там уже есть. Ручной вариант — блок mcpServers в .mcp.json с DATABASE_URL в env. Для ClickHouse нужен HTTP-адрес и имя базы в VALV_DATABASE, для MongoDB — VALV_DATABASE, если база не выбрана в самой строке.
Без файла политик доступ открыт на чтение по всем таблицам. Как только вы указываете VALV_POLICY_FILE, таблицы без описанной политики закрываются — deny-all. Скрыть колонки или отфильтровать строки можно там же, в модуле политики. Разграничение по тенанту или пользователю на каждый запрос делается не здесь, а в приложении через @valv/mcp-sdk.
Какие задачи решает
- дать агенту читать базу, не выдавая ему SQL-доступ
- ограничить видимость таблиц белым списком через
VALV_TABLES - спрятать служебные колонки от модели через политику
- подключить одну и ту же базу к нескольким редакторам
- поднять сервер по HTTP вместо stdio через
VALV_HTTP_PORT
Примеры запросов агенту
- Покажи, какие таблицы есть в базе, и опиши схему
orders - Найди в базе всё, что относится к заказам за прошлый месяц
- Собери обзор базы в
valv-map.html
Как установить valv
Командой платформы
claude mcp add --env DATABASE_URL=<DATABASE_URL> --env VALV_PROVIDER=<VALV_PROVIDER> --env VALV_DATABASE=<VALV_DATABASE> --env VALV_TABLES=<VALV_TABLES> --env VALV_EXCLUDE=<VALV_EXCLUDE> --transport stdio mcp -- npx -y @valv/mcpВместо <…> подставьте свои значения. Ещё 3 переменные окружения — в README сервера
Командой платформы
codex mcp add mcp --env DATABASE_URL=<DATABASE_URL> --env VALV_PROVIDER=<VALV_PROVIDER> --env VALV_DATABASE=<VALV_DATABASE> --env VALV_TABLES=<VALV_TABLES> --env VALV_EXCLUDE=<VALV_EXCLUDE> -- npx -y @valv/mcpВместо <…> подставьте свои значения. Ещё 3 переменные окружения — в README сервера
Файл настроек
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@valv/mcp"
],
"env": {
"DATABASE_URL": "<DATABASE_URL>",
"VALV_PROVIDER": "<VALV_PROVIDER>",
"VALV_DATABASE": "<VALV_DATABASE>",
"VALV_TABLES": "<VALV_TABLES>",
"VALV_EXCLUDE": "<VALV_EXCLUDE>"
}
}
}
}Вместо <…> подставьте свои значения. Ещё 3 переменные окружения — в README сервера
Файл настроек
{
"servers": {
"mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@valv/mcp"
],
"env": {
"DATABASE_URL": "<DATABASE_URL>",
"VALV_PROVIDER": "<VALV_PROVIDER>",
"VALV_DATABASE": "<VALV_DATABASE>",
"VALV_TABLES": "<VALV_TABLES>",
"VALV_EXCLUDE": "<VALV_EXCLUDE>"
}
}
}
}Вместо <…> подставьте свои значения. Ещё 3 переменные окружения — в README сервера
Командой платформы
gemini mcp add -e DATABASE_URL=<DATABASE_URL> -e VALV_PROVIDER=<VALV_PROVIDER> -e VALV_DATABASE=<VALV_DATABASE> -e VALV_TABLES=<VALV_TABLES> -e VALV_EXCLUDE=<VALV_EXCLUDE> mcp npx -y @valv/mcpВместо <…> подставьте свои значения. Ещё 3 переменные окружения — в README сервера
По шагам, с командами для каждой платформы: Как подключить MCP-сервер: Claude Code, Codex, Cursor, VS Code, Gemini CLI и другие
Вопросы о valv
Как установить valv в Claude Code?
Одной командой: claude mcp add mcp -e DATABASE_URL=<DATABASE_URL> -- npx -y @valv/mcp. Если нужны провайдер, база, списки таблиц и исключения, есть расширенный вариант с `--env VALV_PROVIDER=<VALV_PROVIDER> --env VALV_DATABASE=<VALV_DATABASE> --env VALV_TABLES=<VALV_TABLES> --env VALV_EXCLUDE=<VALV_EXCLUDE> и --transport stdio`.
Что делает valv?
Читает схему подключённой базы и отдаёт агенту четыре инструмента для просмотра и запросов. По умолчанию работает только на чтение, а политики решают, какие таблицы и колонки вообще видны.
Чем ограничивается доступ агента к данным?
Переменной VALV_TABLES можно задать белый список таблиц, VALV_EXCLUDE — чёрный, который применяется после него. Файл политик через VALV_POLICY_FILE скрывает колонки и фильтрует строки, а таблицы без политики закрыты.