Slack について
Slackは、Slack Web APIを通じてワークスペースを操作するMCPサーバーで、複数のSlackワークスペースを利用するユーザー向けです。OAuthはホストアプリケーションが担い、サーバーはローカルに保存されたワークスペース別の認証情報を読み込みます。
主な機能
- 01メッセージの検索、投稿、編集、予約
- 02チャンネル、履歴、スレッドの操作
- 03ユーザー検索、プロフィール確認、DM開始
- 04リアクション、ピン留め、ブックマーク
- 05ファイルのアップロードとダウンロード
活用シーン
- 01ユーザーの最近のチャンネル投稿を見つけてリアクションする
- 02チャンネル履歴やスレッドの返信を確認する
- 03チャンネルへの投稿や予約を行う
- 04ユーザーを検索してダイレクトメッセージを開始する
MCP 対応
MCPサーバーとして、Slackワークスペース操作ツールをクライアントに公開します。OAuthはホストアプリケーションが開始し、サーバーはホスト管理のワークスペース別認証情報を読み込みます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @mindstone/mcp-server-slackSLACK_CONFIG_PATHPath to the host-managed Slack config directorySLACK_TEAM_IDSlack workspace team ID (one process per workspace)SLACK_CLIENT_IDSlack OAuth Connected App client ID. Only required to refresh a rotating token; saved non-rotating tokens authorize the Slack API without it.SLACK_CLIENT_SECRETシークレットSlack OAuth Connected App client secret. Only required to refresh a rotating token; saved non-rotating tokens authorize the Slack API without it.SLACK_DISABLE_REFRESHSet to 1 to disable token refresh on this surface (cloud surface)SLACK_REQUEST_TIMEOUT_MSOverride the upstream timeout (max 300000ms = 5 min)SLACK_MAX_RETRIESWebClient retries on transient failures (0-20). Lower this on cloud to avoid stacking long retry budgets into multi-minute hangs.MCP_WORKSPACE_PATHWorkspace directory upload_slack_file reads are constrained to (defaults to the system temp dir when unset)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
39掲載時のツール一覧 · 今日に更新
このツールにパラメーターはありません。
詳細
@mindstone/mcp-server-slack
Slack ワークスペース用 MCP サーバー — Slack Web API を介したチャンネル、メッセージ、スレッド、リアクション、ユーザー、ファイル、ブックマーク、予約済みメッセージ。
マルチワークスペース対応の Slack MCP。ホストが OAuth を管理し、ワークスペースごとの認証情報ファイルをディスク上に保存します。また、リリースごとにセキュリティレビューを実施します。
ステータス
- バージョン: 0.3.0 · npm
- 認証: OAuth(ホストがオーケストレーション) (
SLACK_CLIENT_SECRET) - ツール: 39(メッセージ、チャンネル、スレッド、ユーザー、ファイル、ピン留め)
- サーフェス: cloud-api
- 機械可読:
STATUS.json
開発の背景
このコネクターの開発を始めた当時、Slack から公式 MCP サーバーはまだリリースされていませんでした。公式サーバーはその後(2026 年 2 月に発表され、2026 年 4 月に一般提供開始)登場しました。当時利用可能だったコミュニティ製の Slack MCP は、いずれも機能の一部では優れていましたが、小規模および中規模のワークスペースでユーザー名をすばやく検索できること、最新の Slack に適したメンション形式を使うこと(多くは非推奨の link_names=true を使っていました)、同じユーザーアカウントから複数の Slack ワークスペースを利用できること、トークンをユーザー自身のマシンに保存することを、すべて備えたものはありませんでした。Slack の公式サーバーが現在は公開されており、多くの用途に適しています。それでもこのサーバーの保守を続けているのは、ログインフローをホストアプリケーションが処理し、各ワークスペースの認証情報ファイルをユーザーの管理下でディスク上に保存できること、そしてリリースのたびに独自のセキュリティレビューを実施しているためです。
やり取りの例
「#q3-planning で Alice の最新のメッセージを探し、:eyes: でリアクションしてください。」
ホストが呼び出すツール:
lookup_user_by_email— Alice のメールアドレスから Slack ユーザー ID を特定します。search_slack_messages—#q3-planningで Alice の最新のメッセージを検索し、チャンネルとタイムスタンプを返します。add_slack_reaction— そのメッセージにeyesリアクションを追加します。
レスポンス(抜粋):
{
"match": {
"channel": "C08X...",
"ts": "1715953812.004200",
"user": "U07Z...",
"text": "Pushed the updated forecast to the doc, ready for review."
},
"reaction": {
"ok": true,
"name": "eyes"
}
}
要件
- Node.js 20 以降
- npm
- Slack OAuth フローを実行し、ワークスペースごとのトークンファイルを
${SLACK_CONFIG_PATH}/workspaces/{teamId}.jsonに書き込むホストアプリケーション。このサーバーはそれらのファイルを読み込みますが、OAuth 自体は開始しません。
ワンクリックインストール
ボタンをクリックすると、ホストから次の項目を入力するよう求められます:SLACK_CONFIG_PATH、SLACK_TEAM_ID、SLACK_CLIENT_SECRET、SLACK_REQUEST_TIMEOUT_MS、SLACK_MAX_RETRIES。
Claude Desktop / Claude Code / Goose / Continue.dev 用の手動設定(Slack)
{
"mcpServers": {
"Slack": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-slack"
],
"env": {
"SLACK_CONFIG_PATH": "",
"SLACK_TEAM_ID": "",
"SLACK_CLIENT_SECRET": "",
"SLACK_REQUEST_TIMEOUT_MS": "60000",
"SLACK_MAX_RETRIES": "10"
}
}
}
}
クイックスタート
インストールとビルド
cd <path-to-repo>/connectors/slack
npm install
npm run build
npx(公開後に使用)
npx -y @mindstone/mcp-server-slack
ローカル
node dist/index.js
設定
このサーバーは、Slack OAuth フローを独自に実行するホストアプリケーションと連携して動作するよう設計されています。ホストが認証情報をディスクに書き込み、このサーバーがそれを読み取ります。
必須の環境変数
SLACK_CONFIG_PATH— Slack 設定ディレクトリへのパス(ホストが管理)。config.json(ワークスペースのメタデータ)とworkspaces/{teamId}.json(ワークスペースごとのトークン、モード 0600)が含まれます。SLACK_TEAM_ID— ワークスペースのチーム ID(ワークスペースごとのインスタンス)。
任意の環境変数
SLACK_CLIENT_ID— OAuth Connected App のクライアント ID。ローテーションするトークンを更新する場合にのみ必要です。保存済みの非ローテーション型トークンは、これがなくても Slack API を直接認証できます。更新が必要なのにこの値が設定されていない場合、サーバーはREFRESH_NO_CLIENT_CREDENTIALSを返して明示的に失敗し、ホストに再認証を促します。SLACK_CLIENT_SECRET— OAuth Connected App のクライアントシークレット。SLACK_CLIENT_IDと同じ条件で必要です。SLACK_DISABLE_REFRESH—1に設定すると、このサーフェスでのトークン更新を無効にします。トークンの有効期限が切れた場合、oauth.v2.accessによる更新を試みず、構造化されたauth_requiredレスポンスを返して安全側に失敗します。クラウドサーフェスで使用すると、デスクトップが唯一の更新権限を持つようになり、使い捨ての更新トークンを巡る競合を避けられます。SLACK_REQUEST_TIMEOUT_MS— 上流タイムアウトのデフォルト値(60s)を上書きします。正の整数で、300000(5 分)以下である必要があります。MCP_WORKSPACE_PATH—upload_slack_fileが読み取るファイルの範囲を制限するディレクトリです。範囲外のパス(範囲外を指すシンボリックリンクを含む)は拒否されます。未設定の場合は、システムの一時ディレクトリがデフォルトになります。
認証フロー
ホストは authenticate_slack_workspace ツールを呼び出します。OSS サーバーは、次の形式の構造化された auth_required レスポンスを返します。
{
"status": "auth_required",
"user_action": {
"id": "slack.connect_workspace",
"label": "Connect Slack",
"instruction": "Click \"Connect Slack\" in the side panel to authorise the workspace."
},
"agent_action": {
"instruction": "Tell the user to click the Connect Slack button in the connector settings to authorise. Then call list_slack_workspaces to verify."
},
"setupToolName": "authenticate_slack_workspace"
}
ホストの MCP サービスはこの形式を認識し、登録済みの Slack OAuth オーケストレーター(デスクトップのブラウザーフロー)に処理を振り分けます。ユーザーがサインインすると、ホストはトークンを ${SLACK_CONFIG_PATH}/workspaces/{teamId}.json に書き込み、サーバーは次の呼び出し時にそれを読み込みます。
OSS サーバーが OAuth を自ら開始することはありません。
ホスト設定の例
このサーバーは、ホストが OAuth をオーケストレーションする設計です。ホストがワークスペースごとのトークンファイルをディスクに書き込み、サーバーがそれを読み取ります。以下の例は環境変数の形式を示しています。ツール呼び出しが成功する前に ${SLACK_CONFIG_PATH}/workspaces/{teamId}.json を設定する責任は、ホストアプリケーションにあります。
Claude Desktop / Cursor
{
"mcpServers": {
"Slack": {
"command": "npx",
"args": ["-y", "@mindstone/mcp-server-slack"],
"env": {
"SLACK_CONFIG_PATH": "/absolute/path/to/slack-config",
"SLACK_TEAM_ID": "T0123ABCD",
"SLACK_CLIENT_ID": "your-slack-app-client-id",
"SLACK_CLIENT_SECRET": "your-slack-app-client-secret"
}
}
}
}
ホストがそのチームの ${SLACK_CONFIG_PATH}/workspaces/T0123ABCD.json を書き込むまでは、すべてのツール呼び出しで構造化された auth_required レスポンスが返されます(上記の認証フローを参照)。
ローカル開発(npm への公開は不要)
{
"mcpServers": {
"Slack": {
"command": "node",
"args": ["<path-to-repo>/connectors/slack/dist/index.js"],
"env": {
"SLACK_CONFIG_PATH": "/absolute/path/to/slack-config",
"SLACK_TEAM_ID": "T0123ABCD",
"SLACK_CLIENT_ID": "your-slack-app-client-id",
"SLACK_CLIENT_SECRET": "your-slack-app-client-secret"
}
}
}
}
ツール(39)
認証
authenticate_slack_workspace— 構造化されたauth_requiredレスポンスを返します。OAuth はホスト側で処理されます。list_slack_workspaces— Slack の接続状況(接続状態、トークンの健全性、有効期限が近いかどうか)を確認します。
メッセージ
search_slack_messages— すべてのチャンネルを検索します(Slack の検索修飾子に対応)。to_me、after、beforeのいずれかが指定されている場合はqueryを省略できます。いずれも指定されていない呼び出しは拒否されます。接続済みアプリが詳細なsearch:read.*スコープを持つ場合は、Slack の Real-Time Search API(assistant.search.context)を使用します。それ以外の場合は従来のsearch.messagesにフォールバックし、同じく完全な検索結果を返します。実行されたバックエンドはsearch_backendに記録されます。このフィールドは診断専用であり、Real-Time Search の経路を有効にするにはアプリの設定変更が必要で、依頼者が対応できるものではないため、ユーザーにはフォールバックについて説明しません。フォールバックがワークスペースごとにキャッシュされるのは、インストールに関する拒否(missing_scope、not_allowed_token_type、feature_not_enabled、エンドポイントの非推奨を示すコード)の場合に限られます。リソース固有のaccess_deniedは通常のエラーとして表示され、次の呼び出しでは RTS が再試行されます。get_slack_saved_messages— 後で見るために保存したメッセージを取得します(is:savedを使用)。search_slack_messagesと同じ検索バックエンド情報を報告します。get_slack_message_by_link— パーマリンク URL からメッセージを取得します。compose_slack_message— 送信前にインライン編集可能な作成フォームを開きます。ユーザーが「送信」をクリックすると、フォームからpost_slack_messageを介して投稿されます。post_slack_message— メッセージを投稿します。DM の宛先確認機能が組み込まれています。自分宛ての DM はブロックされ、send_myself_a_noteに誘導されます(ユーザートークンによる自分宛ての DM では通知されません)。reply_to_slack_thread— 既存のスレッドに返信します。schedule_slack_message— 将来の日時にメッセージを送信するよう予約します。自分宛ての DM はブロックされます(予約した自分宛てのメモにはまだ対応していません)。list_scheduled_slack_messages— 保留中の予約済みメッセージを一覧表示します(チャンネルごとの指定も可能)。キャンセルに必要な ID も表示します。delete_scheduled_slack_message— 投稿前の予約済みメッセージをキャンセルします。update_slack_message— 自分が投稿したメッセージを編集します。delete_slack_message— 自分が投稿したメッセージを完全に削除します。send_myself_a_note— 実際に通知が届くメモを自分に送信します(認証済みユーザーにボットから DM を投稿します)。ユーザートークンによる自分宛ての DM の代わりに、「何かを書き留める」場合やリマインダーに使用します。
チャンネル
list_slack_channels— チャンネルを一覧表示します(フィルタリング、ページネーションに対応)。get_slack_channel_history— チャンネルの最近のメッセージを取得します。create_slack_channel— 新しいチャンネル(パブリックまたはプライベート)を作成します。mark_slack_channel_as_read— 指定したタイムスタンプまでのメッセージを既読にします。get_slack_unread_messages— 自分の既読位置に基づいて未読メッセージを取得します。invite_user_to_channel— ユーザーをチャンネルに追加します(複数ユーザーに対応)。
スレッド
get_slack_thread_replies— スレッド内のすべての返信を取得します。
リアクション
add_slack_reaction— メッセージに絵文字リアクションを追加します。remove_slack_reaction— メッセージから自分のリアクションを削除します。list_slack_emoji— ワークスペースのカスタム絵文字を一覧表示します(名前 → URL/エイリアス。いずれも<untrusted-content>エンベロープで囲まれます)。Slack の絵文字の名前や値に関する制約に違反する項目は除外され、その数が報告されます(omitted_invalid_entries)。転送されることはありません。
ピン留め
list_slack_pins— チャンネルでピン留めされたメッセージを一覧表示します。pin_slack_message— メッセージをチャンネルにピン留めします。unpin_slack_message— チャンネルのピン留め項目からメッセージを削除します(メッセージ自体は削除されません)。
ユーザー
list_slack_users— アクティブなユーザーを一覧表示します(名前フィルターを自動的にページネーションします)。get_slack_user_profile— ユーザーの詳細なプロフィールを取得します。lookup_user_by_email— 完全一致するメールアドレスでユーザーを検索します(優先される解決方法)。open_slack_dm— ユーザーとの DM を開きます(DM チャンネルと、確認済みの受信者 ID を返します)。
ファイル
download_slack_file— ID または URL を指定してファイル添付をダウンロードします。upload_slack_file— ローカルファイルをアップロードします(ワークスペース内に制限され、競合状態のない読み取りが行われます。上限は 50MB)。必要に応じてチャンネルまたはスレッドに共有できます。3 ステップの外部アップロードフローを使用します。
ワークスペース
add_slack_bookmark— チャンネルにブックマークを追加します。list_slack_bookmarks— チャンネルのブックマークを一覧表示します。add_slack_reminder— [EXPERIMENTAL] リマインダーを作成します(Slack API は一部非推奨のため、schedule_slack_messageを推奨します)。list_slack_reminders— [EXPERIMENTAL] 自分のリマインダーを一覧表示します。complete_slack_reminder— [EXPERIMENTAL] リマインダーを完了済みにします。delete_slack_reminder— [EXPERIMENTAL] リマインダーを完全に削除します。
セキュリティに関する注意事項
- Slack が所有するダウンロード URL のガード —
download_slack_fileは、Slack から提供されたurl_private_downloadが HTTPS であり、slack.comまたは*.slack.com上にあることを検証してから、ワークスペースのベアラートークンを付与します。ダウンロードヘルパーはredirect: 'manual'も設定し、リダイレクトのたびに再検証するため、侵害された Slack のエッジから攻撃者が管理するホストへの 302 リダイレクトによってベアラートークンが再送信されることはありません(slack-010の指摘への対応として 0.1.3 で追加)。 - 信頼できないコンテンツのエンベロープ — 外部テキストを返すすべてのツールは、AGENTS.md の不変条件 #6 に従って
<untrusted-content source="…">…</untrusted-content>エンベロープで囲み、閉じタグによるブレークアウトをエスケープします。対象には、メッセージ本文、チャンネルのトピック/目的、検索結果、スレッドの返信、未読メッセージ、ダウンロードしたファイルの内容/名前が含まれます。ツールの出力をモデルに提示する際、ホストはエンベロープをそのまま保持する必要があります(slack-001..007の指摘への対応として 0.1.3 で追加)。 - アトミックで永続性のあるトークン保存 — トークンファイルは一時ファイルへの書き込み、
fsync、renameの順に処理された後、chmod 0600で権限が設定されるため、書き込み中にクラッシュしても Slack の使い捨てリフレッシュトークンが失われることはありません。 - リフレッシュ失敗の区別 — 一時的なネットワークエラー、HTTP 429 のレート制限、Slack の認証拒否(
invalid_grant)、不正な形式のレスポンスは、それぞれ異なるエラーコードを生成します。これによりホストは、回復不能な失敗を再試行せずに適切に対応できます。 - ホスト内部の用語を含めない — ホスト側ブリッジの識別子と同梱された HTTP パスは、公開される成果物に明示的に含まれません(
prepublishOnly実行時にscripts/check-no-bridge-strings.shで確認され、npm run security:internal-refsとしても実行されるscripts/check-internal-refs.mjsは、src/とdist/内の内部イシュートラッカー参照も拒否します)。 - 競合状態のないアップロード元の読み取り —
upload_slack_fileはワークスペース内のソースパスを検証してから、一度だけ開きます(シンボリックリンクをたどらず、ノンブロッキング)。開いたファイル記述子に対するfstatによって通常ファイルのみを許可し、50MB の上限を適用します。さらに、新たに制限付きで解決したパスとファイル記述子の dev+inode が一致することを再検証し、検証後の置き換え(祖先ディレクトリの差し替えを含む)を防ぎます。読み取る実データにも、ファイル記述子を通じて上限を適用します。 - 追加パスでもエンベロープを統一 —
add_slack_bookmarkとadd_slack_reminderは、一覧表示パスと同様に Slack から返されたタイトル/テキストをエンベロープで囲み、閉じタグによるブレークアウトをエスケープします。
実装レベルの詳細(リクエストタイムアウトの構成、MSW リクエストマニフェスト、トークンファイルのエラー状態、サーバーバージョンの不整合チェックなど)は、docs/connectors/slack-cohort-hygiene.md に記載されています。
ライブプローブ
ライブプローブゲートは test/live-probe.ts にコミットされています。自動実行はされません。手動で実行してください:
LIVE_PROBE_BOT_TOKEN=xoxb-... \
LIVE_PROBE_USER_TOKEN=xoxp-... \
LIVE_PROBE_TEAM_ID=T... \
npm run probe:live
プローブはワークスペースのソースではなく、パッケージ化された tarball に対して実行されます。initialize + tools/list + 読み取り専用の呼び出し 5 件 + 書き込みツールの呼び出し 2 件を実行し、60s のタイムアウトのデフォルト値を検証するために search.messages の P95 レイテンシを記録します。
デフォルトでは、プローブは読み取り専用です。書き込みプローブ(post_slack_message、add_slack_reaction)は、LIVE_PROBE_TEST_CHANNEL_ID が設定されている場合にのみ実行されます。設定されていない場合はスキップされますが、プローブは引き続き OK で終了します。
公開ゲートモード
公開前の認定では、次を実行してください:
LIVE_PROBE_BOT_TOKEN=xoxb-... \
LIVE_PROBE_USER_TOKEN=xoxp-... \
LIVE_PROBE_TEAM_ID=T... \
LIVE_PROBE_TEST_CHANNEL_ID=C... \
npm run probe:live:gate
probe:live:gate は LIVE_PROBE_REQUIRE_WRITES=1 を設定します。これにより、LIVE_PROBE_TEST_CHANNEL_ID が設定されていない場合、またはいずれかの書き込みプローブが正常に完了しない場合、プローブはスキップではなく失敗します。リリースを作成する前に実行してください。
ライセンス
FSL-1.1-MIT — Functional Source License, Version 1.1。MIT の将来のライセンスが付属します。このソフトウェアは 2030-04-08 に MIT ライセンスへ切り替わります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。