n8nのMCPは、AIアプリとn8nをつなぐ口の話です。「問い合わせ受付」ワークフローを題材に、問い合わせ一覧をClaudeやChatGPTから検索できるようにする向きと、n8nのAIエージェントに外のMCPサーバーの道具を持たせる向きの両方を、設定項目まで追って作ります。読み終わると、どちらを使うか決めて、認証付きで本番に出し、詰まったときに原因を切り分けられます。前提は、n8n 2.44系が独自ドメインとHTTPSで動いていて、「問い合わせ受付」がスプレッドシート「問い合わせ一覧」に行を足していることです。
この記事の内容
MCPとは何か
MCP(Model Context Protocol)は、AIアプリを外のシステムにつなぐためのオープンな標準です。公式サイトはUSB-Cにたとえています。機器ごとに専用の線を用意しなくても、同じ形の口に挿せばつながる、という意味です。AIアプリから見ると、スプレッドシートを読む、社内の手順書を探す、といった「道具」を、どのサービスでも同じ作法で呼べるようになります。
役割は2つです。道具を差し出す側が「MCPサーバー」、道具を呼ぶ側が「MCPクライアント」です。Claude Desktop、Claude Code、ChatGPT、Cursorなどがクライアントになります。クライアントはサーバーから道具の一覧(名前・説明・引数)を受け取り、会話の流れから必要な道具を選んで呼びます。だから道具の説明文が、そのまま「いつ呼ばれるか」を決めます。
n8nはこの両方の役をこなせ、インスタンス全体を1つのMCPサーバーにすることもできます(2.31から正式機能)。設定する場所がまったく違うので、まず向きを整理します。
| 向き | n8nの役 | 使うもの | 問い合わせ受付での例 |
|---|---|---|---|
| 外からn8nを呼ぶ(ワークフロー単位) | MCPサーバー | MCP Server Trigger | Claudeに「株式会社サンプルの問い合わせを探して」と頼むと、問い合わせ一覧を検索して返す |
| 外からn8nを呼ぶ(インスタンス全体) | MCPサーバー | Settings の Instance-level MCP | Claude Codeから既存のワークフローを探して実行する、新しく作らせる |
| n8nから外を呼ぶ | MCPクライアント | MCP Client Tool・MCP Client | 振り分け用のAIエージェントが、Notionの対応マニュアルを検索する |

