slack-mcp-client を使って Slack に AI Bot を導入しよう

Repro Sys-infra Unit の今です。

Slack 上で AI と会話出来る bot をお手軽に作りたいな〜と思いたち、パッと立ち上げ運用しているのでご紹介します。
構築したのは2025/10頃で、ブログにするまでに Slack AI がリリースされたり高機能な Clawdbot がリリースされたりして出遅れてしまった感はありますが、最低限の機能と拡張性のあるものが好きな(私のような)人の参考になれば幸いです。

経緯

Repro では AI 活用の推進を社内に向けて行っており、ChatGPT や Claude のサブスクリプションや Cursor、Devin、Claude Code などのコーディング支援ツールを導入しています。
しかし、これらは基本的には利用する人と専用の UI の間でやり取りが完結してしまい、明示的に共有するまではどのように利用されているか、どのようなアウトプットを得たかを別の社員が知ることは出来ません。
そこで Slack 上に AI Bot を導入することで、上記の各種ツールにはない以下のような効果が得られると推測しました。

  • 他の社員からも見える場所で AI に質問や壁打ちなどの会話をすることで、AI の使い方を共有する
  • Token を消費して生成した AI のレスポンスを共有することで、同じ内容を個々で質問するような Token の浪費を防ぐ
  • 人に質問するのは躊躇うような小さな質問を AI にすることで、質問しやすい空気を Slack 上に作る

構築

Slack に AI Bot を導入する方法は色々ありますが、周りのIT系の会社でよく聞く独自の Slack bot がかわいいなと思っていたので自分で構築することにしました。ここで Slack bot を内製するか、既存のツールを探すかの選択肢がありますが、試験的に導入して効果があるのかを調査する段階のため手間をかけない既存ツールを探すことにしました。
調べてみたところ意外と各社で bot を内製しているらしく、コレといってメジャーなツールが見つかりませんでした。そこで目をつけたのが slack-mcp-client でした。

slack-mcp-client 自体は AI Bot ではなく、あくまで Slack から各種 MCP を触るためのコネクタ的な役割のツールですが、入力を受け取って LLM からの結果を出力するというのは変わらないので十分役割を果たしてくれると考えました。
せっかく MCP をセット出来るということで、以下の MCP を設定しました。

なお、既存のドキュメントやタスク類を社内運用から崩さない範囲で編集させることはガードレール無しでは困難だと考え、編集系のアクションの多くは禁止に設定しています。

そうして生まれたのが Claw'd くん です1

claw'd くん

構築方法

LLM Provider にはすでに Claude Code 利用のために社内承認を得ている Amazon Bedrock を利用しました。slack-mcp-client は2026/01現在で Bedrock に対応していないため、LiteLLM AI Gateway を挟むことで対応しています。
動作環境は、現状は小さな EC2 を建てて愚直に docker compose up しています。本運用に移すタイミングで Fargate への移行を予定しています。

infra

立ち上げる設定ファイル群は記事の最後に記載しておりますので、ミニマルな環境を建てたい方がいましたら参考にしてください。Slack App の Socket mode を利用しているので、手元の docker compose で立ち上げるだけで実際に Slack 上から動作確認が出来ます。

動いている様子

一例として Public なリポジトリについての調査を依頼した様子です。GitHub MCP で Private のリポジトリの中も検索出来るので、実装について疑問があったときに Slack からの依頼で軽く調べてもらうことができて便利です。

slack-mcp-client について調べてもらっている様子

運用について

Slack 上からの利用について、使い方を簡単にアナウンスしたのみで具体的な活用方法の講習等は行っていません。セットアップした私自身が率先して Public なチャンネルで利用し、他所から見て「こんなことが出来るんだ〜」と思って貰えればよいな、と思っています。
また、あくまで試験運用として設置しているため、あえて業務フローに組み込まれるほど高機能なものにはしていません。

