🎱

n8n を MCP サーバー経由で GitHub Copilot から操作できるようにした

に公開

やりたかったこと

n8n でワークフローを作る際、毎回ブラウザの GUI を開いて操作するのが面倒でした。
GitHub Copilot(VS Code)から自然言語で n8n を操作できれば、開発体験が大幅に向上すると考え、MCP (Model Context Protocol) サーバーを使って実現しました。

n8n とは

n8nセルフホスト可能なワークフロー自動化ツールです。Zapier や Make(旧 Integromat)に似ていますが、以下の点で大きく異なります。

n8n の利点

1. UI 上でワークフロー全体を視覚的に確認できる

n8n はノードベースのビジュアルエディタを採用しています。各ノードがどう接続され、データがどう流れるかを一目で把握できます。複雑なフローでも全体像を見失いません。

以下は実際の n8n エディタ画面です。チャットワークフローの例で、Chat Trigger → AI Agent → Azure OpenAI Chat Model という流れがノードとして可視化されています。

画面下部に注目してください。Chat パネルでワークフローをその場で実行テストでき、中央の Logs パネルでは各ノードの実行順序や所要時間(6.408s / 104 Tokens など)をリアルタイムに確認できます。右側の Output パネルでは選択したノードの出力データをプレビューできます。

このように、ブラウザ上でフロー全体を俯瞰しながら、個別ノードの入出力もその場で確認できるため、デバッグが非常に効率的です。

2. ノード単位で修正できるため変更の影響範囲が最小限

従来のスクリプトベースの自動化では、1 箇所の変更が全体に波及しがちです。n8n はワークフローが独立したノードの組み合わせで構成されているため、修正したいノードだけを編集できます。

以下は RAG(Retrieval-Augmented Generation)構成のワークフロー例です:

この RAG ワークフローは以下のノードで構成されています:

ノード 役割
Chat Trigger ユーザー入力の受け付け
AI Agent 会話の制御・ツール呼び出し
Azure OpenAI Chat Model LLM による応答生成
Window Buffer Memory 会話履歴の保持
Vector Store Tool ベクトル検索の実行
Postgres PGVector Store ベクトルデータの保存・検索
Embeddings Azure OpenAI テキストのベクトル化

例えば、以下のような変更は該当ノード 1 つを修正するだけで完了します:

  • LLM を Azure OpenAI から別モデルに変えたい → Chat Model ノードだけ差し替え
  • ベクトル DB を Postgres から Pinecone に変えたい → Vector Store ノードだけ差し替え
  • 会話履歴の保持ターン数を変えたい → Window Buffer Memory の設定を変更

他のノードには一切手を加える必要がありません。スクリプトで同じ構成を組んだ場合、モデル変更だけでも API クライアントの初期化コード、エラーハンドリング、レスポンスパース処理など複数箇所の修正が必要になります。

3. 閉塞環境(エアギャップ)でも動作可能

n8n は完全にセルフホストできるため、インターネット接続がない閉塞環境でも運用可能です。(LLMをOllamh等のローカルLLMにすることで可能)

  • Docker イメージをオフラインで持ち込み可能
  • 外部 SaaS に依存しない自己完結アーキテクチャ
  • 社内ネットワーク内の API やデータベースとの連携に最適

セキュリティポリシーが厳しい企業や、機密データを外部に出せない環境であっても、n8n なら自動化の恩恵を受けられます。

構成

本構成では n8n-mcp-server を Docker コンテナ上で動作させています。

MCP サーバーはコンテナ化されているため、環境依存を排除し、どのマシンでも同一の動作を保証できます。n8n 本体との通信は host.docker.internal 経由で行います。

使ったもの

  • VS Code + GitHub Copilot Chat 拡張
  • n8n-mcp-server — n8n の REST API を MCP ツールとして公開するサーバー(Docker コンテナで動作)
  • n8n — セルフホスト型のワークフロー自動化ツール

セットアップ手順

n8n はDocker での self-hosted デプロイが公式推奨です。

参考: n8n 公式 Docker インストールガイド

まず Docker ボリュームを作成し、n8n コンテナを起動します:

docker volume create n8n_data

docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -e GENERIC_TIMEZONE="Asia/Tokyo" \
  -e TZ="Asia/Tokyo" \
  -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
  -e N8N_RUNNERS_ENABLED=true \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

起動後、ブラウザで http://localhost:5678 を開くとセットアップ画面が表示されます。

各オプションの説明:

オプション 説明
-p 5678:5678 ホストのポート 5678 を公開
GENERIC_TIMEZONE スケジュールノード等のタイムゾーン設定
TZ コンテナのシステムタイムゾーン
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS 設定ファイルのパーミッションを強制(推奨)
N8N_RUNNERS_ENABLED タスクランナー有効化(推奨)
-v n8n_data:/home/node/.n8n データを永続化するボリュームをマウント

補足: 本番運用では -it --rm の代わりに -d を使ってバックグラウンド起動することを推奨します。

MCP で使えるツール一覧

ツール名 説明
list_workflows ワークフロー一覧を取得
get_workflow 特定ワークフローの詳細を取得
create_workflow 新しいワークフローを作成
update_workflow 既存ワークフローを更新
activate_workflow ワークフローを有効化
deactivate_workflow ワークフローを無効化
delete_workflow ワークフローを削除

Docker で動かすメリット

環境の再現性

Node.js のバージョン差や依存パッケージの競合に悩まされません。node:20-alpine ベースの軽量イメージで統一されます。

セットアップの簡略化

docker compose build

あとは VS Code の MCP 設定を追加するだけです。

n8n 本体も Docker 化されていれば完全コンテナ構成に

n8n 自体も Docker で動作させていれば、docker-compose.yml に n8n-mcp-server を追加するだけで、ワークフロー自動化基盤とその操作 API を丸ごとコンテナで管理できます。

まとめ

  • n8n はノードベースの UI で直感的にワークフローを構築・修正でき、閉塞環境でも動作する強力な自動化ツール
  • n8n-mcp-server を Docker コンテナ化し、GitHub Copilot から自然言語で n8n を操作可能にした
  • セットアップは docker compose build + .env + mcp.json の 3 ステップ
  • host.docker.internal を使うことで、コンテナから localhost の n8n にシームレスに接続
ヘッドウォータース

Discussion