Claude Media
Slack MCPサーバーの使い方 — Claude Codeへの接続とClaude Tagとの違い

Slack MCPサーバーの使い方 — Claude Codeへの接続とClaude Tagとの違い

SlackのリモートMCPサーバー(mcp.slack.com)をClaude Codeにつなぐ手順と、権限スコープの絞り方、Claude Tagとの役割の違いをまとめます。

SlackはAIエージェント向けに、https://mcp.slack.com/mcpというリモートMCPサーバーを提供しています。ローカルにサーバーを立てる必要はなく、Claude Codeからメッセージ・チャンネル・canvasにアクセスできます。ただし、URLを1行登録するだけでは通りません。Slackは動的クライアント登録(DCR)に対応しておらず、接続元は固定のアプリIDを持つ必要があるためです。

似た名前の製品にClaude Tagもありますが、こちらはSlackチャンネルの中で@Claudeとして動く別の仕組みです。この記事では、つながらないときの原因、Slack公式が示す接続経路、スコープの絞り方、Claude Tagとの向きの違いを順に見ます。

claude mcp addの1行でつながらないのはなぜか

Slackの公式ドキュメントには、SSE接続とDynamic Client Registrationには対応していないと書かれています。MCPクライアントは、固定のアプリIDを持つ登録済みSlackアプリに支えられ、そのIDをクライアント側に埋め込む必要があります。ワークスペース管理者が通常のアプリ承認の流れで承認・管理でき、リクエストがアプリに紐づいてログや利用制限に反映されます。

Claude Code側の公式ドキュメントも、DCR非対応のサーバーではIncompatible auth server: does not support dynamic client registrationのようなエラーになり、事前登録した認証情報が必要だと説明しています。そこでclaude mcp addの登場です。v2.1.285でclaude mcp add --helpを実行すると、次のオプションが並びます。

claude mcp add --help
Options:
  --callback-port <port>       Fixed port for OAuth callback (for servers
                               requiring pre-registered redirect URIs)
  --client-id <clientId>       OAuth client ID for HTTP/SSE servers
  --client-secret              Prompt for OAuth client secret (or set
                               MCP_CLIENT_SECRET env var)

--client-idと--client-secretはDCR非対応サーバー向けに、事前に登録した認証情報を渡すためのもので、v2.1.30で追加されました。Slackは接続先として例に挙げられています。ただしSlackの公式ガイドがClaude Code向けに示しているのは、この手動登録ではなくプラグイン経由です。

Claude Codeで接続する手順

手順

Slack公式のClaude Code接続経路

  1. 1

    ワークスペース管理者の承認を確認する

    Slack側の前提条件は「MCP連携がワークスペース管理者に承認されていること」です。承認がなければ、以降の認証は進みません。

  2. 2

    Slackプラグインを入れる

    Claude Codeのセッション内で/plugin install slack、またはシェルからclaude plugin install slackを実行します。プラグインが読み込まれるとSlack MCPサーバーが自動で設定されます。

  3. 3

    OAuthでサインインする

    プラグインの読み込み後にOAuth認証が促されます。未認証のままなら/mcpパネルでSlackのサーバーを選びます。パネル上の名前はplugin:slack:slackのように、プラグイン名つきで表示されることがあります。ブラウザに開く認証画面で、ワークスペースへのサインインと権限の許可を済ませます。

プラグインが使う設定は、Slackの公式ガイドに次の形で載っています。clientIdはSlackが登録したアプリのIDで、callbackPortはOAuthの戻り先ポートを固定します。プラグインを使わず自分で.mcp.jsonに書く場合も、この2つが要ります。自作のSlackアプリを使うなら、MCPを使えるのはディレクトリに公開されたアプリか社内アプリだけで、未掲載のアプリは禁止されています。Slackは機密クライアントのOAuthにも対応しており、その場合は自分のアプリのclient_idとclient_secretを使います。

{
  "mcpServers": {
    "slack": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp",
      "oauth": {
        "clientId": "1601185624273.8899143856786",
        "callbackPort": 3118
      }
    }
  }
}

claude mcp addだけで登録して認証に失敗した場合の読み解き方は、「dynamic client registration」の対処にまとめています。

