
SlackのMCPサーバーで何が出来るのか調べてみた
こんにちは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。
皆さん、MCPは使ってますか?
私もいくつか触っているのですが、その中でも気になったのがSlackのMCPサーバーです。
というのも、弊社のSlackでは技術に関する質問が自由に行えるチャンネルが複数存在します。
弊社ではブログとして様々な知見がアウトプットされていますが、そういった質問チャンネルに眠っている細かい知見も多くあります。
実際私もググったり社内のNotionページに載っていないような情報について社内Slackで検索しています。
恐らく皆さんの会社のSlackにもそのような情報ってあるんじゃないでしょうか。
そこで、MCPを使えばSlackをRAGのように使えるんじゃないか?と思いSlackのMCPサーバーを触ってみることにしました。
ということで本記事では公式のMCPサーバーと3rd Party製MCPサーバーの検証を行ってみます。MCPの説明や実際の運用等については触れません。
また、本記事は3rd Party製のご利用を強く推奨するものではありません。ご利用の際はご自身でソースを確認し、自己責任でお願いします。
※本記事の検証は個人の検証用ワークスペースで実施しました。
SlackのMCPサーバーについて
本記事執筆時点(2025/04/30)でSlackのMCPサーバーは公式からリリースされています。
ただ、Tool内容的に自分が望む運用は出来なさそうだと感じたため今回は3rd Party製のMCPサーバーも触ってみることにしました。
公式
ユーザーはMCPを経由してSlack Appを操作するため、対象のSlack Appを作成してください。権限など詳細な手順はリポジトリのセットアップ手順を参照してください。
ちなみにリポジトリに必要な権限として含まれていませんが、MCPを通してプライベートチャンネルを参照したい場合はgroups:history
やgroups:read
といった権限が必要です。また、そのSlack Appを対象のプライベートチャンネルに参加させる必要があります。
Appを作成したら、Configは上記リポジトリにもある通り以下のように書きます。
ここで SLACK_CHANNEL_IDS については設定時に定義せずプロンプトの中で指定することも可能です。この際、チャンネル指定はチャンネル名ではなくIDで行う必要があります。
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-slack"
],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_TEAM_ID": "T01234567",
"SLACK_CHANNEL_IDS": "C01234567, C76543210"
}
}
}
}
リポジトリにも書いてある通り、公式MCPサーバーでは本記事執筆時点で以下計8つのToolが搭載されています。
slack_list_channels
- パブリック、もしくは事前定義されたチャンネルの一覧を取得する
slack_post_message
- 指定したチャンネルに新規の投稿を行う
slack_reply_to_thread
- 指定したチャンネルの特定スレッドにリプライを行う
slack_add_reaction
- 指定したチャンネルの特定メッセージに絵文字リアクションを追加する
slack_get_channel_history
- 指定したチャンネルのメッセージ履歴を最新のものから取得する
slack_get_thread_replies
- 指定したチャンネルのチャンネルの特定スレッドに付いたリプライを全て取得する
slack_get_users
- ワークスペースに所属するユーザーの基本プロフィール情報一覧を取得する
slack_get_user_profile
- 指定したユーザーの詳細なプロフィール情報を取得する
私がやりたかった「Slackチャンネルの外部データベース化」を行うためには少なくともメッセージ検索を行う必要があるのですが、公式MCPサーバーでは難しそうです。
slack_get_channel_history
を使ってみたのですが、チャンネル内のメッセージ数が膨大になるとユースケースには合いません。
Slackの投稿をトリガーにその投稿への回答をするbotのようなユースケースであれば十分有用なMCPサーバーだと思います。
3rd Party製(Ubie社製)
そこで他のMCPサーバーは無いかと探していたところ、Xで以下のpostを見つけました。
求めてたやつこれじゃん。
Toolとしては以下が搭載されています。
slack_list_channels
- パブリックチャンネルの一覧を取得する
slack_post_message
- 指定したチャンネルに新規の投稿を行う
slack_reply_to_thread
- 指定したチャンネルの特定スレッドにリプライを行う
slack_add_reaction
- 指定したチャンネルの特定メッセージに絵文字リアクションを追加する
slack_get_channel_history
- 指定したチャンネルのメッセージ履歴を最新のものから取得する
slack_get_thread_replies
- 指定したチャンネルのチャンネルの特定スレッドに付いたリプライを全て取得する
slack_get_users
- ワークスペースに所属するユーザーの基本プロフィール情報一覧を取得する
slack_get_user_profile
- 指定したユーザーの詳細なプロフィール情報を取得する
slack_search_messages
- 以下条件に該当する任意の文字列を検索する
- 特定のチャンネル
- 特定のDM、グループ
- 特定のユーザーからの投稿
- 特定のBotからの投稿
- 以下条件に該当する任意の文字列を検索する
slack_search_messages
以外は公式のサーバーと同じToolが搭載されています。
また、後述しますがslack_search_messages
ではSlackのBot TokenではなくUser Tokenを利用する必要があります。
ということでこちらのMCPサーバーを使ってみました。
Ubie社製のMCPサーバーを使ってみる
このMCPサーバーはnpmでinstall出来るものの、ホスト自体はGitHubレジストリなのでPAT(Personal Access Token) Classicを利用する必要があります。
PAT Classicの作成方法は以下を参照してください。
Tokenに付与する権限はread:packages
のみで良いです。
ローカル環境に~/.npmrcを作成し、以下内容を書き込みます。
YOUR_PERSONAL_ACCESS_TOKEN
は作成したPATに置き換えてください。
//npm.pkg.github.com/:_authToken=YOUR_PERSONAL_ACCESS_TOKEN
@ubie-oss:registry=https://npm.pkg.github.com
パッケージをインストールします。
npm install @ubie-oss/slack-mcp-server
その後MCPのConfigに以下を追加します。
{
"slack": {
"command": "npx",
"args": [
"-y",
"@ubie-oss/slack-mcp-server"
],
"env": {
"NPM_CONFIG_//npm.pkg.github.com/:_authToken": "<your-github-pat>",
"SLACK_BOT_TOKEN": "<your-bot-token>",
"SLACK_USER_TOKEN": "<your-user-token>"
}
}
}
これで使用可能になります。
Slack AppのUser Token Scopesとしては、search:read
だけ付与すれば良さそうです。
確かにメッセージ検索は有効なようで、入力した文字列を指定したチャンネルから拾ってくることが出来ました。
実際に使ってみて気付いた点は以下です。
slack_search_messages
でメッセージ検索をする場合、チャンネル名で指定する必要がある- 公式サーバーにもあったBot Tokenを使うToolではチャンネルをID指定していましたが、User Tokenを使う場合はチャンネル名で指定する仕様になっているようです
- プライベートチャンネルのコンテンツも特別な権限無く検索出来てしまう
- 公式サーバーにもあるToolでプライベートチャンネルのメッセージ履歴取得などを行う場合、そのプライベートチャンネルにAppも参加している必要があります。しかし、
slack_search_messages
ではAppが参加していないプライベートチャンネルのコンテンツも取れてしまいます。
- 公式サーバーにもあるToolでプライベートチャンネルのメッセージ履歴取得などを行う場合、そのプライベートチャンネルにAppも参加している必要があります。しかし、
プライベートチャンネルコンテンツの扱いに難はあるものの、目的としていたメッセージ検索が可能なMCPサーバーであることは分かりました。
Slack MCPサーバーを使う上でのセキュリティを考慮してみる
MCPサーバーを使うにあたってはいくつかセキュリティ面で考慮事項があります。
今回のケースを考えると以下の2点があります。
- 利用対象のMCPサーバーはちゃんとした作りになっているか
- MCP経由でSaaSを利用する場合、SaaS側の権限は適切なものになっているか
MCPサーバーの作りにおける懸念事項についてはMCPを提唱したAnthropicのドキュメントに記載があります。
実際に利用するサーバーのソースコードを確認し、自分が信頼を置ける内容になっているか確認するのが良いでしょう。
今回のようにMCP経由でSaaSを利用する場合、更に懸念すべき点はSaaS側の権限です。
基本的にMCP経由でSaaSを利用する場合、生成AIエージェントが操作するためのクライアントの権限をSaaS側で定義することになると思います。
SlackだとSlack Appの権限がそれに当たりますね。
プライベートチャンネルへのアクセスについて
Slackの場合、私が最も意識したのはプライベートチャンネルへのアクセスです。
Slackには有益な情報や他愛も無い日常会話が集まる一方で、プライベートなチャンネルではセンシティブな内容もやり取りされているはずです。
Slack公式MCPサーバーが利用するBot Tokenではgroups
という権限があり、これを付与&対象のプライベートチャンネルにSlack Appが入っていないとメッセージを参照はおろかチャンネル名すら取得出来ないようになっています。
しかし、上記検証の通りUser Tokenのsearch:read
を使用するとSlack Appが参加していないプライベートチャンネルメッセージも取得出来てしまうようです。追加で確認したところDMのメッセージも拾えました。
search:read
より細かい検索機能の権限は無いため、本記事執筆時点で任意の機密情報を検索の対象外とすることはSlack側の権限制御では難しそうです。
Slack Appの権限を眺めていると、Bot Tokenの権限にはDescriptionに何度か「MCP」というワードが出てくるのですがUser Tokenには全く出てきていません。
恐らくSlackとしてはMCPサーバーの権限としてBot Tokenのみを利用する想定なのでしょう。
最後に
Slackを生成AIの拡張データベースとして使えないか?として始めた検証でしたが、現時点ではまだ難しそうです。Slackの権限的にプライベートチャンネルなどへの制限が難しいのであれば会社のワークスペースなど機密情報が多い所では使えませんね。
とはいえ、個人のワークスペースではUbie社製のメッセージ検索が行えるMCPサーバーは非常に有用だと思います。3rd Party製のMCPサーバーは中身をよく確認した上で検証し、安全性を確認した上で上手に付き合っていきたいですね。
本記事がどなたかのお役に立てば幸いです。
以上、べこみんでした。