Claude Desktop (Windows版) から Slack MCP Serverを使って、チャンネルにポストした内容を取得していろいろなことをしてみる

## はじめに

これまでの記事では、Claude Desktop (Windows版) から GitHub の MCP サーバーを使って GitHub のリポジトリを参照し Issue を作成する方法や、Perplexity の MCP サーバーを使って記事を検索する方法を紹介しました。

https://qiita.com/revsystem/items/1c0a2a0aa8fd6b169c5d

https://qiita.com/revsystem/items/1e87004f603e46da1c67

https://qiita.com/revsystem/items/1e4c738ecaeacb7f133d

今回は、Claude Desktop (Windows版) から Slack の MCP サーバーを使って、Slack のチャンネルにポストした内容を取得してメンションを送ったり、ポスト内容を整理する方法を紹介します。

## 参考情報

https://github.com/modelcontextprotocol/servers/tree/main/src/slack

## Slack MCP Server とは

Slack MCP Server は Slack API 用の MCP サーバーで、Claude や VSCode、Cline などで Slack ワークスペースとやり取りするためための MCP サーバーです。
Slack MCP Server を使うと、このようなことができます。

- Slack チャンネル一覧の取得
- メッセージの送信
- 絵文字を使ったリアクション
- スレッドへの返信
- チャンネルの履歴取得
- ワークスペース・ユーザーのリストと基本プロファイル情報の取得

## 前提条件

- Windows 11 を使用
- Claude Desktop 0.9.0 以降がインストールされていること（この記事では Windows 版 0.9.2 を使用）
- Docker Desktop がインストールされていること
  - MCP サーバーを Docker で起動するために必要です
- Slack のワークスペースがあり、Slack Bot アプリの作成権限があること

## Slack App のセットアップ