接続後にできること — Slackが公開しているツール

接続が済めば、あとは自然文で頼むだけです。Slackの公式ドキュメントにあるツールは、検索とメッセージだけではありません。

  • 検索: メッセージ・ファイル・ユーザー・チャンネル・絵文字
  • メッセージ: 送信、予定送信(スケジュール)、下書き、チャンネルやスレッドの読み込み、リアクションの追加と取得
  • 作成系: 公開・非公開チャンネルやDMの作成、canvasとリスト(lists)の作成・更新、ファイルのアップロード
  • ユーザー情報: プロフィール、メールアドレス、チャンネルメンバー、参加チャンネル一覧

チャンネルの新規作成やファイルのアップロードも含まれるため、「読む・送るだけ」のツールセットと見なして権限を広く渡すと、想定より多くの操作が可能になります。

先週の#engineeringチャンネルで、デプロイ障害について話していたスレッドを探して

このような依頼では検索系のツールが呼ばれ、キーワードに一致するメッセージが返ります。過去ログを調べてからコードの修正に取り掛かる流れを、Claude Codeのセッション内で完結できます。

今のバグ修正の要点を3行でまとめて、#eng-alertsチャンネルに投稿して

送信はchat:writeスコープで動きます。意図しない誤送信を避けたい場合は、次の節のとおりこのスコープを要求しない構成にできます。

権限スコープをどう絞るか

Slackの公式ドキュメントでは、ツールごとに必要なユーザートークンのスコープが決まっています。使う機能から逆算すると、要求するスコープを最小にできます。

使う機能必要なスコープ
メッセージ・ファイルの検索必要なスコープsearch:read.public / search:read.private / search:read.mpim / search:read.im / search:read.files
チャンネルやスレッドの読み込み必要なスコープchannels:history / groups:history / mpim:history / im:history
メッセージ送信・予約送信必要なスコープchat:write
チャンネル・DMの作成必要なスコープ公開チャンネルはchannels:write、非公開はgroups:write、DMはim:write / mpim:write
canvasの作成・更新必要なスコープcanvases:read と canvases:write

Claude Codeは、oauth.scopesを設定しない場合、サーバーがWWW-Authenticateヘッダーや保護リソースのメタデータで示したスコープを要求します。v2.1.196以降は、サーバーが公開する全スコープの一覧を自動では要求しません。読み取り専用にしたいなら、次のように空白区切りで固定します。

{
  "mcpServers": {
    "slack": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp",
      "oauth": {
        "clientId": "1601185624273.8899143856786",
        "callbackPort": 3118,
        "scopes": "search:read.public channels:history"
      }
    }
  }
}

スコープが足りない呼び出しではneeds additional permissionsが返り、必要なスコープ名が示されます。検索ツールでこれが出たら、表にある他のsearch:read.*を足します。ここで注意したいのは、再認証だけではスコープが増えない点です。Claude Codeは固定したスコープを要求するため、oauth.scopesに足してから/mcpでもう一度認証します。Claude Code側のMCP OAuth実装全般はClaude Code MCP設定ガイドで扱っています。

レート制限と他のMCPサーバーとの併用

MCPツールにも、Slack Web APIと同じレート制限がかかります。ツールごとに階層(Tier)が決まっており、Slackが載せている数値は次のとおりです。

数字

ツールごとの制限(1分あたり)

  • ユーザー・チャンネル・絵文字の検索

    20回以上

    Tier 2

  • スレッド・チャンネルの読み込み

    50回以上

    Tier 3

  • プロフィール・メンバー一覧

    100回以上

    Tier 4

出典: Slack公式ドキュメントのレート制限表

メッセージ・ファイルの検索と送信には、別途メソッドごとの制限があります。Slackは、Slack MCPサーバーと他のMCPサーバーを同時に接続するときも注意を促しています。サーバーごとにセキュリティや安定性の性質が違うため、混ぜて使うかどうかは個別に判断する前提です。アプリに許可IPアドレスを設定している場合は、MCPサーバーへのリクエストにも同じ制限がかかり、許可リストにないIPからの呼び出しは拒否されます。MCP経由の操作は、Slackの監査ログでも確認できます。

