メインコンテンツへスキップ
メインコンテンツへスキップ

ClickHouse MCP Server を使用して SlackBot エージェントを構築する方法

このガイドでは、SlackBot エージェントの構築方法を解説します。 このボットを使うと、自然言語で Slack から直接 ClickHouse のデータについて質問できます。内部的には ClickHouse MCP ServerPydanticAI を使用します。

サンプルプロジェクト

このサンプルのコードは examples リポジトリ で参照できます。

前提条件

  • uvをインストールしておく必要があります
  • Slackワークスペースへのアクセス権が必要です
  • AnthropicのAPIキー、または他のLLMプロバイダーのAPIキーが必要です

Slack アプリを作成する

  1. slack.com/apps にアクセスし、Create New App をクリックします。
  2. From scratch を選択し、アプリに名前を付けます。
  3. Slack ワークスペースを選択します。

ワークスペースにアプリをインストールする

次に、前の手順で作成したアプリをワークスペースに追加します。 Slack のドキュメントにある 「Slack ワークスペースにアプリを追加する」 の手順に従ってください。

Slack アプリの設定を行う

  • App Home に移動する
    • Show TabsMessages TabAllow users to send Slash commands and messages from the messages tab を有効にする
    • Socket Mode に移動する
      • Socket Mode を有効にする
      • 環境変数 SLACK_APP_TOKEN に設定するため、Socket Mode Handler を控えておく
    • OAuth & Permissions に移動する
      • 次の Bot Token Scopes を追加する:
        • app_mentions:read
        • assistant:write
        • chat:write
        • im:history
        • im:read
        • im:write
        • channels:history
      • アプリをワークスペースにインストールし、環境変数 SLACK_BOT_TOKEN に設定するための Bot User OAuth Token を控えておく
    • Event Subscriptions に移動する
      • Events を有効にする
      • Subscribe to bot events に次を追加する:
        • app_mention
        • assistant_thread_started
        • message:im
      • 変更を保存する

環境変数を追加する (.env)

プロジェクトのルートに .env ファイルを作成し、以下の環境変数を定義します。 これにより、アプリケーションから ClickHouse の SQL playground に接続できるようになります。

SLACK_BOT_TOKEN=your-slack-bot-token
SLACK_APP_TOKEN=your-slack-app-level-token
ANTHROPIC_API_KEY=your-anthropic-api-key
CLICKHOUSE_HOST=sql-clickhouse.clickhouse.com
CLICKHOUSE_PORT=8443
CLICKHOUSE_USER=demo
CLICKHOUSE_PASSWORD=
CLICKHOUSE_SECURE=true

必要に応じて、ClickHouse の変数を調整し、ご自身の ClickHouse サーバーまたは ClickHouse Cloud インスタンスを使用することもできます。

ボットの使用

  1. ボットを起動:

    uv run main.py
    
  2. Slackでの操作:

    • チャンネルでボットをメンション: @yourbot Who are the top contributors to the ClickHouse git repo?
    • スレッドでメンションして返信: @yourbot how many contributions did these users make last week?
    • ボットにダイレクトメッセージを送信: Show me all tables in the demo database.

ボットはスレッド内で返信し、該当する場合は以前のスレッドメッセージすべてをコンテキストとして使用します。

スレッドコンテキスト: スレッド内で返信する際、ボットは以前のメッセージすべて(現在のメッセージを除く)を読み込み、AIのコンテキストとして含めます。

ツールの使用: ボットはMCP経由で利用可能なツール(スキーマ検出、SQL実行など)のみを使用し、使用されたSQLと回答の導出方法の要約を常に表示します。