リモート環境のClaude CodeにSlack通知を連携する方法

AI

はじめに

Claude Codeを動かして長時間のタスクを実行していると、完了したタイミングをすぐに把握したい場面が増えてきます。 毎回ターミナルを確認しに行くのは手間なため、Slackへの通知連携を試みました。

Claude CodeはMCP(Model Context Protocol)経由でSlackと連携できます。 公式ドキュメントの手順通りに進めたところ、WSLやホームサーバーというリモート環境特有のOAuth認証の問題で詰まりました。 本記事では、ssh -L(ローカルポートフォワーディング)を使ったこの問題の解決手順を紹介します。

使用環境 / 前提

  • WSL、ホームサーバー上にClaude Codeがインストール済み
  • ローカルマシンからSSH接続可能
  • Slackワークスペースへのアプリ追加権限がある

公式手順で詰まった点

callbackPortとは

Slack MCPサーバーのOAuth認証フローでは、認証完了後にSlackがローカルの特定ポート(デフォルト: 3118)へコールバックします。Claude Codeの設定ファイルには以下のように記述します。

{
  "mcpServers": {
    "slack": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp",
      "oauth": {
        "clientId": "SLACK_CLIENT_ID", # 公式サイトのコードに記載されているクライアントID
        "callbackPort": 3118
      }
    }
  }
}

ローカルマシン上でClaude Codeを動かしている場合、ブラウザからのコールバックとClaude Codeが同じマシン上にいるため問題ありません。

WSLやホームサーバーでの問題

WSLやホームサーバー上でClaude Codeを動かしている場合、以下の構成になります。

  • Claude Codeが動いている場所: リモートサーバーport 3118をリッスン)
  • OAuth認証URLを開く場所: ローカルマシンのブラウザ
  • Slackのコールバック先: ブラウザが動いているローカルマシンのlocalhost:3118

ローカルマシンのポート3118はホームサーバーには繋がっていないため、コールバックが届かずOAuth認証が失敗します。

ssh -L による解決方法

ssh -L(ローカルポートフォワーディング)を使うことで、ローカルマシンのポートへのアクセスをSSHトンネル経由でリモートサーバーに転送できます。

ssh -L [ローカルポート]:[リモートホスト]:[リモートポート] [接続先サーバー]

今回の場合は以下のコマンドになります。

ssh -L 3118:localhost:3118 user@home-server
ssh -L 3118:localhost:3118 user@home-server

これにより「ローカルマシンのlocalhost:3118へのアクセス」が「ホームサーバーのlocalhost:3118」に転送されます。Slackからのコールバックがトンネルを通ってClaude Codeに届くようになります。

注意:ssh -R(リモートポートフォワーディング)とは転送の方向が逆です。-Lはローカル側のポートをリモートに転送します。ssh -Rについては「ssh -R を利用してWSLからWindowsのローカルサーバーに接続する」をご覧ください。

手順

1. Slack MCPの認証情報を取得する

以下の公式ドキュメントを参考に、SlackワークスペースでMCPアプリを作成し、クライアントIDを取得します。

参考: Slack MCP Server – Connect to Claude

2. Claude Codeの設定ファイルを編集する

ホームサーバー上の~/.claude.jsonmcpServersに以下の内容を追加します。

{
  "mcpServers": {
    "slack": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp",
      "oauth": {
        "clientId": "YOUR_CLIENT_ID_HERE", # 公式サイトのコードに記載されているクライアントID
        "callbackPort": 3118
      }
    }
  }
}

3. ssh -Lトンネルを開く

ローカルマシンから以下のコマンドを実行します。

ssh -L 3118:localhost:3118 user@home-server

SSHセッションが確立されたらターミナルはそのままにして、次のステップへ進みます。

4. Claude Codeを起動して認証する

ホームサーバー上で別のターミナルを開き、Claude Codeを起動します。

claude

起動後に /mcpコマンドを実行し、Slack MCPの認証フローを開始します。URLが表示されるのでブラウザで開き、Slackアカウントで認証を完了します。

注意:ssh -Lトンネルが有効な状態であれば、Slackからのコールバックがトンネルを通ってホームサーバーのClaude Codeに届き、認証が正常に完了します。

認証完了後、Claude Codeにタスクを依頼する際に「完了したらSlackの #general に通知して」と伝えることで、タスク完了の通知をSlackで受け取れるようになります。

まとめ

ssh -Lを使ってポートを転送することで、WSLやホームサーバーなどのリモート環境上のClaude CodeにSlack MCPを連携させることができます。 これにより、長時間タスクの完了をSlack通知で受け取れるようになり、作業の効率が上がります。参考になれば幸いです。

コメント

タイトルとURLをコピーしました