[Slack MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/slack#setup) のドキュメントに従って Slack App を作成します。

1\. Slack App を作成

[Slack App Directory](https://api.slack.com/apps) にアクセスし、「Create New App」をクリック
![「Create New App」をクリック](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/8bf90c33-91ba-4483-8f63-51eb1d83253d.png)

「From scratch」をクリック
![「From scratch」をクリック](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/2105d3c5-06b8-4339-a3c9-9aceaa968f33.png)

アプリの名前を入力し、アプリをインストールするワークスペースを選択して「Create App」をクリック
![アプリをインストールするワークスペースを選択して「Create App」をクリック](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/9887657e-615d-4b31-a576-758c9d7af3b4.png)

2\. 「OAuth & Permissions」画面で Bot Token Scopes に進み、以下の Scope を追加

- channels:history
- channels:read
- chat:write
- reactions:write
- users:read
- users.profile:read

![「OAuth & Permissions」画面でBot Token Scopesに進み、以下のScopeを追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/8b2bc956-da58-465b-ade2-e6218c4b2c58.png)

3\. アプリをワークスペースにインストール

Install App 画面で、「Install to Workspace」をクリックし、確認画面で許可するをクリック
![「Install to Workspace」をクリックし、確認画面で許可するをクリック](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/84c4cc60-8342-45da-9866-b7755beea94a.png)

`xoxb-xxxx-xxxx-xxxx-xxxx` のような Bot User OAuth Token が発行されます。のちほど `claude_desktop_config.json` に設定するため、この Token を控えておきます。
![Bot User OAuth Tokenをコピーする](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/30cab71a-1404-4d22-a0e5-df426aae2ba2.png)

4\. [Slack URL または ID を確認する](https://slack.com/help/articles/221769328-Locate-your-Slack-URL-or-ID#find-your-workspace-or-org-id) を参考に、`T` ではじまる Slack Team ID を取得します。

## Claude Desktop のセットアップ

### MCP サーバーの設定

続いて、[Slack MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/slack) に従って Slack MCP Server をインストールします。

1. Claude Desktop を起動し、左上のハンバーガーメニューから「ファイル」→「設定」を選択
2. 設定ウィンドウから「開発者」を選択
3. 「構成を編集」をクリックしてエクスプローラーを開く
4. `claude_desktop_config.json` を編集（場所: `C:\Users\{ユーザー名}\AppData\Roaming\Claude\claude_desktop_config.json`）

![Claude Desktop の設定メニュー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/e627ec9b-1258-4c34-8428-a94743c6f7a7.png)

![Claude Desktop の開発者設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/1ec5f39d-ca62-4f20-9d6b-62985e603e84.png)

`claude_desktop_config.json` に以下の設定を追加します。`SLACK_BOT_TOKEN` は先ほど取得した Bot User OAuth Token を指定します。`SLACK_TEAM_ID` は先ほど取得した Slack Team ID を指定します。`SLACK_CHANNEL_IDS` はオプションです。チャネル・アクセスを制限するチャネル ID をカンマ区切で指定します（例: "C01234567, C76543210"）。設定されていない場合、すべてのパブリック・チャンネルが MCP サーバーで扱う対象となります。
docker ではなく NPX を使う方法については、[Slack MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/slack#npx) のドキュメントを参照してください。

```json:claude_desktop_config.json
{
  "mcpServers": {
    "slack": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "SLACK_BOT_TOKEN",
        "-e",
        "SLACK_TEAM_ID",
        "-e",
        "SLACK_CHANNEL_IDS",
        "mcp/slack"
      ],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
        "SLACK_TEAM_ID": "T01234567",
        "SLACK_CHANNEL_IDS": "C01234567, C76543210"
      }
    }
  }
}
```

設定後、Claude Desktop を再起動します。メニューから「終了」を選択して閉じ、再度起動します。ウィンドウを閉じただけでは設定が反映されないため注意してください。Claude Desktop と併せて Docker Desktop も起動します。

![Claude Desktop を終了する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/f3c1f976-86cf-4121-9e73-8797ea376688.png)

## 動作確認

Claude Desktop を起動すると、チャット画面にハンマーのアイコンが表示され、設定した権限に応じて利用可能な MCP ツールの数が表示されます（以下のスクリーンショットの 21 の部分。インストールしている MCP サーバーによって数が変わります）。

![ハンマーのアイコン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/74ac6ec2-871b-497f-83f0-7ff3c208aeaf.png)

ハンマーのアイコンをクリックすると、利用可能な MCP ツールが表示されます。その中に `slack_list_channels`、`slack_post_message` などが表示されていることを確認できます。
![利用可能な MCP ツール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/16092cb8-56ec-4120-b326-9179866e365d.png)

## チャンネルに Slack App を招待する

Slack MCP サーバーが Slack のチャンネルにアクセスするためには、Slack App をチャンネルに招待する必要があります。

## 使用例

### 天気予報を調べる

`#general` チャンネルで、「明日の福岡市の天気が気になる。晴れるかな。雨が降るのかな。」というメッセージをポストします。
![「明日の福岡市の天気が気になる。晴れるかな。雨が降るのかな。」](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/4bcc11bb-18e0-4e7a-afb1-dd5f51548ab2.png)

Claude Desktop のチャット画面で、「#general チャンネルで誰かがつぶやいています。内容を読んで、それに対する答えをネットで調べて返信してあげて。」というメッセージをポストします。
すると、MCP サーバーは以下のようにチャンネルのメッセージを読み込み、Claude が複数のサイトから天気予報を調べて元ポストにメンションを返してくれました。最終的な回答では「データ出典：Toshin.com 天気情報」と示しています。どうやら、東進ハイスクールのサイトにある「[全国学校のお天気](https://www.toshin.com/weather/)」のことを示しているようです。実際にこのサイトから福岡市の天気予報を取得したのかは分かりませんが、予備校のサイトに天気情報があるというのは新しい発見でした。
![MCPサーバーを使ってSlackからポスト内容を引き出し、検索した結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/b78f594c-34fb-4fcc-931b-ee09bea3e68f.png)

![天気予報を調べる](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/dd8bf636-bc15-4628-81fe-ead1cb4a0b09.png)

### What's New Summary Notifier の通知内容を整理する

What's New Summary Notifier とは、[What's New with AWS?](https://aws.amazon.com/new/) に掲載されているニュースを翻訳・要約して定期的に Slack に投稿するソリューションです。以下のブログで、その詳細が紹介されています。

https://aws.amazon.com/jp/builders-flash/202406/catch-up-genai-update/

この What's New Summary Notifier を Slack のフリープランの Webhook で使う方法を以下の記事で紹介しています。

https://qiita.com/revsystem/items/c6a9cfae9f1047da602e

Slack のチャンネルから直近 1 週間分の投稿を拾って AWS Bedrock に関する情報を整理する方法を紹介します。ここでは、`#whats-new-aws-summary` チャンネルにニュースが投稿されているとします。
Claude Desktop のチャット画面で、以下のようなメッセージをポストします。

> #whats-new-aws-summary チャンネルから直近 1 週間分の投稿を拾って、AWS Bedrock に関する情報を整理して。以下の情報がほしい。
>
> #欲しい情報
> - 情報源の URL
> - Bedrock を使ってなにか新しいことができるようになったのか。あるいは、活用方法か
> - 活用事例であれば、どのような業界に特化しているのか
> - リンク先 URL の内容を読んで、着目すべき点を箇条書きで 3～5 個にまとめる

すると、MCP サーバーは以下のように Slack のチャンネルのメッセージを読み込み、AWS Bedrock に関する情報を整理して返信してくれました。Slack に投稿された記事の URL の内容を読んだわけではなさそうですが、いくつかのサイトを検索して追加情報を拾ったようです。
![MCPサーバーを使ってSlackからポスト内容を引き出し、サマリーを出力した結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/c60e5725-7919-4a62-89e9-eb5ec85b868d.png)

What's New Summary Notifier は AWS ブログを翻訳・要約しているので、今回の例のような要点を整理するようなことは What's New Summary Notifier 側で実装したほうが良さそうです。それ以外の、「1 週間分のニュースのなかから特定分野のものを複数拾って、それらをプロンプトに従って整理する」といったことは MCP サーバーと LLM との組み合わせと相性が良さそうです。これを応用し、Slack チャンネルで交わされた議論を整理したり、チャンネルに通知しているアラートログや運用作業の記録をもとにレポートを作成するといったこともできそうです。

### チャンネルリストを取得する

Claude Desktop のチャット画面で、以下のようなメッセージをポストします。

> slack_list_channelsを使ってチャンネルのリストを調べて。

すると、MCP サーバーは以下のようにチャンネルのリストを返してくれます。チャンネルのトピックや概要欄に情報があればそれを参考に説明を付け加え、情報がなければチャンネル名から内容を推測しているようです。

![チャンネルリストを取得する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/794ab983-89d5-4888-b1c8-0e437107987f.png)

### チャンネルのポストにリアクションを付ける

`#general` チャンネルで、「AWS Community BuilderのSWAGが届いた! テンション上がる!」という写真付きポストをします。

![AWS Community BuilderのSWAGが届いた! テンション上がる!](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/bfea364e-b2a2-4090-9896-f7684d0726db.png)

Claude Desktop のチャット画面で、「#generalの今日のポストに、楽しそうな内容があります。そのポストに旅行の絵文字を使ってリアクションして。」というメッセージをポストします。
すると、MCP サーバーは以下のようにチャンネルのメッセージを読み込み、「✈️」（飛行機）の絵文字を使ってリアクションしてくれました。

![MCPサーバーを使ってSlackからポスト内容を引き出し、検索した結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/703021cc-5697-4c08-94f1-cd3af9e1b818.png)

![飛行機の絵文字でリアクション](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/02f510f2-7295-40d6-8a3f-f915b3b51d53.png)

### チャンネルの投稿履歴を取得する

Claude Desktop のチャット画面で、以下のようなメッセージをポストします。

> #general の投稿履歴を調べて。

すると、MCP サーバーは以下のようにチャンネルの投稿履歴を調べてくれます。スレッドがあるポストはスレッドの投稿履歴も含めて表示されます。Clauide Desktopの言語設定は日本語ですが、Claudeの設定項目にある"クロードの応答において、どのような個人設定を考慮すべきですか？"を英語で記述しているので、英語での応答になったのかもしれません。日本語ポストを英訳してくれています。

![チャンネルの投稿履歴](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/99a3acab-1421-47c9-b24e-68543a10e26d.png)

### Slackワークスペースのユーザーのプロフィールを取得する

Claude Desktop のチャット画面で、以下のようなメッセージをポストします。

> Slack ワークスペースの tsuyoshi のプロフィールを教えて。

すると、MCP サーバーは以下のようにユーザーのプロフィールを調べてくれます。

![ユーザーのプロフィール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/c57aa31c-03e0-4dc9-af60-0989004120e4.png)

この例では、`slack_get_users`と`slack_get_user_profile`を使って、ユーザーのプロフィールを取得していますが、うまくMCPサーバーを使ってくれない場合もあるので、以下のように具体的なツール名を指定すると動作が安定するようです。

> slack_get_usersを使って、Slackワークスペースの tsuyoshi のプロフィールを教えて。

### Slackに絵文字だけでメッセージを投稿する

Claude Desktop のチャット画面で、以下のようなメッセージをポストします。

> 絵文字だけで、「ゴールデンウィークはどこに出かけようかな。天気が良さそうだし、たまには車で温泉に行くのもいいな。折角なら泊まりで。今から宿を予約できるかな?」を表現して、#generalにポストして。自分のポストに、絵文字でリアクションして。

すると、MCP サーバーは以下のように絵文字だけでチャンネルにメッセージを投稿し、自分でリアクションしてくれました。無茶振りにもしっかり応えてくれました。

![絵文字だけでメッセージを投稿する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/1fd447b8-f0e2-44b2-a674-ea88e3d92ba5.png)

![絵文字でリアクション](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/bd0246db-49de-4222-aa02-4908e4b8a098.png)

## まとめ

Slack MCP Server を使って、Slack チャンネルのメッセージを取得してメンションを送ったり、ポスト内容を整理する例を紹介しました。`claude_desktop_config.json` への設定追加と、Docker や NPX の動作環境を用意することで、ノーコードで Slack チャンネルの内容を整理することができます。

以下のような場面で Slack MCP Server が活用できそうです。

- 大事なことが埋もれがちな Slack チャンネルの内容を整理する
- Slack チャンネルにある投稿内容を RAG として検索する
- チャンネルに通知しているアラートログや運用作業の記録をもとにレポートを作成する
- チャンネルに投稿された内容をもとに外部情報を検索し、チャンネルのメンバーにメンションを送る