コスト面ですが、当然ながらどの程度使われたかによって大きく変動します。Repro では営業日に数回ドキュメントからの調べ物をお願いしたり、外部ブログの要約をしたりする程度で 40USD/month ほどでした。(Claude Sonnet 4.5を利用)
Fetch や esa などの MCP で取ってきた記事・ドキュメントの文字数、会話の往復により InputToken 量が大幅に増加するため、使い方によってコストは大きく変動します。
週次で行っている費用チェックで利用料を把握してはいますが、推測はなかなか出来ていません。全ての入出力を Claude Sonnet 4.5 で処理しているのもコストが無駄にかかっているポイントだと思われるので、改善の余地はあると考えています。

効果

良かったこと

  • 社内ドキュメント (esa) の検索が楽になりました

Repro では主に esa にドキュメントやメモなどを残すようにしていますが、いまや記事数は5万件を超え、時間が経って古くなってしまった記事や表記ゆれが多くあります。また、軽量な UI ではあるものの、複数の記事の内容を見るためには検索画面から一度開かなければならないなど、目的の情報がある記事にたどり着くまで時間がかかりました。
この問題を解消するツールとして以前に構築した esa の内容で構築した Knowledge Base を Slack から問い合わせる Bot は Knowledge Base を利用しましたが、Claw'd くんは MCP で具体的な記述を探してくれる2ので、より正確な情報を返してくれるように感じます。しかし、具体的な記述が esa にない場合は無駄な検索を繰り返す傾向があり、レスポンスにどれほど具体的なものを期待するかによって使い分けるのが良さそうです。
(同じ質問に対するレスポンスの比較をお見せしたかったのですが、社内ドキュメントの検索に特化しており公開出来る内容がなかなかないため割愛します…)

  • 雑に記事を要約して共有出来るようになりました

Sys-infra では週に一度週間AWSの更新をみんなで読む会をしています。そのなかで気になったアップデートやブログについて、Slack 上で雑に Bot メンションを付けてリンクを貼っておくと要約してくれます。
余談ですが、AWS のブログは Fetch MCP では取得出来ないので「AWS Knowledge MCP を利用してください」と明示的にお願いをしています(プロンプトに書いておけば多分明示しなくても大丈夫)。

要約してもらっている様子

惜しかったこと

  • レスポンスが見づらい

slack-mcp-client には Agent mode があり、MCP を利用するのであればこちらを設定します。Agent mode は LLM のレスポンスから MCP を利用するかどうかを逐一判断することで、自律的に繰り返しツールを使ってレスポンスを返すモードです。毎度の判断も Slack にポストされるため、会話のスレッドが無駄に長くなってしまいます。
細かく設定できればよいのですが、執筆現在では細かな調整は出来ないようです。

今後の展望

Bot を立ち上げて4か月ほど経過し、Slack から各種ドキュメントを検索してくれる Bot として有用なことは判明しました。しかし、slack-mcp-client をそのまま利用し続けるにはやや厳しい点も多く、理想的な効果のためには結局 Bot を内製化することになりそうです。
ただ、MCP はコンテキストの肥大化が問題になっていたり、A2A(Agent2Agent) プロトコルの動きもあったりなど、まだまだ AI とツールの連携は過渡期であると見ています。
Slack AI や Clawdbot など高機能なツールも増えていますので、社内でより AI を活用しやすい形はどうなのかを考えながら試行錯誤していく予定です。

サンプル

compose.yaml

