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/mcpendpoint - 動作確認: macOS, 2026-04-28
Discussion