ClickHouse MCP Server
An MCP server for ClickHouse.
Features
Tools
-
run_select_query
- Execute SQL queries on your ClickHouse cluster.
- Input:
sql
(string): The SQL query to execute. - All ClickHouse queries are run with
readonly = 1
to ensure they are safe.
-
list_databases
- List all databases on your ClickHouse cluster.
-
list_tables
- List all tables in a database.
- Input:
database
(string): The name of the database.
Configuration
-
Open the Claude Desktop configuration file located at:
- On macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- On Windows:
%APPDATA%/Claude/claude_desktop_config.json
- On macOS:
-
Add the following:
1{ 2 "mcpServers": { 3 "mcp-clickhouse": { 4 "command": "uv", 5 "args": [ 6 "run", 7 "--with", 8 "mcp-clickhouse", 9 "--python", 10 "3.13", 11 "mcp-clickhouse" 12 ], 13 "env": { 14 "CLICKHOUSE_HOST": "<clickhouse-host>", 15 "CLICKHOUSE_PORT": "<clickhouse-port>", 16 "CLICKHOUSE_USER": "<clickhouse-user>", 17 "CLICKHOUSE_PASSWORD": "<clickhouse-password>", 18 "CLICKHOUSE_SECURE": "true", 19 "CLICKHOUSE_VERIFY": "true", 20 "CLICKHOUSE_CONNECT_TIMEOUT": "30", 21 "CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30" 22 } 23 } 24 } 25}
Update the environment variables to point to your own ClickHouse service.
Or, if you'd like to try it out with the ClickHouse SQL Playground, you can use the following config:
1{ 2 "mcpServers": { 3 "mcp-clickhouse": { 4 "command": "uv", 5 "args": [ 6 "run", 7 "--with", 8 "mcp-clickhouse", 9 "--python", 10 "3.13", 11 "mcp-clickhouse" 12 ], 13 "env": { 14 "CLICKHOUSE_HOST": "sql-clickhouse.clickhouse.com", 15 "CLICKHOUSE_PORT": "8443", 16 "CLICKHOUSE_USER": "demo", 17 "CLICKHOUSE_PASSWORD": "", 18 "CLICKHOUSE_SECURE": "true", 19 "CLICKHOUSE_VERIFY": "true", 20 "CLICKHOUSE_CONNECT_TIMEOUT": "30", 21 "CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30" 22 } 23 } 24 } 25}
-
Locate the command entry for
uv
and replace it with the absolute path to theuv
executable. This ensures that the correct version ofuv
is used when starting the server. On a mac, you can find this path usingwhich uv
. -
Restart Claude Desktop to apply the changes.
Development
-
In
test-services
directory rundocker compose up -d
to start the ClickHouse cluster. -
Add the following variables to a
.env
file in the root of the repository.
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
-
Run
uv sync
to install the dependencies. To installuv
follow the instructions here. Then dosource .venv/bin/activate
. -
For easy testing, you can run
mcp dev mcp_clickhouse/mcp_server.py
to start the MCP server.
Environment Variables
The following environment variables are used to configure the ClickHouse connection:
Required Variables
CLICKHOUSE_HOST
: The hostname of your ClickHouse serverCLICKHOUSE_USER
: The username for authenticationCLICKHOUSE_PASSWORD
: The password for authentication
Optional Variables
CLICKHOUSE_PORT
: The port number of your ClickHouse server- Default:
8443
if HTTPS is enabled,8123
if disabled - Usually doesn't need to be set unless using a non-standard port
- Default:
CLICKHOUSE_SECURE
: Enable/disable HTTPS connection- Default:
"true"
- Set to
"false"
for non-secure connections
- Default:
CLICKHOUSE_VERIFY
: Enable/disable SSL certificate verification- Default:
"true"
- Set to
"false"
to disable certificate verification (not recommended for production)
- Default:
CLICKHOUSE_CONNECT_TIMEOUT
: Connection timeout in seconds- Default:
"30"
- Increase this value if you experience connection timeouts
- Default:
CLICKHOUSE_SEND_RECEIVE_TIMEOUT
: Send/receive timeout in seconds- Default:
"300"
- Increase this value for long-running queries
- Default:
CLICKHOUSE_DATABASE
: Default database to use- Default: None (uses server default)
- Set this to automatically connect to a specific database
Example Configurations
For local development with Docker:
1# Required variables 2CLICKHOUSE_HOST=localhost 3CLICKHOUSE_USER=default 4CLICKHOUSE_PASSWORD=clickhouse 5 6# Optional: Override defaults for local development 7CLICKHOUSE_SECURE=false # Uses port 8123 automatically 8CLICKHOUSE_VERIFY=false
For ClickHouse Cloud:
1# Required variables 2CLICKHOUSE_HOST=your-instance.clickhouse.cloud 3CLICKHOUSE_USER=default 4CLICKHOUSE_PASSWORD=your-password 5 6# Optional: These use secure defaults 7# CLICKHOUSE_SECURE=true # Uses port 8443 automatically 8# CLICKHOUSE_DATABASE=your_database
For ClickHouse SQL Playground:
1CLICKHOUSE_HOST=sql-clickhouse.clickhouse.com 2CLICKHOUSE_USER=demo 3CLICKHOUSE_PASSWORD= 4# Uses secure defaults (HTTPS on port 8443)
You can set these variables in your environment, in a .env
file, or in the Claude Desktop configuration:
1{ 2 "mcpServers": { 3 "mcp-clickhouse": { 4 "command": "uv", 5 "args": [ 6 "run", 7 "--with", 8 "mcp-clickhouse", 9 "--python", 10 "3.13", 11 "mcp-clickhouse" 12 ], 13 "env": { 14 "CLICKHOUSE_HOST": "<clickhouse-host>", 15 "CLICKHOUSE_USER": "<clickhouse-user>", 16 "CLICKHOUSE_PASSWORD": "<clickhouse-password>", 17 "CLICKHOUSE_DATABASE": "<optional-database>" 18 } 19 } 20 } 21}