Slack MCP サーバの追加・認証(Claude Code 用)
結論:OAuth の client_id と callback_port が必須
Slack の公式 MCP サーバは 動的クライアント登録に対応していない.そのため URL だけで登録すると,/mcp → Authenticate が次のエラーで必ず失敗する:
SDK auth failed: Error from the MCP SDK for https://mcp.slack.com/mcp?ws=...
~/.claude.json の設定が {"type":"http","url":"..."} だけで,oauth キーがない状態が原因.エラー文からは原因がわからないので,まずここを疑う.
手順
1. 既に動いている Slack MCP の設定を確認する
python3 - <<'EOF'
import json,os
d=json.load(open(os.path.expanduser('~/.claude.json')))
for n,c in d.get('mcpServers',{}).items():
if 'slack' in n: print(n, c.get('url'), c.get('oauth'))
EOF
oauth: {"clientId": "...", "callbackPort": ...} を持つサーバがあれば,その clientId と callbackPort を流用する.同じ Slack アプリなので,ワークスペースが違っても同じ値でよい.
動いているサーバが1つもない場合は,claude.ai 側の Slack コネクタや Slack の MCP 公式ドキュメントで Claude Code 用の client_id を確認する.
2. 登録し直す(~/.claude.json は手で書き換えずに CLI で)
cp ~/.claude.json <スクラッチパッド>/claude.json.bak # 念のためのバックアップ
claude mcp remove <名前> -s user
claude mcp add --transport http \
--client-id <clientId> --callback-port <callbackPort> \
-s user <名前> "https://mcp.slack.com/mcp?ws=<ワークスペースのサブドメイン>"
claude mcp get <名前> # 「OAuth: client_id configured, callback_port ...」と出れば成功
ws=にはワークスペース URL のサブドメイン(xxx.slack.comのxxx)を書く.Slack が途中で切り詰めた名前になっている場合もあるので,ワークスペース URL をそのまま使うclaude mcp addの出力では URL のクエリ部分が省かれて表示されるが,claude mcp getで?ws=が残っていれば問題ない
3. ユーザーに認証してもらう
/mcp→ 該当サーバ → Authenticate- ブラウザの Slack 認可画面で,右上のワークスペースが目的のものかを確認してから許可するよう伝える(複数ワークスペースにログインしていると別のワークスペースで許可してしまいやすい)
- 起動中のセッションが古い設定のまま失敗する場合は,Claude Code を再起動してからやり直す
Claude がやってはいけないこと
mcp__<名前>__authenticateツールが同じ SDK エラーを返したら,何度も呼び直さない.それは設定不足のサインなので,上の手順 1〜2 に進む~/.claude.jsonを Python や sed で直接書き換えない(Claude Code 本体が上書きする可能性がある).必ずclaude mcp remove/addを使う