先に決めること
本番で動かしていて、作り直しが出たのはほぼ次の5つです。
1つ目は向きです。社内の人がClaudeなどからn8nのデータを引くなら「外からn8nを呼ぶ」側、ワークフローの中のAIに外のサービスを使わせるなら「n8nから外を呼ぶ」側です。
2つ目は、外から呼ぶ場合にワークフロー単位(MCP Server Trigger)かインスタンス全体(Instance-level MCP)かです。決まった道具を数個渡すなら前者、担当者がClaude Codeなどからワークフロー全般を操作するなら後者です。
3つ目は、どのアプリから使うかです。claude.aiやChatGPTのようなWeb版は、相手のサーバーからn8nに接続してきます。n8nがインターネットから見えていないと使えません。
4つ目は認証です。トークンを誰に渡し、漏れたらどう差し替えるかまで決めます。
5つ目は、読み取りだけか書き込みもさせるかです。最初は読み取りだけで始め、書き込みを渡すときは人の確認を挟む仕組みを同時に作ります。
n8nのMCP機能の一覧
| 機能 | 何をするか | 設定する場所 | 認証 | 向く場面 |
|---|---|---|---|---|
| MCP Server Trigger | 1つのワークフローをMCPサーバーにし、つないだ道具だけを公開する | ワークフローのキャンバス | None・Bearer Auth・Header Auth・n8n User Auth (OAuth2)(2.27以降のv2ノード) | 決まった道具を社内のAIアプリに渡す |
| Instance-level MCP | インスタンス全体をMCPサーバーにする | Settings > Instance-level MCP | OAuth(推奨)・APIキー | ワークフローを外から作る・動かす |
| MCP Client Tool | AI Agentの道具として外のMCPサーバーを使う | AI Agentの道具の枠 | None・Bearer・Header・Multiple Headers Auth・MCP OAuth2 | AIに外のサービスを使わせる |
| MCP Client | 外のMCPサーバーの道具を、AIを通さず1手順として呼ぶ | 通常のノード | MCP Client Toolと同じ | 呼ぶ道具が決まっている定型処理 |
| MCP servers(登録済み一覧) | Notionなどを資格情報を手で作らずAI Agentに付ける | AI Agentの道具の枠 | サインインで自動作成 | 一覧にあるサービスをつなぐ |
向き1:MCP Server Triggerで問い合わせ一覧を道具にする
作るのは、道具を2つだけ持つ「問い合わせ受付MCP」ワークフローです。会社名で問い合わせを検索する道具と、未対応の件数を返す道具で、どちらも読み取りだけです。
MCP Server Triggerは普通のトリガーと違い、後ろにノードをつないで順に処理するものではありません。下にぶら下げた道具ノードだけを実行します。自作のワークフローを道具にするときは、Call n8n Workflow Tool で別のワークフローを呼びます。
スプレッドシートの列は「受付日時・会社名・氏名・メールアドレス・内容・種類・ステータス」で、1行目が見出し、ステータスには「未対応」「対応中」「完了」が入る前提です。
サブワークフロー「未対応件数を返す」を先に作る
- 新しいワークフローを作り、名前を「未対応件数を返す」にする
- トリガーに「When Executed by Another Workflow」(別のワークフローから呼ばれたとき)を置く
- その「Input data mode」を「Accept all data」にする
- Google Sheets ノードを足し、Resource を「Sheet Within Document」、Operation を「Get Row(s)」にする
- Document と Sheet に「問い合わせ一覧」を選ぶ
- Filters で Column を「ステータス」、Value を「未対応」にする
- Options は空のままにする(「Return only First Matching Row」を足さない限り、条件に合う行はすべて返る)
- Google Sheets ノードの Settings で「Always Output Data」をオンにする
- Code ノードを足し、下のコードを入れる
- 右上の「Publish」で公開する
const rows = $input.all().filter(i => Object.keys(i.json).length > 0);
return [{ json: { 未対応件数: rows.length } }];
7番で「Return only First Matching Row」を足してオンにすると最初の1件しか返らず、件数が常に1になります。8番は0件のときにCodeノードが動かないのを防ぐためで、空の1件はCodeで除いています。10番を忘れると、本番で道具が Workflow is not active and cannot be executed を返します。

本体「問い合わせ受付MCP」を作る
- 新しいワークフローを作り、名前を「問い合わせ受付MCP」にする
- MCP Server Trigger を置く
- Authentication を「Bearer Auth」にする
- 資格情報を新規作成し、下のコマンドで作った文字列をトークンとして保存する
- Path を
toiawaseに書き換える - トリガーの道具の枠に Google Sheets の道具を足し、Operation を「Get Row(s)」、Document と Sheet を「問い合わせ一覧」にする
- その Filters で Column を「会社名」、Value を下の式にする
- Options は空のままにする(会社名が一致する行はすべて返る)
- 道具の説明文を書く
- 道具の枠にもう1つ Call n8n Workflow Tool を足す
- Source を「Database」にし、「未対応件数を返す」を選ぶ
- Description に「未対応の問い合わせの件数を返す。件数だけが必要なときに使う。引数はない」と書く
- 保存する
openssl rand -hex 32
{{ $fromAI('company_name', '検索する会社名。問い合わせ一覧の会社名と完全に一致する正式名称(例: 株式会社サンプル)', 'string') }}
Pathの初期値はランダムな文字列です。後から見て何のサーバーか分かる名前にしておくと運用が楽です。
$fromAI() は値をAIに埋めさせる関数で、引数はキー(英数字・アンダースコア・ハイフンで1〜64文字)、説明、型の順です。公式の説明はAI Agentにつないだ道具向けですが、2.44.7でMCP Server Triggerの下の道具に書いても、クライアントの道具一覧(tools/list)に company_name が文字列の必須引数として出て、その名前で呼ぶと値が道具に渡ることを確かめました。道具の名前はノード名の空白が _ に変わった Google_Sheets Call_n8n_Workflow_Tool になります。Get Row(s) のフィルターは完全一致なので、「株式会社」を省いて呼ばれると0件になります。説明で正式名称を求めているのはそのためです。