Slack MCPサーバーとClaude Tagはどう違うか

役割はほぼ正反対です。

仕組み向き主体対象プラン
Slack MCPサーバー向きSlackをClaudeの外部ツールとして使う主体Claude Code・claude.ai等のMCPクライアント対象プラン制限記載なし(要ワークスペース承認)
Claude Tag向きClaudeをチームの一員としてSlackに置く主体Slackチャンネル内の@Claude対象プランTeam・Enterprise
旧Claude Code in Slack向きSlackから個人のコーディングセッションを起動する主体個人のClaudeアカウント対象プランPro・Max(Team/EnterpriseはClaude Tagへ移行中)

MCPサーバーは、Claude CodeのセッションがSlackの中身を読みに行く・書きに行くための接続です。Claude Tagは、チャンネルの中に組織共有の@Claudeを置く仕組みで、誰かがメンションするとタスクとして受け取ります。過去ログを検索してコンテキストに使いたいならMCPサーバー、チームの誰もがSlackから直接Claudeにタスクを振れるようにしたいならClaude Tagです。両方の併用もできます。Claude Tag側にはSlack検索の範囲を絞る管理設定があります。「Channels Claude can search」という設定で、追加済みの公開チャンネルだけに限れます(v2.1.283、2026-09-25のchangelogで追加)。

Slack接続まわりの修正履歴

Slackは、DCR非対応の代表例としてClaude CodeのOAuth実装で個別に扱われてきました。changelogで確認できた修正は次のとおりです。

あゆみ

Slack MCP接続に関わる修正

  1. v2.0.34トークン更新の無限ループを修正

    OAuthを使うMCPサーバー(例としてSlack)で、トークン更新が無限に繰り返されて接続中に固まる不具合が直りました。

  2. v2.1.30(2026-02-03)事前登録の認証情報に対応

    DCR非対応サーバー向けに、claude mcp addで--client-idと--client-secretを指定できるようになりました。

  3. v2.1.74(2026-03-12)HTTP 200のエラーで再認証されない不具合を修正

    リフレッシュトークンが切れても、HTTP 200でエラーを返すサーバー(例としてSlack)では再認証が促されませんでした。

  4. v2.1.94(2026-04-07)送信ツールの表示を簡略化

    トランスクリプトの送信表示がSlacked #channelになり、チャンネル名がリンクになりました。

  5. v2.1.231(2026-08-13)リダイレクトURIの不一致を修正

    v2.1.229ではhttp://127.0.0.1:PORT/callbackを送っていたため、登録URIと完全一致で照合するサーバーでサインインに失敗しました。v2.1.231でlocalhostの形に戻っています。

認証が不安定なときは、古いバージョンを疑うのが手早い切り分けです。リモートMCPのOAuth設計全般はリモートMCPのOAuth認証で扱っています。

つまずいたときの切り分け

  • 再認証を促されないままツールが失敗する: v2.1.74より前のバージョンでは、リフレッシュトークンが切れても再認証が促されない不具合がありました。claude --versionで確認します
  • v2.1.229を使っている: リダイレクトURI不一致でサインインに失敗します。v2.1.231以降に上げます。自前のSlackアプリのclientIdを使っている場合に限り、127.0.0.1の形を登録URIに加える回避もできます
  • 送信ツールだけ失敗する: oauth.scopesにchat:writeを含めていない可能性があります。スコープの足し方は権限スコープの節のとおりで、追加してから/mcpで再認証します
  • 接続自体が通らない: 管理者がMCPクライアントを承認していないか、clientIdとcallbackPortが未設定の可能性があります
  • claude.aiのSlackコネクタと二重になる: 同じSlackに2経路でつながります。/mcpパネルで有効な方を確認し、不要な方を切ります(コネクタを無効にするとdisabledMcpServersにclaude.ai Slackとして記録されます)

まとめ

社内のSlackをClaudeに読ませたいだけなら、確認するのは管理者の承認とプラグインの導入の2点です。送信まで許すかどうかは、chat:writeをoauth.scopesに入れるかどうかで決まります。

この記事を共有:XはてブLinkedIn