ClickHouse
公式ClickHouseデータベースサーバーにクエリを実行します。
Click House MCPで何ができますか?
- 読み取り専用のSQLクエリを実行 — アシスタントに依頼して、
run_queryを使用してClickHouseクラスターに対して任意のSELECTクエリを実行します。 - データベースとテーブルの一覧表示 —
list_databasesですべてのデータベースを一覧表示するか、list_tablesで特定のデータベース内のテーブルをページネーションしてスキーマを探索します。 - chDBを介してファイルやURLに直接クエリを実行 —
run_chdb_select_queryを使用して、ローカルファイルやリモートデータソースに対して、ClickHouseにロードせずにSQLを実行します。 - 書き込みおよび破壊的操作の制御 — DDL/DMLに対して
CLICKHOUSE_ALLOW_WRITE_ACCESSを有効にし、オプションでCLICKHOUSE_ALLOW_DROPを有効にして、AI支援セッション中にDROPまたはTRUNCATEステートメントを許可します。
ドキュメント
ClickHouse MCP サーバー
ClickHouse 用 MCP サーバーです。
機能
ClickHouse ツール
-
run_query- ClickHouse クラスター上で SQL クエリを実行します。
- 入力:
query(文字列): 実行する SQL クエリ。 - クエリはデフォルトで読み取り専用モード (
CLICKHOUSE_ALLOW_WRITE_ACCESS=false) で実行されますが、必要に応じて明示的に書き込みを有効にすることも可能です。
-
list_databases- ClickHouse クラスター上のすべてのデータベースを一覧表示します。
-
list_tables- データベース内のテーブルをページネーション付きで一覧表示します。
- 必須入力:
database(文字列)。 - オプション入力:
like/not_like(文字列): テーブル名にLIKEまたはNOT LIKEフィルターを適用します。page_token(文字列): 次のページを取得するために前回の呼び出しで返されたトークン。page_size(整数, デフォルト50): 1 ページあたりに返されるテーブル数。include_detailed_columns(真偽値, デフォルトtrue):falseの場合、完全なcreate_table_queryを維持しつつ、カラムメタデータを省略してレスポンスを軽量化します。
- レスポンス形式:
tables: 現在のページのテーブルオブジェクトの配列。next_page_token: 次のページを取得するためにこの値を渡すか、テーブルがもうない場合はnullになります。total_tables: 指定されたフィルターに一致するテーブルの総数。
chDB ツール
run_chdb_select_query- chDB の組み込み ClickHouse エンジンを使用して SQL クエリを実行します。
- 入力:
query(文字列): 実行する SQL クエリ。 - ETL プロセスなしで、さまざまなソース (ファイル、URL、データベース) から直接データをクエリします。
- オプションの
chdbエクストラが必要です:pip install 'mcp-clickhouse[chdb]'
ヘルスチェックエンドポイント
HTTP または SSE トランスポートで実行している場合、ヘルスチェックエンドポイントが /health で利用可能です。このエンドポイントは:
- サーバーが正常で ClickHouse に接続できる場合、
200 OK(本文:OK) を返します。 - サーバーが ClickHouse に接続できない場合、一般的なエラーメッセージとともに
503 Service Unavailableを返します。
このエンドポイントは、オーケストレータープローブ (例: Kubernetes の liveness/readiness、ロードバランサー) が認証情報なしで到達できるように、意図的に認証不要になっています。バックエンドのバージョン文字列やエラーの詳細が漏洩するのを避けるため、レスポンス本文は意図的に最小限に抑えられています。障害のデバッグはサーバーログを介して行ってください。
例:
curl http://localhost:8000/health
# Response: OK
セキュリティ
HTTP/SSE トランスポートの認証
HTTP または SSE トランスポートを使用する場合、認証はデフォルトで必須です。stdio トランスポート (デフォルト) は標準入出力のみを介して通信するため、認証は不要です。
3 つの認証モードがサポートされています。いずれかを選択してください:
| モード | 使用するケース | 環境変数 |
|---|---|---|
| 静的ベアラートークン | シンプルなデプロイ、内部サービス | CLICKHOUSE_MCP_AUTH_TOKEN |
| OAuth / OIDC (FastMCP 経由) | Azure Entra、Google、GitHub、WorkOS など | FASTMCP_SERVER_AUTH=<provider-class-path> (+ プロバイダー固有の FASTMCP_SERVER_AUTH_* 変数) |
| 無効化 | ローカル開発のみ | CLICKHOUSE_MCP_AUTH_DISABLED=true |
HTTP/SSE トランスポートでこれらがいずれも設定されていない場合、起動に失敗します。
認証の設定
-
安全なトークンを生成します (任意のランダムな文字列で構いません):
# Using uuidgen (macOS/Linux) uuidgen # Using openssl openssl rand -hex 32 -
トークンを使用してサーバーを設定します:
export CLICKHOUSE_MCP_AUTH_TOKEN="your-generated-token" -
リクエストにトークンを含めるように MCP クライアントを設定します:
HTTP/SSE トランスポートを使用する Claude Desktop の場合:
{ "mcpServers": { "mcp-clickhouse": { "url": "http://127.0.0.1:8000", "headers": { "Authorization": "Bearer your-generated-token" } } } }注:
/healthエンドポイントは意図的に認証不要です (上記の ヘルスチェックエンドポイント を参照)。ベアラートークン認証が実際に未認証リクエストを拒否していることを確認するには、MCP エンドポイント自体に (例: MCP Inspector を使用して) アクセスするか、Authorizationヘッダーあり/なしで/mcpに JSON-RPC リクエストを POST し、未認証の呼び出しが401を返すことを確認します。
FastMCP 経由の OAuth / OIDC
ID プロバイダー (Azure Entra、Google、GitHub、WorkOS など) を使用する本番デプロイでは、静的トークンを使用する代わりに、FastMCP の組み込み認証プロバイダー に認証を委任します。FASTMCP_SERVER_AUTH を FastMCP 認証プロバイダーの完全なクラスパスに設定し、プロバイダー固有の FASTMCP_SERVER_AUTH_* 変数とともに設定し、CLICKHOUSE_MCP_AUTH_TOKEN は設定しないままにします。
例 (Azure Entra):
export FASTMCP_SERVER_AUTH=fastmcp.server.auth.providers.azure.AzureProvider
export FASTMCP_SERVER_AUTH_AZURE_TENANT_ID="<tenant-id>"
export FASTMCP_SERVER_AUTH_AZURE_CLIENT_ID="<client-id>"
export FASTMCP_SERVER_AUTH_AZURE_CLIENT_SECRET="<client-secret>"
プロバイダーとその必要な環境変数の完全なリストについては、FastMCP ドキュメント を参照してください。
開発モード (認証の無効化)
ローカル開発およびテストのみを目的として、以下を設定することで認証を無効にできます:
export CLICKHOUSE_MCP_AUTH_DISABLED=true
警告: これはローカル開発にのみ使用してください。サーバーがネットワークに公開されている場合は、認証を無効にしないでください。
設定
この MCP サーバーは、ClickHouse と chDB の両方をサポートしています。必要に応じて、いずれかまたは両方を有効にできます。
-
次の場所にある Claude Desktop 設定ファイルを開きます:
- macOS の場合:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows の場合:
%APPDATA%/Claude/claude_desktop_config.json
- macOS の場合:
-
以下を追加します:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_ROLE": "<clickhouse-role>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
環境変数を更新して、独自の ClickHouse サービスを指すようにします。
または、ClickHouse SQL Playground で試してみたい場合は、次の設定を使用できます:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "sql-clickhouse.clickhouse.com",
"CLICKHOUSE_PORT": "8443",
"CLICKHOUSE_USER": "demo",
"CLICKHOUSE_PASSWORD": "",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
chDB (組み込み ClickHouse エンジン) の場合は、次の設定を追加します:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse[chdb]",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CHDB_ENABLED": "true",
"CLICKHOUSE_ENABLED": "false",
"CHDB_DATA_PATH": "/path/to/chdb/data"
}
}
}
}
ClickHouse と chDB の両方を同時に有効にすることもできます:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse[chdb]",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30",
"CHDB_ENABLED": "true",
"CHDB_DATA_PATH": "/path/to/chdb/data"
}
}
}
}
-
uvのコマンドエントリを見つけ、uv実行可能ファイルへの絶対パスに置き換えます。これにより、サーバー起動時に正しいバージョンのuvが使用されるようになります。Mac では、which uvを使用してこのパスを見つけることができます。 -
Claude Desktop を再起動して変更を適用します。
オプションの書き込みアクセス
デフォルトでは、この MCP は読み取り専用クエリを強制するため、探索中に誤った変更が発生することはありません。DDL または INSERT/UPDATE ステートメントを許可するには、CLICKHOUSE_ALLOW_WRITE_ACCESS 環境変数を true に設定します。ClickHouse インスタンス自体が書き込みを許可しない場合、サーバーは引き続き読み取り専用モードを強制します。
破壊的操作の保護
書き込みアクセスが有効 (CLICKHOUSE_ALLOW_WRITE_ACCESS=true) な場合でも、破壊的操作 (DROP TABLE、DROP DATABASE、DROP VIEW、DROP DICTIONARY、TRUNCATE TABLE) には、安全のため追加のオプトインフラグが必要です。これにより、AI 探索中の偶発的なデータ削除を防ぎます。
破壊的操作を有効にするには、両方のフラグを設定します:
"env": {
"CLICKHOUSE_ALLOW_WRITE_ACCESS": "true",
"CLICKHOUSE_ALLOW_DROP": "true"
}
この 2 層アプローチにより、偶発的な削除が非常に困難になります:
- 書き込み操作 (INSERT、UPDATE、CREATE) には
CLICKHOUSE_ALLOW_WRITE_ACCESS=trueが必要です - 破壊的操作 (DROP、TRUNCATE) にはさらに
CLICKHOUSE_ALLOW_DROP=trueが必要です
uv なしでの実行 (システム Python の使用)
uv の代わりにシステムの Python インストールを使用する場合は、PyPI からパッケージをインストールして直接実行できます:
-
pip を使用してパッケージをインストールします:
python3 -m pip install mcp-clickhousechDB サポートもインストールするには:
python3 -m pip install 'mcp-clickhouse[chdb]'最新バージョンにアップグレードするには:
python3 -m pip install --upgrade mcp-clickhouse -
Python を直接使用するように Claude Desktop 設定を更新します:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "python3",
"args": [
"-m",
"mcp_clickhouse.main"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
または、インストールされたスクリプトを直接使用することもできます:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "mcp-clickhouse",
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
注: Python 実行可能ファイルまたは mcp-clickhouse スクリプトがシステム PATH にない場合は、それらへのフルパスを使用してください。パスは以下を使用して見つけることができます:
- Python 実行可能ファイルの場合は
which python3 - インストールされたスクリプトの場合は
which mcp-clickhouse
カスタムミドルウェア
ソースコードを変更することなく、MCP サーバーにカスタムミドルウェアを追加できます。FastMCP は、MCP プロトコルメッセージ (ツール呼び出し、リソース読み取り、プロンプトなど) をインターセプトして処理できるミドルウェアシステムを提供します。
使用方法
Middlewareを拡張するミドルウェアクラスとsetup_middleware(mcp)関数を持つ Python モジュールを作成します:
# my_middleware.py
import logging
from fastmcp.server.middleware import Middleware, MiddlewareContext, CallNext
logger = logging.getLogger("my-middleware")
class LoggingMiddleware(Middleware):
"""Log all tool calls."""
async def on_call_tool(self, context: MiddlewareContext, call_next: CallNext):
tool_name = context.message.name if hasattr(context.message, 'name') else 'unknown'
logger.info(f"Calling tool: {tool_name}")
result = await call_next(context)
logger.info(f"Tool {tool_name} completed")
return result
def setup_middleware(mcp):
"""Register middleware with the MCP server."""
mcp.add_middleware(LoggingMiddleware())
MCP_MIDDLEWARE_MODULE環境変数をモジュール名 (.py拡張子なし) に設定します:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": ["run", "--with", "mcp-clickhouse", "--python", "3.10", "mcp-clickhouse"],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"MCP_MIDDLEWARE_MODULE": "my_middleware"
}
}
}
}
- ミドルウェアモジュールが Python のインポートパス上にあることを確認します (例: MCP サーバーが実行されるのと同じディレクトリ、またはパッケージとしてインストールされている)。
ミドルウェアの例
example_middleware.py に、一般的なパターンを示すミドルウェアモジュールの例が提供されています:
- すべての MCP リクエストのログ記録
- ツール呼び出しの具体的なログ記録
- リクエスト処理時間の測定
例を使用するには:
"env": {
"MCP_MIDDLEWARE_MODULE": "example_middleware"
}
ミドルウェア機能
Middleware 基本クラスは、さまざまな MCP 操作のためのフックを提供します:
on_message(context, call_next)- すべてのメッセージに対して呼び出されますon_request(context, call_next)- すべてのリクエストに対して呼び出されますon_notification(context, call_next)- すべての通知に対して呼び出されますon_call_tool(context, call_next)- ツールが実行されるときに呼び出されますon_read_resource(context, call_next)- リソースが読み取られるときに呼び出されますon_get_prompt(context, call_next)- プロンプトが取得されるときに呼び出されますon_list_tools(context, call_next)- ツールを一覧表示するときに呼び出されますon_list_resources(context, call_next)- リソースを一覧表示するときに呼び出されますon_list_resource_templates(context, call_next)- リソーステンプレートを一覧表示するときに呼び出されますon_list_prompts(context, call_next)- プロンプトを一覧表示するときに呼び出されます
各フックは、メッセージとメタデータを含む MiddlewareContext オブジェクトと、パイプラインを続行するための call_next 関数を受け取ります。
コンテキスト状態による動的クライアント設定
ミドルウェアは、CLIENT_CONFIG_OVERRIDES_KEY コンテキスト状態キーを使用して、リクエストごとに ClickHouse クライアント設定を上書きできます。サーバーはこれらの上書きを環境変数からの基本設定とマージします。
from fastmcp.server.dependencies import get_context
from mcp_clickhouse.mcp_server import CLIENT_CONFIG_OVERRIDES_KEY
ctx = get_context()
ctx.set_state(CLIENT_CONFIG_OVERRIDES_KEY, {
"connect_timeout": 60,
"send_receive_timeout": 120
})
これにより、動的なタイムアウト調整、テナント固有のルーティング、ユーザーごとの接続設定などの高度なユースケースが可能になります。
開発
-
test-servicesディレクトリでdocker compose up -dを実行して ClickHouse クラスターを起動します。 -
リポジトリのルートにある
.envファイルに次の変数を追加します。
注: このコンテキストでの default ユーザーの使用は、ローカル開発目的のみを意図しています。
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
-
uv syncを実行して依存関係をインストールします。uvをインストールするには、こちら の手順に従ってください。その後、source .venv/bin/activateを実行します。 -
MCP Inspector で簡単にテストするには、
fastmcp dev mcp_clickhouse/mcp_server.pyを実行して MCP サーバーを起動します。 -
HTTP トランスポートとヘルスチェックエンドポイントでテストするには:
# For development, disable authentication CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_DISABLED=true python -m mcp_clickhouse.main # Or with authentication (generate a token first) CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_TOKEN="your-token" python -m mcp_clickhouse.main # Then in another terminal: curl http://localhost:8000/health
環境変数
設定は独立したグループに分割されています。これらを混同することは、デバッグが困難な接続障害の一般的な原因です:
| グループ | 変数 | 制御対象 |
|---|---|---|
| ClickHouse データベース接続 | CLICKHOUSE_HOST, CLICKHOUSE_PORT, CLICKHOUSE_SECURE, CLICKHOUSE_VERIFY, … | この MCP サーバーが HTTP インターフェースを介して ClickHouse クラスターに接続する方法 |
| MCP サーバー / トランスポート | CLICKHOUSE_MCP_*, FASTMCP_SERVER_AUTH, FASTMCP_SERVER_AUTH_* | MCP トランスポート、認証、およびクエリツールの実行制限 |
| ミドルウェア / chDB | MCP_MIDDLEWARE_MODULE, CHDB_* | オプションの拡張機能 |
[!IMPORTANT]
CLICKHOUSE_SECURE、CLICKHOUSE_VERIFY、CLICKHOUSE_PORTなどの変数は、ClickHouse データベース接続にのみ適用されます。これらは MCP プロトコルエンドポイントの TLS、ポート、または認証を設定するものではありません。例: MCP サーバーが TLS を終端するイングレスの背後にある Kubernetes で実行されている場合、それは MCP トランスポートの問題です。Pod が ClickHouse 自体に到達する方法に合わせて
CLICKHOUSE_SECUREを維持してください (HTTPS →true、プレーン HTTP →false)。MCP サーバーがイングレスの背後にあるためにCLICKHOUSE_SECURE=falseを設定すると、サーバーは HTTP 経由で ClickHouse にダイヤルすることになり、多くの場合 HTTPS 専用ポートに対して行われ、サーバーログに不透明な HTTP/TLS エラーが発生します。
ClickHouse データベース接続
これらの変数は、clickhouse-connect HTTP クライアントと、run_query、list_databases、list_tables などの ClickHouse バックエンドツールの動作を設定します。
必須変数
CLICKHOUSE_HOST: ClickHouse サーバーのホスト名 (MCP サーバーのバインドアドレスではなく、データベースエンドポイント)CLICKHOUSE_USER: ClickHouse 認証用のユーザー名CLICKHOUSE_PASSWORD: ClickHouse 認証用のパスワード
[!CAUTION] MCP データベースユーザーは、データベースに接続する他の外部クライアントと同様に扱い、その操作に必要な最小限の権限のみを付与することが重要です。デフォルトユーザーや管理者ユーザーの使用は、常に厳密に避けるべきです。
オプション変数
CLICKHOUSE_PORT: ClickHouse サーバーの HTTP インターフェースポート- デフォルト:
8443(CLICKHOUSE_SECURE=trueの場合)、8123(CLICKHOUSE_SECURE=falseの場合) - 通常、非標準ポートを使用する場合を除き、設定する必要はありません
- HTTP インターフェースポートである必要があります。
clickhouse-clientで使用されるネイティブ TCP プロトコルポートではありません - 一般的な値:
- HTTP:
8123(平文) /8443(TLS) — このサーバーと ClickHouse Cloud HTTPS で使用 - ネイティブ TCP (ここではサポートされていません):
9000(平文) /9440(TLS) —clickhouse-clientで使用
- HTTP:
- サーバーが
Port 9000 is for clickhouse-client programで応答する場合、ネイティブプロトコルを指しているため、HTTP ポート (8123/8443またはデプロイメントの HTTP マッピング) に切り替えてください
- デフォルト:
CLICKHOUSE_ROLE: 認証に使用する ClickHouse ロール- デフォルト: なし
- ユーザーが特定のロールを必要とする場合に設定します
CLICKHOUSE_SECURE: ClickHouse データベース接続 (MCP クライアント用ではない) の HTTPS を有効にする- デフォルト:
"true" - MCP サーバーが平文 HTTP で ClickHouse に到達する場合 (ポート
8123でのローカル Docker Compose が典型的) にのみ"false"に設定します - ClickHouse Cloud や任意の HTTPS データベースエンドポイントの場合は
"true"のままにします。MCP サーバー自体が HTTP、stdio、または TLS を個別に終端するイングレス経由で公開されている場合でも同様です - このフラグとデータベースポートの不一致 (例: ポート
8443に対してCLICKHOUSE_SECURE=false) は、よくあるセットアップミスであり、通常は明確な「スキームが間違っている」というメッセージではなく、混乱を招く HTTP クライアントエラーとして表面化します
- デフォルト:
CLICKHOUSE_VERIFY: ClickHouse HTTPS 接続の SSL 証明書検証を有効/無効にする- デフォルト:
"true" - 証明書検証を無効にするには
"false"に設定します (本番環境では推奨されません) - TLS 証明書: パッケージは、
truststoreを介した TLS 証明書検証にオペレーティングシステムのトラストストアを使用します。適切な証明書処理を確実にするために、起動時にtruststore.inject_into_ssl()を呼び出します。予期しないエラーが発生した場合のフォールバックとしてのみ、Python のデフォルト SSL 動作が使用されます。
- デフォルト:
CLICKHOUSE_SERVER_HOST_NAME: ClickHouse 接続での SNI オーバーライドと証明書検証用のサーバーホスト名- デフォルト: なし (接続ホスト名を使用)
- これは、証明書のホスト名が接続ホスト名と異なるプロキシまたはロードバランサー経由で接続する場合に役立ちます。設定すると、このホスト名が TLS ハンドシェイク中の SNI (Server Name Indication) と証明書のホスト名検証の両方に使用されます。
CLICKHOUSE_PROXY_PATH: ClickHouse HTTP エンドポイントの URL パスプレフィックス- デフォルト: なし
- ClickHouse HTTP インターフェースがリバースプロキシの背後でパスプレフィックス (例:
/clickhouse) の下に公開されている場合に設定します
CLICKHOUSE_CONNECT_TIMEOUT: ClickHouse クライアントの接続タイムアウト (秒)- デフォルト:
"30" - 接続タイムアウトが発生する場合は、この値を増やします
- デフォルト:
CLICKHOUSE_SEND_RECEIVE_TIMEOUT: ClickHouse クライアントの送受信タイムアウト (秒)- デフォルト:
"300" - 長時間実行されるクエリの場合、この値を増やします
- デフォルト:
CLICKHOUSE_DATABASE: 使用するデフォルトの ClickHouse データベース- デフォルト: なし (サーバーのデフォルトを使用)
- 特定のデータベースに自動的に接続するように設定します
CLICKHOUSE_ENABLED: ClickHouse データベースツールを有効/無効にする- デフォルト:
"true" - chDB のみを使用する場合に ClickHouse ツールを無効にするには
"false"に設定します
- デフォルト:
CLICKHOUSE_ALLOW_WRITE_ACCESS: ClickHouse に対する書き込み操作 (DDL および DML) を許可する- デフォルト:
"false" - DDL (CREATE, ALTER, DROP) および DML (INSERT, UPDATE, DELETE) 操作を許可するには
"true"に設定します - 無効 (デフォルト) の場合、データ変更を防ぐためにクエリは
readonly=1設定で実行されます
- デフォルト:
CLICKHOUSE_ALLOW_DROP: 破壊的な操作 (DROP TABLE, DROP DATABASE, DROP VIEW, DROP DICTIONARY, TRUNCATE TABLE) を許可する- デフォルト:
"false" CLICKHOUSE_ALLOW_WRITE_ACCESS=trueも設定されている場合にのみ有効になります- 破壊的な DROP および TRUNCATE 操作を明示的に許可するには
"true"に設定します - これは、AI 探索中の偶発的なデータ削除を防ぐための安全機能です
- デフォルト:
MCP サーバーとトランスポート
これらの変数は、トランスポート、認証、クエリツールの実行制限など、MCP プロセス自体を制御します。これらは上記の ClickHouse データベース設定とは独立しています。HTTP/SSE トランスポートの認証 も参照してください。
CLICKHOUSE_MCP_SERVER_TRANSPORT: MCP サーバーのトランスポート方式を設定します- デフォルト:
"stdio" - 有効なオプション:
"stdio"、"http"、"sse"。これは、MCP Inspector などのツールを使用したローカル開発に役立ちます。 stdioは Claude Desktop で一般的です。http/sseはネットワークリスナーを公開します (以下のバインドホスト/ポート)
- デフォルト:
CLICKHOUSE_MCP_BIND_HOST: HTTP または SSE トランスポート使用時に MCP サーバーがバインドするホスト- デフォルト:
"127.0.0.1" - すべてのネットワークインターフェースにバインドするには
"0.0.0.0"に設定します (Docker またはリモートアクセスに役立ちます) - トランスポートが
"http"または"sse"の場合にのみ使用されます —CLICKHOUSE_HOSTとは関係ありません
- デフォルト:
CLICKHOUSE_MCP_BIND_PORT: HTTP または SSE トランスポート使用時に MCP サーバーがバインドするポート- デフォルト:
"8000" - トランスポートが
"http"または"sse"の場合にのみ使用されます —CLICKHOUSE_PORTとは関係ありません
- デフォルト:
CLICKHOUSE_MCP_QUERY_TIMEOUT: クエリツールのタイムアウト (秒)- デフォルト:
"30" - 負荷の高いクエリで
Query timed out after ...エラーが発生する場合は、これを増やします
- デフォルト:
CLICKHOUSE_MCP_AUTH_TOKEN: HTTP/SSE トランスポート用の静的ベアラートークン- デフォルト: なし
- HTTP/SSE トランスポートには、
CLICKHOUSE_MCP_AUTH_TOKEN、FASTMCP_SERVER_AUTH、またはCLICKHOUSE_MCP_AUTH_DISABLED=trueのいずれかが必須です uuidgenまたはopenssl rand -hex 32を使用して生成します- クライアントはこのトークンを
Authorization: Bearer <token>ヘッダーで送信する必要があります
FASTMCP_SERVER_AUTH: 認証を FastMCP 認証プロバイダー に委任します- デフォルト: なし
- 値は AuthProvider サブクラスの完全なクラスパスです (例:
fastmcp.server.auth.providers.azure.AzureProviderまたはfastmcp.server.auth.providers.google.GoogleProvider) - 設定すると、FastMCP は独自の
FASTMCP_SERVER_AUTH_*環境変数からプロバイダーを自動ロードします。このモードではCLICKHOUSE_MCP_AUTH_TOKENを設定しないでください
CLICKHOUSE_MCP_AUTH_DISABLED: HTTP/SSE トランスポートの認証を無効にします- デフォルト:
"false"(認証が有効) - ローカル開発/テスト専用に認証を無効にするには
"true"に設定します - 警告: ローカル開発にのみ使用してください。ネットワークに公開する場合は無効にしないでください
- デフォルト:
ミドルウェア変数
MCP_MIDDLEWARE_MODULE: MCP サーバーに注入するカスタムミドルウェアを含む Python モジュール名- デフォルト: なし (ミドルウェアはロードされません)
- ミドルウェアモジュールのモジュール名 (
.py拡張子なし) に設定します - モジュールは
setup_middleware(mcp)関数を提供する必要があります - 詳細と例については カスタムミドルウェア を参照してください
chDB 変数
CHDB_ENABLED: chDB 機能を有効/無効にする- デフォルト:
"false" - chDB ツールを有効にするには
"true"に設定します - オプションの追加機能のインストールが必要です:
mcp-clickhouse[chdb]
- デフォルト:
CHDB_DATA_PATH: chDB データディレクトリへのパス- デフォルト:
":memory:"(インメモリデータベース) - インメモリデータベースには
:memory:を使用します - 永続ストレージにはファイルパスを使用します (例:
/path/to/chdb/data)
- デフォルト:
よくある設定の落とし穴
CLICKHOUSE_SECUREと MCP / イングレス TLS — MCP サーバーが Kubernetes イングレスやリバースプロキシの背後にある、または平文 HTTP で到達されるためにCLICKHOUSE_SECUREをオフにしても、データベース TLS は無効になりません。これは、このプロセスが ClickHouse に接続する方法を変更するだけです。イングレス TLS はデータベースクライアント設定とは別に設定してください。- ネイティブプロトコルポート —
CLICKHOUSE_PORTは ClickHouse の HTTP インターフェース (デフォルトでは8123/8443) を対象とする必要があります。ポート9000/9440はネイティブ TCP プロトコル (clickhouse-client) 用であり、このサーバーでは動作しません。 - ホストの混同 —
CLICKHOUSE_HOSTはデータベースのホスト名です。CLICKHOUSE_MCP_BIND_HOSTは MCP HTTP/SSE サーバーがリッスンするアドレスにすぎません。
設定例
Docker を使用したローカル開発の場合:
# Required variables
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
# Optional: Override defaults for local development
CLICKHOUSE_SECURE=false # Uses port 8123 automatically
CLICKHOUSE_VERIFY=false
ClickHouse Cloud の場合:
# Required variables
CLICKHOUSE_HOST=your-instance.clickhouse.cloud
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=your-password
# Optional: These use secure defaults
# CLICKHOUSE_SECURE=true # Uses port 8443 automatically
# CLICKHOUSE_DATABASE=your_database
ClickHouse SQL Playground の場合:
CLICKHOUSE_HOST=sql-clickhouse.clickhouse.com
CLICKHOUSE_USER=demo
CLICKHOUSE_PASSWORD=
# Uses secure defaults (HTTPS on port 8443)
chDB のみ (インメモリ) の場合:
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
# CHDB_DATA_PATH defaults to :memory:
永続ストレージを使用した chDB の場合:
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
CHDB_DATA_PATH=/path/to/chdb/data
HTTP トランスポートを使用した MCP Inspector またはリモートアクセスの場合:
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_MCP_SERVER_TRANSPORT=http
CLICKHOUSE_MCP_BIND_HOST=0.0.0.0 # Bind to all interfaces
CLICKHOUSE_MCP_BIND_PORT=4200 # Custom port (default: 8000)
CLICKHOUSE_MCP_AUTH_TOKEN=your-generated-token # One auth mode required for HTTP/SSE (or FASTMCP_SERVER_AUTH, or CLICKHOUSE_MCP_AUTH_DISABLED=true)
HTTP トランスポートを使用したローカル開発の場合 (認証無効):
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_MCP_SERVER_TRANSPORT=http
CLICKHOUSE_MCP_AUTH_DISABLED=true # Only for local development!
HTTP トランスポートを使用する場合、サーバーは設定されたポート (デフォルト 8000) で実行されます。たとえば、上記の設定では:
- MCP エンドポイント:
http://localhost:4200/mcp - ヘルスチェック:
http://localhost:4200/health
これらの変数は、環境、.env ファイル、または Claude Desktop 設定で設定できます:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_DATABASE": "<optional-database>",
"CLICKHOUSE_MCP_SERVER_TRANSPORT": "stdio",
"CLICKHOUSE_MCP_BIND_HOST": "127.0.0.1",
"CLICKHOUSE_MCP_BIND_PORT": "8000"
}
}
}
}
注: バインドホストとポートの設定は、トランスポートが "http" または "sse" に設定されている場合にのみ使用されます。
テストの実行
uv sync --all-extras --dev # install dev dependencies
uv run ruff check . # run linting
docker compose up -d test_services # start ClickHouse
uv run pytest -v tests
uv run pytest -v tests/test_tool.py # ClickHouse only
CHDB_ENABLED=true uv run --extra chdb pytest -v tests/test_chdb_tool.py # chDB only