services:
  litellm:
    image: ghcr.io/berriai/litellm:main-stable
    restart: unless-stopped
    volumes:
      - ./litellm.config.yaml:/app/config.yaml:ro
    command:
      - "--config=/app/config.yaml"
    environment:
      - AWS_ACCESS_KEY_ID=[Bedrock 用 Credentials]
      - AWS_SECRET_ACCESS_KEY=[Bedrock 用 Credentials]
      - AWS_REGION=ap-northeast-1
      - AWS_BEDROCK_MODEL=bedrock/jp.anthropic.claude-sonnet-4-5-20250929-v1:0
      - MCP_MASTER_KEY=key-1234

  slack-mcp-client:
    build:
      context: .
      dockerfile: Dockerfile.slack-mcp-client
    restart: unless-stopped
    volumes:
      - ./slack-mcp-client.config.json:/app/config.json:ro
      - ./prompt.md:/app/prompt.md:ro
    environment:
      - SLACK_BOT_TOKEN=xoxb-xxxx
      - SLACK_APP_TOKEN=xapp-xxxx
      - OPENAI_API_BASE=http://litellm:4000
      - MCP_MASTER_KEY=key-1234
      - LOG_LEVEL=debug
    depends_on:
      - litellm

Dockerfile.slack-mcp-client

FROM node:24-trixie
ARG CLIENT_VERSION=2.8.0

WORKDIR /app

RUN apt update && apt install -y curl wget

# Install slack-mcp-client
RUN wget https://github.com/tuannvm/slack-mcp-client/releases/download/v${CLIENT_VERSION}/slack-mcp-client_${CLIENT_VERSION}_linux_amd64.tar.gz && \
    tar -xvf slack-mcp-client_${CLIENT_VERSION}_linux_amd64.tar.gz && \
    rm slack-mcp-client_${CLIENT_VERSION}_linux_amd64.tar.gz

# Install uv
RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \
    mv /root/.local/bin/uv* /usr/local/bin/

RUN uv tool install mcp-server-fetch

CMD ["./slack-mcp-client"]

Dockerfile 内では slack-mcp-client のインストールに加え、MCP サーバーのためのセットアップを行います。

litellm.config.yaml

model_list:
  - model_name: bedrock
    litellm_params:
      model: os.environ/AWS_BEDROCK_MODEL
      aws_region_name: os.environ/AWS_REGION
      aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
      aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY

general_settings:
  master_key: os.environ/MCP_MASTER_KEY

slack-mcp-client.config.json

{
  "$schema": "./schema/config-schema.json",
  "version": "2.0",
  "slack": {
    "botToken": "${SLACK_BOT_TOKEN}",
    "appToken": "${SLACK_APP_TOKEN}"
  },
  "llm": {
    "provider": "openai",
    "useNativeTools": true,
    "useAgent": true,
    "maxAgentIterations": 10,
    "customPromptFile": "/app/prompt.md",
    "providers": {
      "openai": {
        "model": "bedrock",
        "apiKey": "${MCP_MASTER_KEY}",
        "temperature": 0.7
      }
    }
  },
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    }
  },
  "rag": {
    "enabled": false
  },
  "monitoring": {
    "enabled": false
  }
}

slack-mcp-client の設定ファイルに利用したい MCP サーバーの設定類を記載します。
LiteLLM を利用するため Provider は OpenAI を指定します。
"mcpServers" に利用する MCP Server の設定を複数指定出来ます。

prompt.md

You'r name is Claw'd. Your primary role is to help users search for information.
You are also expected to summarize information and serve as a consultation partner when needed.
Conduct all conversations in Japanese.

プロンプトをお好みで記述します。

WE ARE HIRING!!

Repro では安定したインフラ基盤を構築・運用しながら AI を含む新技術・新機能にも興味を持って取り組むエンジニアを募集しています。

Repro 株式会社 - 求人一覧


  1. Claude Code を利用されている方はオレンジ色の Claw'd に慣れていると思いますが、何故 Claw'd くんは赤なのかというとClaude の Artifacts のデモで生まれた Claw'd を切り抜いているからです。カニなんですね。
  2. esa MCPesa_search_posts アクションは検索結果の各記事の先頭500文字も一緒に返すので、回答として適している記事を当てる確率が非常に高いです。API のレスポンスを生で扱える MCP の利点ですね。便利。