SIMPLE

/ log

n8n から SSH で Claude を呼び出す

同じサーバーに Claude Code と n8n(Docker)が同居しているなら、Anthropic API を使わずに SSH 経由でローカル呼び出しできます。MCP の認証情報もそのまま使えるので、タスク管理アプリなど外部ツール連携も動きます。SSH キーの作成から n8n ワークフローの構成、エラーハンドリングまでの手順をまとめました。

n8n には Anthropic ノードがあって、普通に使うなら API キーを設定して終わりです。でも同じサーバーに Claude Code が入っているなら、わざわざクラウドを経由しなくてもローカルで完結できるんじゃないかと思って試しました。

構成はシンプルで、n8n(Docker)が SSH でホストに入り、claude --print を叩くだけです。MCP も使えるので、タスク管理アプリとの連携もそのまま動きます。

構成

Webhook → SSH ノード → claude --print "..." → Respond to Webhook

n8n は Docker コンテナ内で動いていて、ホストの IP は 172.17.0.1(docker0 ゲートウェイ)。Claude Code はホスト側の /home/your-name/.local/bin/claude にあります。

手順

1. SSH キーを作成してホストに登録

n8n 専用の鍵を作ります。

ssh-keygen -t ed25519 -f ~/.ssh/n8n_key -N "" -C "n8n@localhost"
cat ~/.ssh/n8n_key.pub >> ~/.ssh/authorized_keys

秘密鍵の中身は後で n8n に貼るので手元にコピーしておきます。

cat ~/.ssh/n8n_key

2. SSH のポートを確認

デフォルト 22 番とは限らないので確認します。

sudo ss -tlnp | grep sshd

3. n8n に SSH クレデンシャルを追加

n8n の Credentials → New → SSH で以下を設定します。

  • Host: 172.17.0.1
  • Port: 22(環境に合わせて)
  • Username: ログインユーザー名
  • Authentication: Private Key
  • Private Key: ~/.ssh/n8n_key の中身

4. ワークフローを組む

Webhook ノード、SSH ノード、Respond to Webhook ノードの 3 つで構成します。

SSH ノードのコマンドはこうなります。

=/home/your-name/.local/bin/claude --dangerously-skip-permissions --print "{{ $json.body.year }}年{{ $json.body.month }}月のタスクを一覧で教えて"

--dangerously-skip-permissions は非対話モードで MCP ツールの許可プロンプトをスキップするためのフラグです。自分のサーバーで自分の Claude を動かす用途なら問題ありません。

成功時の Respond to Webhook ノードは以下の設定にします。

  • Respond With: Text
  • Response Body: ={{ $json.stdout }}

エラー時は SSH ノードの赤い出力端子から別の Respond to Webhook につなぎます。

  • Respond With: JSON
  • Response Code: 500
  • Response Body: ={{ JSON.stringify({ error: true, message: $json.message }) }}

5. 動作確認

curl -X POST https://your-n8n-domain/webhook/claude-tasks \
  -H "Content-Type: application/json" \
  -d '{"year": 2026, "month": 4}'

なぜこの構成か

API 経由だと Claude Code のセッションや MCP の認証状態が使えません。SSH 経由で claude コマンドを直接呼ぶと、~/.claude.json に保存された MCP の認証情報がそのまま使われるので、タスク管理アプリや他の MCP ツールも動きます。

n8n から Claude を使いたいだけなら Anthropic ノードで十分ですが、MCP 連携が必要な場合はこの方法が一番手っ取り早かったです。

https://whim-on-vim.com

Takaaki Yoneda

環境保全、グラフィックデザイン、マーケティングなどプログラミング以外にも幅広い興味を持ったソフトウェアエンジニアです。 最近の趣味は、ボードゲームと登山