[Cursor, Claude活用] Slack MCPを複数ワークスペースある弊社Slackに導入してみた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591019/43964b88-5edf-4248-92ce-f85c4d848b6e.png)

## 📝 はじめに

Slack MCPを活用すると、CursorやClaude DesktopなどのAIエージェントから
Slackにアクセスできるようになる…という夢？のような期待を抱いて、はや1ヶ月ほど。

自社メディアサイトを扱う所属企業でSlackを使っていますが、長年いろいろなチャンネルに
やりとりが積み重ねられ、分散しており、
「このトピックについて、どこで話していたっけ？」
「この改修って、数年前にバグ報告されていた件が関係するみたいだけど、どこに履歴あるかな？」
などなど、けっこうSlack履歴検索には不自由している感じがありました。

Slack AIを契約？できれば解決できそうだけれど、会社に頼んでもなかなか反応がよろしくない…。

そんな中で出合った好都合なニュースに浮足立ちつつ、
**試してみて得られた「ここがイマイチ」「ここはいいかも？」を、せっかくなので残しておこうと思います。**

## 💡 MCPとは？　基本的な導入方法は？
ーーといったことについては、すでに公開されているわかりやすい記事にゆずります。

https://qiita.com/syukan3/items/f74b30240eaf31cb2686

https://zenn.dev/takna/articles/mcp-server-tutorial-07-slack

---

## 🔌 ナレッジ１： 複数ワークスペースに接続してみた

（理想のイメージ）
```mermaid
graph LR
    A[AI エージェント] --> B[MCP サーバー]
    B --> C[Slack API]
    C --> D[Workspace A]
    C --> E[Workspace B]
    style A fill:#d0e0ff,stroke:#333
    style B fill:#ffe0d0,stroke:#333
    style C fill:#d0ffe0,stroke:#333
    style D fill:#ffd0e0,stroke:#333
    style E fill:#ffffd0,stroke:#333
```

企業で使っていると、さまざまな理由で複数ワークスペースに所属することになりますよね。
グループ会社のワークスペースに入っている、とか、客先のワークスペースに入っている、とか。
**Slack MCPで、複数ワークスペースの設定を設けて、いつでも切り替えられるようにしたい。**

一般的に紹介されているSlack MCP接続方法は、単一ワークスペースのケースが多い印象。
私が試したときはあまりナレッジが転がっていなかったので、試してみた感じです。

### 結論
今のところ「**うまくいかない**」です。
複数設定して、CursorでもClaude DesktopでもMCP設定画面にて複数認識されているように見えるのですが、、

（Claude Desktop）
![スクリーンショット 2025-04-20 16.25.11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591019/57e4199f-940b-4da2-ba70-00ddc4a4e1ab.jpeg)

いざ「それぞれのワークスペースに接続できるか試して」とお願いしてみると
どちらか一方のワークスペースにしか接続できない、といった不安定な挙動をみせました。

### やってみたこと

接続したい各ワークスペースでSlack botを作成しました。

<details><summary>🤖botの場所</summary>

https://api.slack.com/apps

（これをワークスペースごとに別々に作成。）

![スクリーンショット 2025-04-21 10.26.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591019/5d871446-3cfb-47a1-9572-20cf61a90cfe.png)
</details>



そしてAIエージェント（CursorやClaude Desktop）のMCP設定用JSONファイルには、
ワークスペースごとに異なる設定を記述しました。
ネームスペースが同じだとさすがにAIが混乱するかと思い、差異をつけました。

▼具体的な設定例：

- slack-workspace-a（slack-workspace-b）：ネームスペース。任意の名前でOK
- SLACK_BOT_TOKEN：各ワークスペースで設定したbotのトークン
- SLACK_TEAM_ID：下記記載は例。上記接続方法記事で紹介されている、ワークスペースごとのID。

```json
{
  "mcpServers": {
    "slack-workspace-a": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-example-token-123456",
        "SLACK_TEAM_ID": "T12ABCDE3"
      }
    },
    "slack-workspace-b": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-example-token-789012",
        "SLACK_TEAM_ID": "T45FGHIJ6"
      }
    }
  }
}
```

結論のとおり、AIエージェントは双方のワークスペースへの接続を試みようとはしてくれますが
どうしても一方のみ接続となります。

![スクリーンショット 2025-04-20 16.29.14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591019/de6bf105-8ad3-4328-8518-b90d7c1a7cee.jpeg)