2.36以降は「Instructions」欄に書いた文が接続してきたクライアントに渡り、対応するクライアント(公式の例はClaude Code)が取り込みます。道具をまたぐ決まりはここに書きます。
道具の説明文で、呼ばれるかどうかが決まる
クライアントのAIは、道具の名前と説明文だけを見てどれを呼ぶかを決めます。
| 書き方 | 例 | 結果 |
|---|---|---|
| 悪い | スプレッドシートを読む | どのシートか、いつ使うのか分からず、呼ばれない |
| 悪い | 問い合わせ検索 | 何で検索するか分からず、引数が空のまま呼ばれる |
| よい | 問い合わせ一覧を会社名で検索し、受付日時・氏名・内容・種類・ステータスを返す。特定の会社の問い合わせ履歴を聞かれたときに使う。会社名は正式名称で渡す | 会社名を聞かれた場面で呼ばれ、正しい引数が入る |
「何を返すか」「いつ使うか」「引数に何を入れるか」の3つを書きます。
Test URLとProduction URL
ノードを開いた上部の「MCP URL」で「Test URL」「Production URL」を切り替えて表示します。Production URL は /mcp/<Path> の形で、Test URL は /mcp-test/<Path> の形です。SSEとStreamable HTTPで末尾は変わらず、同じURLで両方を受け付けます。
| Test URL | Production URL | |
|---|---|---|
| いつ有効になるか | 未公開のワークフローで「Listen for Test Event」か「Execute workflow」を押したとき | ワークフローを公開(Publish)したとき |
| 呼ばれたデータの見え方 | キャンバスに出る | キャンバスには出ない。Executions タブで見る |
| 使いどころ | 説明文や引数の確認 | クライアントに登録して日常的に使う |
テストが終わったら、必ず Production URL を登録し直します。

SSEとStreamable HTTPのどちらで接続するか
MCPの現行仕様(2026-07-28版)が標準とする通信方式は、手元で起動したプログラムと標準入出力でやり取りするstdioと、Streamable HTTPの2つです。SSEだけで常時接続を張る方式は前の版のものです。
MCP Server TriggerはSSEとStreamable HTTPの両方を受け付け、stdioには対応していません。クライアントがStreamable HTTPに対応していればそちらを使い、SSEしか話せない古いクライアントだけSSEにします。stdioしか話せないクライアントは、中継役のプログラム(公式の例では mcp-remote)を手元で動かしてつなぎます。逆向きのMCP Client Toolも、2.44の画面では「Server Transport」の既定が「HTTP Streamable」で、もう一方の「Server Sent Events (Deprecated)」は古いサーバー向けです。
クライアントに登録する
公式のClaude Desktopの例は mcp-remote で中継する形です。claude_desktop_config.json に次を足し、URLを Production URL、トークンを手順4のものに置き換えます。
{
"mcpServers": {
"n8n": {
"command": "npx",
"args": [
"mcp-remote",
"https://n8n.example.co.jp/mcp/toiawase",
"--header",
"Authorization: Bearer ${AUTH_TOKEN}"
],
"env": {
"AUTH_TOKEN": "ここにトークン"
}
}
}
}
公式に載っている接続例は mcp-remote だけです。Claude CodeのようにHTTPで直接話せるクライアントは、同じURLとヘッダーを直接登録する形でもつなげます(公式の例ではありません)。
claude mcp add --transport http toiawase https://n8n.example.co.jp/mcp/toiawase \
--header "Authorization: Bearer ここにトークン"
登録したら「未対応は何件」と頼み、Executions タブに実行が残ることを確かめます。
リバースプロキシの設定
nginxを前に立てている場合、MCPの経路でバッファリングを切らないと、返事が届かない、途中で切れる、という症状が出ます。下は公式の例に転送先とヘッダーを足したものです。
location /mcp {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_buffering off;
gzip off;
chunked_transfer_encoding off;
proxy_set_header Connection '';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600s;
}
公式の例は location /mcp/ ですが、/mcp にするとインスタンス全体のMCP(/mcp-server/http)も同じ設定に乗ります。proxy_read_timeout は、時間のかかる道具が既定の60秒で切られないよう伸ばしています。公式のdocker-compose.yml(Traefik版)で立てている場合は、/mcp 系の経路に圧縮やバッファリングのミドルウェアを足していないかを確かめます。
エディタに正しいURLを出すため、.env に公開URLを入れます。N8N_WEBHOOK_URL は2.35.0で WEBHOOK_URL から代わった名前です。
N8N_WEBHOOK_URL=https://n8n.example.co.jp/
N8N_PROXY_HOPS=1
インスタンス全体をMCPで公開する(Instance-level MCP)
インスタンスそのものをMCPサーバーにする機能で、2.31で preview の表示が外れました。つないだクライアントは、ユーザーが見られる全ワークフローの概要を検索でき、中身を読む・実行するのは許可したワークフローだけです。ほかにワークフローやデータテーブルの作成と編集もできます(既存ワークフローの編集は2.13以降)。
- Settings を開く
- 「Instance-level MCP」を開く
- 「Enable MCP access」を押す(オーナーか管理者だけが押せる)
- Connection details の「Connect」を押す
- 「OAuth (recommended)」のタブの Your client から使うアプリを選ぶ
- 表示された手順どおりにアプリ側へ登録する
- アプリからn8nに飛ばされたら、渡す権限を選んで承認する

