Documentation
ClickHouse MCP Server
Нормальный MCP-сервер для ClickHouse с безопасными дефолтами, stdio и SSE, Docker-запуском и read-only режимом по умолчанию.
Что умеет
- показать список баз данных;
- показать таблицы в базе;
- показать схему таблицы;
- выполнить SQL через MCP-инструмент
query; - работать через
stdioиSSE; - запускаться локально, в Docker и в
docker compose.
Что важно про безопасность
- По умолчанию сервер работает в read-only режиме.
INSERT,ALTER,CREATE,DROP,TRUNCATE,RENAME,OPTIMIZE,SYSTEM,GRANT,REVOKEи другие write/admin запросы запрещены, пока не включен--allow-write.- Для
SELECTбезLIMITсервер сам добавляет лимит по умолчанию. --secureтеперь реально включает TLS с проверкой сертификата.- Если нужен небезопасный TLS для dev/self-host, включайте отдельно
--insecure-skip-verify.
Быстрый старт
Сборка
go build -o clickhouse-mcpЗапуск через stdio
./clickhouse-mcp \
-transport stdio \
-url localhost:9000/default \
-user default \
-password clickhouseЗапуск через SSE
./clickhouse-mcp \
-transport sse \
-port 8082 \
-public-base-url http://localhost:8082 \
-url localhost:9000/default \
-user default \
-password clickhouseТестовый режим
./clickhouse-mcp -testОн печатает реальные примеры tools/call, которые можно слать MCP-клиенту.
Docker
Один контейнер
docker build -t clickhouse-mcp .
docker run --rm -p 8082:8082 \
-e CLICKHOUSE_MCP_TRANSPORT=sse \
-e CLICKHOUSE_MCP_PORT=8082 \
-e CLICKHOUSE_MCP_PUBLIC_BASE_URL=http://localhost:8082 \
-e CLICKHOUSE_MCP_URL=host.docker.internal:9000/default \
-e CLICKHOUSE_MCP_USER=default \
-e CLICKHOUSE_MCP_PASSWORD=clickhouse \
clickhouse-mcpЕсли ClickHouse стоит на хосте Linux, добавьте --add-host=host.docker.internal:host-gateway.
Для Docker-сценариев у default должен быть задан пароль: без него официальный образ ClickHouse режет сетевой доступ к этому пользователю.
Docker Compose
docker compose up -dПо умолчанию compose поднимает:
clickhouseна9000и8123;clickhouse-mcpна8082.- логин ClickHouse:
default - пароль ClickHouse:
clickhouse
Healthcheck MCP:
http://localhost:8082/healthzПеременные окружения
Основные:
CLICKHOUSE_MCP_TRANSPORT—stdioилиsseCLICKHOUSE_MCP_PORT— порт SSE сервераCLICKHOUSE_MCP_PUBLIC_BASE_URL— публичный базовый URL для advertised SSE endpointCLICKHOUSE_MCP_URL—host:port/databaseCLICKHOUSE_MCP_USERCLICKHOUSE_MCP_PASSWORDCLICKHOUSE_MCP_DB— переопределяет базу из URLCLICKHOUSE_MCP_SECURECLICKHOUSE_MCP_INSECURE_SKIP_VERIFYCLICKHOUSE_MCP_ALLOW_WRITECLICKHOUSE_MCP_DEFAULT_LIMITCLICKHOUSE_MCP_MAX_LIMIT
Для обратной совместимости сервер понимает и старые переменные:
CLICKHOUSE_URLCLICKHOUSE_USERCLICKHOUSE_PASSWORDCLICKHOUSE_DBCLICKHOUSE_SECUREPORT
Флаги
-transport,-t—stdioилиsse-test— печатает рабочие MCP-примеры-url—host:port/database-user-password-db-secure-insecure-skip-verify-allow-write-port-public-base-url-default-query-limit-max-query-limit
Примеры MCP-запросов
Список баз данных
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "get_databases",
"arguments": {}
}
}Список таблиц
{
"jsonrpc": "2.0",
"id": "2",
"method": "tools/call",
"params": {
"name": "get_tables",
"arguments": {
"database": "default"
}
}
}Схема таблицы
{
"jsonrpc": "2.0",
"id": "3",
"method": "tools/call",
"params": {
"name": "get_schema",
"arguments": {
"database": "default",
"table": "my_table"
}
}
}SQL запрос
{
"jsonrpc": "2.0",
"id": "4",
"method": "tools/call",
"params": {
"name": "query",
"arguments": {
"query": "SELECT * FROM default.my_table",
"limit": 100
}
}
}Настройка MCP клиента
Stdio
{
"mcpServers": {
"clickhouse": {
"command": "/path/to/clickhouse-mcp",
"args": [
"-transport",
"stdio",
"-url",
"localhost:9000/default",
"-user",
"default",
"-password",
"clickhouse"
]
}
}
}SSE
{
"mcpServers": {
"clickhouse": {
"url": "http://localhost:8082/sse"
}
}
}Если сервер стоит за proxy или доступен не по localhost, обязательно задайте -public-base-url или CLICKHOUSE_MCP_PUBLIC_BASE_URL.
Ограничения первой версии
- Нет auth-слоя для SSE.
- Нет метрик и отдельного
/readyкроме простого/healthz. - SQL-политика намеренно строгая: всё нераспознанное в read-only режиме режется.
- Парсер SQL не пытается быть полноценным SQL parser; он решает продуктовую задачу безопасного ограничения запросов.
Разработка
Для локальной работы есть Taskfile.yml:
task build
task test
task check
task rungo vet ./...
go test ./...
docker build -t clickhouse-mcp:test .Интеграционные тесты включаются так:
CLICKHOUSE_MCP_INTEGRATION=1 \
CLICKHOUSE_MCP_TEST_URL=localhost:9000/default \
CLICKHOUSE_MCP_TEST_USER=default \
CLICKHOUSE_MCP_TEST_PASSWORD=clickhouse \
go test ./...Лицензия
MIT. Подробности в LICENSE.
Similar MCP
Based on tags & features
Trending MCP
Most active this week