🪄

Claude Code の Slack MCP を複数ワークスペースに接続する (公式 plugin の重複排除を回避するハック)

に公開

忙しい人向け要約

  • 問題: Claude Code の公式 Slack plugin は 1 ワークスペースしか繋げない。別ワークスペース用に claude mcp add で MCP server を足しても、URL が同じ (https://mcp.slack.com/mcp) なので Claude Code が「重複」と判定して片方を起動時に skip する。
  • 解決: 2 つ目の MCP server の URL に意味のない query param (?ws=group) を付ける。Slack 側は無視するが Claude Code は文字列比較で別 URL と判定するので、両方 load される。
  • : URL を分けるのに trailing slash (/mcp/) はダメ。Slack が 301 redirect を返して MCP 接続が壊れる。

起きた問題

Acme 社 (架空の会社) では Slack ワークスペースが複数ある。

  • acme.slack.com — 全社共通の汎用 ws
  • acme-group.slack.com — プロジェクト別 channel が集約されている ws

Claude Code の Anthropic 公式 Slack plugin (slack@claude-plugins-official) で OAuth するとどちらか 1 つのワークスペースとしか接続されない。両方のワークスペースを横断検索したいので、どちらにも接続したい。

/mcp から手動で別 server を追加するのが王道だが、試してみると Claude Code が起動時に skip する:

1 error:
  MCP server "slack" skipped — same command/URL as already-configured "slack-secondary"
  → Remove "slack-secondary" from your MCP config if you want the plugin's version instead

つまり 同じ URL の MCP server は片方しか load されない

原因 1: OAuth callback port が固定

そもそも別ワークスペースとして user scope の MCP server を追加するには:

claude mcp add --scope user \
  --transport http \
  --client-id 1601185624273.8899143856786 \
  --callback-port 3119 \
  slack-secondary https://mcp.slack.com/mcp

これで OAuth しようとすると Slack 側でエラー:

redirect_uri did not match any configured URIs.
Passed URI: http://localhost:3119/callback

Anthropic の Slack OAuth App には localhost:3118 しか redirect URI 登録されてない。port 3119 は受け付けてもらえない。

--callback-port 3118 に揃えると OAuth 自体は通る。

原因 2: 同じ URL は重複排除される

ところが今度は、Claude Code 側で:

  • plugin slack: https://mcp.slack.com/mcp
  • slack-secondary: https://mcp.slack.com/mcp ← 同じ URL

これは "重複" 扱いで片方が skip される。

解決: URL に query param を付けて重複排除を欺く

~/.claude.json を直接編集して URL を微妙に変える:

{
  "mcpServers": {
    "slack-secondary": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp?ws=group",
      "oauth": {
        "clientId": "1601185624273.8899143856786",
        "callbackPort": 3118
      }
    }
  }
}

?ws=group は Slack 側で無視されるので接続には影響しないが、Claude Code 側では文字列比較で別 URL と判定 → 重複排除が回避される。

再起動後に /mcp で再 auth する。新規 token として処理され、これで両 server とも active になる。

失敗した別の手 1: trailing slash

最初は trailing slash で URL を分けようとした:

https://mcp.slack.com/mcp/  (trailing slash)

curl -I してみると:

HTTP/2 301
location: https://mcp.slack.com/mcp

Slack 側で 301 redirect されている。MCP HTTP クライアントは redirect を追従しないので接続失敗。Claude Code の /mcp で「Authentication successful, but server reconnection failed」が再起動しても続く。

失敗した別の手 2: 公式 plugin への複数 OAuth

「同じ plugin の OAuth で workspace 切り替えができれば」と試したが:

  • Slack の OAuth token は (app=clientId, workspace, user) 単位で保持される
  • ところが Claude Code がローカルに保存する token は MCP server 名単位 (= plugin slack なら 1 つだけ)
  • 切り替え auth すると古い token が上書きされる

token 自体は workspace ごとに別物として Slack 側で保持されているが、Claude Code がアクセスしているのは「plugin slack の token」1 個だけなので、複数 workspace を同時に扱えない。

失敗した別の手 3: 自前 Slack OAuth App

正攻法ではあるが:

  • 自前 Slack App 作成 → clientId / clientSecret 取得 → redirect URI 登録 → MCP に書き込む
  • 工数は 5-10 分程度

これでも解決するが、今回の query param hack の方が手軽

OAuth 後に再起動が必要なケース

URL を変更すると既存 token と紐付かないので再 auth が必要。再 auth すると:

Authentication successful, but server reconnection failed.
You may need to manually restart Claude Code for the changes to take effect.

→ Claude Code を完全終了して再起動。

結局なにを学んだか

  • Anthropic 公式 plugin は OAuth client / redirect URI が固定なので、直接の複数ワークスペース対応はサポートされていない
  • だが MCP server config を user scope で追加 + URL を query param で分岐 → 共存できる
  • trailing slash は Slack 側 redirect でハマるので NG。query param が安全
  • token 分離は MCP server 名ごとに行われるので、別 server 名で追加すれば衝突しない

雑な hack だが、複数組織の Slack を Claude Code で並行検索するのに当面これで十分使える。

環境

  • Claude Code v2.1.122 (執筆時点最新)
  • Slack OAuth: 公式 mcp.slack.com/mcp endpoint
  • 動作確認: macOS, 2026-04-28

Discussion