![スクリーンショット 2025-04-20 16.31.15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591019/1b9cd211-8af0-46be-9b50-85f838d10152.jpeg)

試しにチャット自体を分けて、それぞれ一つずつのワークスペースへ接続を試みましたが
んーーイマイチうまくいかず。
ClaudeではワークスペースAのほう、CursorではワークスペースBのほうのみに接続するという
これまた「？」な挙動もありつつ、でした。。

### 可能性
Claudeも上記で言っているように、MCPサーバにパラメータを渡せるようになれば、いけるかもですね。
ただ、そのためには非公式のMCPを探すか、自作する必要がありそうですね。
これについては、一旦ここまでとします。

:::note info
### 小ネタ：Slack MCPのJSON設定の管理について

複数ワークスペースへの接続が必要でも、JSONには一つずつの記述にする必要がありそうなので、
現状、JSONファイルはgit管理などができないこともあり、以下のような工夫が有効です：
※Cursorの例。Claude Desktopも同様。

1. `/Users/ユーザー名/.cursor/mcp.json.bak` などにバックアップファイルを保存
2. 接続したいワークスペースが変わるたびに、設定を切り替え

（ワークスペースAのほうに接続したいとき。BにしたいときはBだけの記述に手動で更新することになる。）
```json
{
  "mcpServers": {
    "slack-workspace-a": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-example-token-123456",
        "SLACK_TEAM_ID": "T12ABCDE3"
      }
    }
  }
}
```

:::

---

## 🧩 ナレッジ２： Slack MCPの現状の使い心地 - プライベートチャンネルへのアクセスにはbotの招待が一つひとつ必要…

多くの企業ではプライベートチャンネルを活用しているのでは。
案件や意味合いごとにプライベートチャンネルを乱立させ、必要なメンバースコープにのっとって招待する、
といったふうに。

個人的にもっとも期待していたのはSlack AIが不要になるほどの検索力、
つまり「全チャンネルを横断した強力なグレップ検索」でしたが
残念ながら実際に使ってみると、プライベートチャンネルごとにbotを招待しないかぎり
アクセスできないことがわかりました。
Slack MCPはSlack APIの拡張でしかないため、当然と言えば当然ですね。。

#### プライベートチャンネルへのSlack botの招待方法

プライベートチャンネルのメッセージ欄で以下のコマンドを実行→アプリを追加する→アプリ一覧で該当アプリを選択：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591019/87c77fdf-345c-4c71-a130-979c5090377d.png)


または以下のコマンド実行

```
/slack @ボット名
```

---

## ナレッジ３： 局所的な使い方に役立った！

社内のとあるメンバーから、
「**Difyを使って社内ナレッジのチャットボットをつくりたいんだけど、関連するやりとりや問い合わせが6つくらいのチャンネルに散らばっていて、いちいち検索して集めるのが大変。Slack MCPでなんとかならないか？**」
という相談を受けました。

これについてはすべてのチャンネルにbotを追加していけば
あとはMCPを通してAIエージェントから関連情報を集めることが、無事にできました。

**とくになにがよいかというと、Cursorから実行できると、
そのままマークダウン形式などでまとめてもくれ、
それをそのままDifyのナレッジベースに渡すだけ、ということが実現できたことです。**

少し苦労してSlack MCP導入を試してみてよかったです。

Slack MCPの現状の強みと限界を考慮すると、以下のような使い方が効果的ですね：

1. **特定プロジェクトの情報検索**
   - プロジェクト専用チャンネルの過去の議論を参照
   - 決定事項や進捗状況の確認

2. **チーム内ナレッジの活用**
   - チームチャンネル内の技術的な議論の参照
   - トラブルシューティング履歴の検索

:::note info
**使い方のコツ**

質問するときは具体的なチャンネルIDや期間を指定すると、より正確な情報が得られます。
例：「チャンネルCID82cnyr94の先週のAPI設計に関する議論をまとめて」

※チャンネルIDの取得方法は、チャンネルの詳細やメッセージのリンクから取得できるみたいです。
https:[ドメイン]/archives/[**チャンネルID**]/[メッセージID]
:::

## 📚 まとめ

Slack MCPはAIエージェントとSlackを連携させる強力なツールですが、まだまだ制約が少なくないので、
使いこなすにはいくつかのコツが必要ですね。
複数ワークスペースへの接続や、プライベートチャンネルへのアクセス方法を理解することで、
より効果的に活用できるかなと思いました。