Server URL は /mcp-server/http で終わります。エディタのアドレスバーのURLではないので、「Connect a client」の画面からコピーします。2.32以降、承認画面で「All」「Read only」「Custom」から権限を選べるので、最初は Read only で渡します。APIキーで接続する場合は同じ画面の「API key」タブで自分用のトークンが作られます。画面を離れると伏せ字になりコピーできないので、その場で1Passwordなどに保存します。なくしたら作り直し、作り直すと前のトークンは使えなくなります。
セルフホストでは、環境変数で有効化を固定できます(2.20.0以降)。N8N_MCP_MANAGED_BY_ENV=true にすると起動のたびに値が適用され、画面のスイッチは触れなくなります。機能ごと消すなら N8N_DISABLED_MODULES=mcp です。
N8N_MCP_MANAGED_BY_ENV=true
N8N_MCP_ACCESS_ENABLED=true
有効にしただけでは、ワークフローは実行も編集もされません。ワークフローごとに許可します。
- 対象のワークフローを開く
- ワークフロー名のすぐ右にある「…」から「Settings」を開く
- 「Available in MCP」をオンにする
- 同じ「…」の「Edit description and tags」で、何をするワークフローかを書く
2.24以降はプロジェクトやフォルダ単位でもまとめて切り替えられます。外から実行できるのはトリガーが Webhook・Chat Trigger・Form Trigger・Schedule Trigger のワークフローで、本番実行では公開済みの版が動きます。実行の道具はすぐ実行IDを返して終わり、結果は別の道具で取りに行きます。
| MCP Server Trigger | Instance-level MCP | |
|---|---|---|
| 単位 | ワークフロー1本ごと | インスタンスに1つ |
| 渡すもの | 自分で作った道具だけ | 検索・実行・作成・編集などn8nが用意した道具一式 |
| 認証 | ノードごとのBearer・ヘッダー | ユーザーごとのOAuthかAPIキー |
| クライアントごとの出し分け | URLとトークンを分ければできる | できない |
| 向く使い手 | 社内の一般の人 | ワークフローを作る担当者 |
向き2:AI AgentにMCP Client Toolを付ける
今度はn8nがクライアントです。問い合わせの種類を振り分けて返信案を作るAIエージェントに、Notionの「問い合わせ対応マニュアル」を検索する道具を持たせます。
Notionのように「MCP servers」の一覧にあるサービスは、資格情報を手で作らずにつなげます。
- AI Agent ノードの「Tool +」を押す
- 検索欄に「Notion」と入れるか、「MCP Servers」の区画を開く
- Notion のサーバーを選び、求められたらサインインする
- 「Tools to include」で使わせる道具を選ぶ
一覧は頻繁に変わるので画面で確かめます。一覧にないサーバーは MCP Client Tool で手でつなぎます。
- AI Agent ノードの「Tool +」から MCP Client Tool を足す
- 「Endpoint」に相手のサーバーのURLを入れる(Notionなら
https://mcp.notion.com/mcp) - その下の「Server Transport」は「HTTP Streamable」のままにする
- Authentication で相手が求める方式を選ぶ
- 「MCP OAuth2」なら資格情報を新規作成し、「Use Dynamic Client Registration」をオンのまま保存してサインインする
- Tools to Include を「Selected」にし、検索と読み取りの道具だけを選ぶ
- AI Agent のシステムプロンプトに「返信案を作る前に、対応マニュアルを検索する道具で手順を確かめる」と書く

「Use Dynamic Client Registration」がオンならクライアントIDやシークレットは要りません。相手が対応していなければオフにして、Client ID などを手で入れます。
Tools to Include を「All」にすると、相手が道具を増やしたときに知らないうちにAIの手が増えるので、本番は「Selected」で固定します。2.17以降、AI Agentから見える道具名にはノード名が頭に付きます(例: MCP_Client_get_weather)。システムプロンプトで道具名を書くなら、ノード名を分かりやすく変えておきます。
AIを通さず決まった道具を1手順として呼ぶなら MCP Client ノードを使います。毎朝決まった検索をしてSlackに流すような定型処理向きです。
同じサービスに組み込みのノードとMCPサーバーの両方があるときの目安は、公式の比較どおりです。組み込みのノードは操作を1つに決めて値を固定でき、MCPサーバーはどの道具をどんな引数で呼ぶかまでAIに任せます。Slackへの投稿のように結果が外に出るものは組み込みのノードで固定し、調べものはMCPサーバーに任せると事故が少ないです。
セキュリティ
外からn8nを呼べるようにするのは、社内データの出入口を1つ増やすことです。次の3つは最初から守ります。
認証を付けずに公開しません。「None」だと、設定ファイルや画面共有からURLが漏れた時点で誰でも道具を呼べます。トークンは漏れたら作り直してクライアント側を差し替えます。Instance-level MCPでOAuthを使うなら、Allowed callback URLs を「Only trusted URLs」にします。既定の「All callback URLs」は、どこにでも戻れる状態です。
公開する道具を絞ります。MCP Server Triggerには必要な道具だけをぶら下げ、Instance-level MCPでは必要なワークフローだけ「Available in MCP」をオンにし、不要になったクライアントは Connected clients の「Revoke access」で切ります。
書き込み系は人の確認を挟みます。n8nのAI Agentでは、道具ごとに「Human review」を付けられます。道具の枠を開き、Human review の区画で承認の連絡先(Slack・Gmail・Microsoft Teams・n8nのChatなど)を選び、確認させたい道具をそこにつなぎます。MCP Client Toolにも付けられます。承認者には $tool.name と $tool.parameters で、何をどんな値で呼ぼうとしているかを見せます。
AIが {{ $tool.name }} を次の値で実行しようとしています。
{{ JSON.stringify($tool.parameters, null, 2) }}
MCP Server Trigger 側に書き込みを置くときは、道具には「承認待ち」のシートに行を足させるだけにし、Slackで承認してから別のワークフローで本番に反映する2段に分けています。問い合わせの本文は社外の人が書いた文なので、中に妙な指示が紛れていても、読み取りの道具しか持たせていなければ被害は出ません。
どのアプリから何ができるか(2026年10月時点)
公式ドキュメントとリリースノートで確かめた範囲だけを載せます。
| アプリ | Instance-level MCPへの接続(公式の手順) | MCP Server Triggerへの接続 |
|---|---|---|
| Claude(claude.ai) | 「Connect a client」でワンクリック設定 | 認証を None にしてもn8nへのサインインを求められる(公式に記載のある挙動) |
| Claude Desktop | Settings > Connectors > Add custom connector にServer URLを入れる | mcp-remote で中継する設定例がある |
| Claude Code | claude mcp add --transport http で登録し、/mcp で認証 | 公式に手順の記載なし(URLとヘッダーの直接登録でつなげる) |
| ChatGPT | 「Add to ChatGPT」でコネクタ作成画面に飛べる | 公式に手順の記載なし |
| Cursor・VS Code | ワンクリック設定、または設定ファイルに追記 | 公式に手順の記載なし |
| Codex・Gemini CLI | コマンドで登録し、OAuthでログイン | 公式に手順の記載なし |
| Devin・Antigravity | 2.44で接続画面に追加(WindsurfはDevinに置き換え) | 公式に手順の記載なし |
| Lovable・Mistral Vibe・Google ADK | 各アプリの手順が公式にある | 公式に手順の記載なし |
ヘッダーを付けられないクライアントからMCP Server Triggerにつなぐなら、認証を「n8n User Auth (OAuth2)」(2.27以降のv2ノード)にするか、Instance-level MCP で公開します。
できないことと、その代わり
| できないこと | 代わりの手 |
|---|---|
| MCP Server Triggerにstdioでつなぐ | mcp-remote などの中継を手元で動かす |
| Instance-level MCPで、クライアントごとに見せるワークフローを分ける | 範囲ごとにMCP Server Triggerのワークフローを分け、URLとトークンを別にする |
| Instance-level MCPから、複数段のフォームや人の承認を挟むワークフローを実行する | 承認はAI AgentのHuman reviewか、Slackで承認する別ワークフローに分ける |
| Instance-level MCPの実行で結果をその場で受け取る | 実行IDで取り直す。すぐ答えが要る処理はMCP Server Triggerの道具にする |
| キューモードでWebhook用レプリカを複数にしたまま使う | /mcp で始まる経路を1台のWebhook用レプリカに寄せる |
よく詰まるところ
| 症状 | 原因 | 直し方 |
|---|---|---|
| 昨日まで動いていたのに、つながらない | Test URLを登録していた | 公開して Production URL を登録し直す |
| つながるが返事が来ない、途中で切れる | nginxがMCPの経路をバッファしている | proxy_buffering off などを /mcp の経路に入れる |
| 401が返る | ヘッダー名や Bearer の書き方が資格情報と合っていない | Authorization: Bearer トークン の形にし、Header Authならヘッダー名を一致させる |
| 道具があるのに使われない | 説明文にいつ使うかが書いていない | 何を返す・いつ使う・引数に何を入れる、を書く |
| 件数が常に1になる | Options に「Return only First Matching Row」を足してオンにしている | Options から外す。4.5より前の古い版のノードでは「When Filter Has Multiple Matches」を「Return All Matches」にする |
Workflow is not active and cannot be executed が返る | 呼ぶサブワークフローを公開していない | サブワークフローを公開する |
| claude.aiで認証をNoneにしたのにサインインを求められる | claude.aiは同じドメインのMCPがn8nのユーザー認証を使うと見なす | Bearer認証を付けるか、Instance-level MCPのOAuthでつなぐ |
| 承認画面で「You do not have sufficient permissions to authorize this request」 | Instance-level MCPが有効になっていない | オーナーか管理者が「Enable MCP access」を押してつなぎ直す |
| Instance-level MCPでワークフローが実行できない | 「Available in MCP」がオフ | ワークフローの Settings でオンにする |
| Claude Desktopで接続できない | エディタのURLを貼っている | /mcp-server/http で終わる Server URL を貼る |
| WAFやロードバランサーの後ろだけ失敗する | MCPのヘッダーが落とされている | MCP-Protocol-Version・Mcp-Method・Mcp-Name を通す |
ノードのURLが http://localhost:5678 になっている | 公開URLを渡していない | N8N_WEBHOOK_URL と N8N_PROXY_HOPS=1 を入れて再起動する |
次にやること
問い合わせの種類を振り分けて返信案を作るエージェントの組み方は「n8nでAIエージェントを作る:ChatGPT・Claude・Geminiをつなぐ」にあります。MCPに対応していないサービスは「n8nで外部サービスとつなぐ:Webhook・HTTP Request・API」の手順でHTTP Requestから呼び、それをサブワークフローにしてMCPの道具にします。Web版のクライアントからつなぐには独自ドメインとHTTPSが前提なので、まだ手元で動かしているなら「n8nをセルフホストで導入する:Docker ComposeでVPSに立て、独自ドメインとHTTPSで使う」で土台を作ります。