n8n-mcp-orchestrator について
n8n-mcp-orchestratorは、n8nのMCP連携を使ったAI自動化やエージェントワークフローの設計を解説するスキルです。n8nのワークフローをツールとして公開する方法と、外部MCPサーバーを呼び出す方法を扱います。
主な機能
- 01n8nワークフローをMCPツールとして公開
- 02ワークフローから外部MCPサーバーのツールを呼び出す
- 03認証とツールパラメーターの設定
- 04自動化ワークフローでMCP呼び出しを連結
- 05マルチエージェントのワークフローパターンを調整
活用シーン
- 01AIエージェントから業務ワークフローを起動
- 02スケジュール実行の自動化で外部MCPツールを利用
- 03複数段階または複数エージェントの処理を調整
MCP 対応
MCPの双方向利用を解説します。n8nワークフローはツールを公開するMCPサーバーにも、外部MCPサーバーのツールを呼び出すクライアントにもなり、ワークフロー内のリソースとプロンプトも扱います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ manutej/ crush-mcp-server --skill n8n-mcp-orchestratorインストール後、Claude Code で/n8n-mcp-orchestratorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
EXAMPLES.mdmcp-client-patterns.mdmcp-server-setup.mdREADME.mdSUMMARY.txt詳細
n8n MCP オーケストレーター
n8n の Model Context Protocol(MCP)連携を使用して、AI エージェントとワークフローをオーケストレーションするための包括的なスキルです。このスキルにより、双方向の MCP パターン、エージェント型ワークフローの自動化、Claude Code との連携による本番環境対応の AI 搭載システムを実現できます。
このスキルを使用する場面
次のような場合にこのスキルを使用してください。
- n8n で AI 搭載の自動化ワークフローを構築する
- n8n ワークフローを AI エージェント(Claude Code、Claude Desktop)向けのツールとして公開する
- n8n ワークフローから外部 MCP サーバーを利用する
- マルチエージェントシステムやエージェント型ワークフローをオーケストレーションする
- n8n をバックエンドとする、ツールを使用する AI エージェントを作成する
- Claude Code をビジネスプロセスの自動化と連携する
- MCP リソースを活用して、コンテキストを認識する自動化を構築する
- 複数の AI エージェントにまたがる複雑なワークフローを調整する
- 本番環境対応の AI オーケストレーションパイプラインを開発する
- 双方向の MCP 通信パターンを実装する
- ワークフローオーケストレーションを備えた自律型エージェントシステムを作成する
- 400 以上のサービス連携を活用した AI ファーストの自動化を構築する
コアコンセプト
Model Context Protocol(MCP)
Model Context Protocol は、AI アシスタントを外部システムに接続するためのオープン標準です。
- 双方向通信:クライアントとサーバーの双方からリクエストを開始できます
- リソース管理:データとコンテキストをリソースとして公開します
- ツールの呼び出し:AI エージェントがツール(関数/ワークフロー)を実行できます
- プロンプトテンプレート:AI システムに構造化されたプロンプトを提供します
- セキュリティ:認証と認可のパターンを標準で備えています
- スケーラビリティ:本番環境での AI オーケストレーション向けに設計されています
MCP アーキテクチャの構成要素
1. MCP サーバー
- AI クライアントに機能(ツール、リソース、プロンプト)を公開します
- 単独のサービスにも、アプリケーションに組み込むこともできます
- 認証、レート制限、セキュリティを処理します
- n8n ワークフローを MCP サーバーとして動作させることができます
2. MCP クライアント
- MCP サーバーに接続し、その機能を呼び出します
- Claude Code や Claude Desktop などの AI アシスタントが該当します
- n8n ワークフローを MCP クライアントとして動作させることができます
3. リソース
- MCP サーバーが公開するデータソースとコンテキストです
- 例:ドキュメント、データベースのレコード、API の応答
- AI エージェントはコンテキストを得るためにリソースを読み取ることができます
4. ツール
- AI エージェントが呼び出せる関数/ワークフローです
- パラメーターを受け取り、結果を返します
- n8n ワークフローを AI から呼び出せるツールにできます
5. プロンプト
- AI とのやり取りに使用する構造化されたプロンプトテンプレートです
- コンテキスト、指示、変数が含まれます
- 特定の状況における AI の振る舞いを導きます
n8n の双方向 MCP 機能
MCP サーバーとしての n8n(ワークフローをツールとして公開):
- MCP Server Trigger ノードは、AI から呼び出されるとワークフローを起動します
- ワークフローが Claude Code から呼び出せるツールになります
- AI エージェントが複雑なビジネスプロセスを自動化できるようにします
- AI クライアントに構造化データを返します
MCP クライアントとしての n8n(外部 MCP サーバーを呼び出す):
- MCP Client Tool ノードが外部 MCP サーバーを呼び出します
- 他の MCP 対応サービスのツールを呼び出します
- 1 つのワークフローで複数の MCP サーバーをオーケストレーションします
- 複雑な自動化チェーンを構築します
n8n の主要な MCP ノード
1. MCP Server Trigger
- MCP ツール呼び出しのためのワークフローのエントリーポイントです
- AI エージェントからパラメーターを受け取ります
- 呼び出し元の AI クライアントに結果を返します
- 認証と検証に対応しています
2. MCP Client Tool
- 外部 MCP サーバーのツールを呼び出します
- リモートツールにパラメーターを渡します
- 応答とエラーを処理します
- 複数の MCP 呼び出しを連結します
MCP サーバーとしての n8n
ワークフローを AI エージェントのツールとして公開する
MCP Server Trigger を含むワークフローを作成すると、そのワークフローは AI エージェントが呼び出せるツールになります。
アーキテクチャパターン:
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code / Claude Desktop │
│ │
│ Agent decides to use tool: │
│ "I need to create a support ticket for this bug" │
└─────────────────────────────────────────────────────────────────┘
│
↓ MCP Tool Invocation
┌─────────────────────────────────────────────────────────────────┐
│ n8n Workflow (MCP Server) │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ MCP Server Trigger │ │
│ │ Tool: "create_support_ticket" │ │
│ │ Receives: {title, description, priority} │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ HTTP Request: Call Jira API │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Slack Notification: Notify team │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Respond to MCP: Return ticket ID │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
↓ MCP Response
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code │
│ │
│ Receives: {ticketId: "JIRA-12345", status: "created"} │
│ Continues conversation with user │
└─────────────────────────────────────────────────────────────────┘
MCP サーバーのトリガー設定
基本設定:
-
n8n で新しいワークフローを作成します
-
エントリポイントとしてMCP Server Trigger ノードを追加します
-
ツールの定義を設定します:
- ツール名:一意の識別子(例:「create_support_ticket」)
- 説明:AI がいつ使用すべきかを理解できる明確な説明
- パラメーター:入力スキーマを定義します(JSON Schema 形式)
- 認証:任意の認証設定
-
ワークフローのロジックを構築します:リクエストを処理するノードを追加します
-
レスポンスを返す:最後のノードの出力が MCP のレスポンスになります
MCP Server Trigger のパラメーター:
{
"toolName": "create_support_ticket",
"description": "Create a support ticket in Jira with automatic team notification",
"parameters": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Brief ticket title"
},
"description": {
"type": "string",
"description": "Detailed problem description"
},
"priority": {
"type": "string",
"enum": ["low", "medium", "high", "critical"],
"description": "Ticket priority level"
},
"component": {
"type": "string",
"description": "System component affected"
}
},
"required": ["title", "description"]
}
}
レスポンス形式
ワークフローの最後のノードの出力が AI エージェントに返されます:
{
"success": true,
"ticketId": "JIRA-12345",
"url": "https://company.atlassian.net/browse/JIRA-12345",
"assignee": "[email protected]",
"createdAt": "2025-10-20T10:30:00Z"
}
認証パターン
1. API キー認証
{
"authenticationType": "apiKey",
"apiKeyHeader": "X-API-Key",
"requiredScopes": ["workflows:execute"]
}
2. OAuth 2.0
{
"authenticationType": "oauth2",
"authorizationUrl": "https://auth.company.com/oauth/authorize",
"tokenUrl": "https://auth.company.com/oauth/token",
"scopes": ["workflows:read", "workflows:execute"]
}
3. 認証なし(内部使用のみ)
{
"authenticationType": "none"
}
MCP クライアントとしての n8n
外部 MCP サーバーの利用
MCP Client Tool ノードを使うと、n8n のワークフローから外部 MCP サーバーを呼び出し、そのツールを使用できます。
アーキテクチャパターン:
┌─────────────────────────────────────────────────────────────────┐
│ n8n Workflow │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Schedule Trigger: Every day at 9am │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ MCP Client Tool │ │
│ │ Server: "analytics-mcp-server" │ │
│ │ Tool: "generate_daily_report" │ │
│ │ Params: {date: "today"} │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
↓ MCP Request
┌─────────────────────────────────────────────────────────────────┐
│ External MCP Server │
│ (Analytics Service) │
│ │
│ Processes request, generates report, returns data │
└─────────────────────────────────────────────────────────────────┘
│
↓ MCP Response
┌─────────────────────────────────────────────────────────────────┐
│ n8n Workflow (continued) │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Email: Send report to stakeholders │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
MCP Client Tool の設定
基本設定:
-
ワークフローにMCP Client Tool ノードを追加します
-
MCP サーバーへの接続を設定します:
- サーバー URL:MCP サーバーのエンドポイント
- 認証:API キー、OAuth、または認証なし
- タイムアウト:リクエストのタイムアウト(デフォルト:30s)
-
ツールを選択します:MCP サーバーで利用可能なツールから選びます
-
パラメーターを指定します:ワークフローのデータをツールのパラメーターにマッピングします
-
レスポンスを処理します:後続のノードで返されたデータを処理します
MCP Client Tool の設定:
{
"serverUrl": "https://mcp.analytics-service.com",
"authentication": {
"type": "apiKey",
"apiKey": "{{$credentials.analyticsApiKey}}"
},
"tool": "generate_daily_report",
"parameters": {
"date": "{{DateTime.now().toISODate()}}",
"metrics": ["revenue", "users", "engagement"],
"format": "json"
},
"timeout": 60000
}
利用可能なツールの検出
MCP サーバーはプロトコルを通じて、利用可能なツールを公開します:
{
"tools": [
{
"name": "generate_daily_report",
"description": "Generate daily analytics report",
"parameters": {
"type": "object",
"properties": {
"date": {"type": "string"},
"metrics": {"type": "array"},
"format": {"type": "string"}
}
}
},
{
"name": "query_metrics",
"description": "Query specific metrics",
"parameters": {
"type": "object",
"properties": {
"metric": {"type": "string"},
"startDate": {"type": "string"},
"endDate": {"type": "string"}
}
}
}
]
}
Claude Code との統合
Claude Code を n8n のワークフローに接続する
前提条件:
- n8n インスタンスが稼働していること(セルフホストまたはクラウド)
- MCP Server Trigger が設定された n8n ワークフロー
- MCP クライアント機能を備えた Claude Code
設定手順:
1. n8n MCP サーバーのワークフローを作成
Workflow: "create_task"
┌──────────────────────────────────────┐
│ MCP Server Trigger │
│ Tool: create_task │
│ Params: title, description, due_date │
└──────────────────────────────────────┘
↓
┌──────────────────────────────────────┐
│ HTTP Request: POST to Todoist API │
└──────────────────────────────────────┘
↓
┌──────────────────────────────────────┐
│ Return: Task created confirmation │
└──────────────────────────────────────┘
2. n8n MCP サーバーの URL を取得
n8n は次の URL で MCP サーバーを公開します:
https://your-n8n-instance.com/mcp
3. Claude Code の MCP クライアントを設定
mcp_config.json に追加します:
{
"mcpServers": {
"n8n-workflows": {
"url": "https://your-n8n-instance.com/mcp",
"apiKey": "your-n8n-api-key",
"description": "n8n workflow automation tools",
"tools": [
"create_task",
"send_email",
"create_support_ticket",
"generate_report"
]
}
}
}
4. Claude Code で使用
Claude Code は n8n のツールを自動的に検出して使用します:
User: "Create a task to review the PR tomorrow at 2pm"
Claude Code:
- Recognizes create_task tool from n8n
- Invokes: create_task(
title="Review PR",
description="Code review for authentication feature",
due_date="2025-10-21T14:00:00Z"
)
- n8n workflow executes
- Returns task confirmation
- Claude responds: "Task created in Todoist: Review PR (tomorrow at 2pm)"
Claude Code ↔ n8n の双方向統合
パターン 1:Claude が n8n のワークフローをトリガー
Claude Code → MCP Tool Call → n8n MCP Server → Workflow executes
パターン 2:n8n が MCP 経由で Claude を呼び出す
n8n Workflow → MCP Client Tool → Claude API → AI processing → Response
複合パターン:エージェント型ワークフロー
1. User asks Claude to analyze sales data
2. Claude calls n8n tool: get_sales_data()
3. n8n retrieves data from database
4. Claude analyzes data
5. Claude calls n8n tool: generate_report(analysis)
6. n8n creates PDF report and emails stakeholders
7. Claude confirms completion to user
エージェント型ワークフローのパターン
パターン 1:複数ステップのエージェントワークフロー
シナリオ: カスタマーサポートチケットの処理
┌─────────────────────────────────────────────────────────────────┐
│ User: "Customer reports login issue" │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code (Agent) │
│ 1. Calls: create_support_ticket(issue_type="login") │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ n8n Workflow 1: Create Ticket │
│ - Create Jira ticket │
│ - Notify support team in Slack │
│ - Return ticket ID │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code (Agent) │
│ 2. Calls: search_knowledge_base(query="login issues") │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ n8n Workflow 2: Knowledge Search │
│ - Query internal docs │
│ - Search past tickets │
│ - Return relevant solutions │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code (Agent) │
│ 3. Analyzes solutions │
│ 4. Calls: update_ticket(id, suggested_solution) │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ n8n Workflow 3: Update Ticket │
│ - Update Jira with solution │
│ - Auto-assign to engineer if complex │
│ - Send email to customer with workaround │
└─────────────────────────────────────────────────────────────────┘
パターン 2:マルチエージェントのオーケストレーション
シナリオ: 複数の専門エージェントを使ったコンテンツ作成パイプライン
┌─────────────────────────────────────────────────────────────────┐
│ Orchestrator Agent (Claude Code) │
│ "Create a blog post about our new feature" │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────┼─────────────────┐
↓ ↓ ↓
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Research │ │ Writing │ │ SEO │
│ Agent │ │ Agent │ │ Agent │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
↓ MCP ↓ MCP ↓ MCP
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ n8n: Gather │ │ n8n: Generate│ │ n8n: Optimize│
│ data │ │ content │ │ for search │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
└─────────────────┼─────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ n8n: Publishing Workflow │
│ - Format content │
│ - Upload images to CDN │
│ - Publish to CMS │
│ - Share on social media │
│ - Notify marketing team │
└─────────────────────────────────────────────────────────────────┘
パターン 3:自律エージェントのループ
シナリオ: 継続的な監視と修復
┌─────────────────────────────────────────────────────────────────┐
│ n8n: Monitoring Workflow (runs every 5 minutes) │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 1. Check system health metrics │ │
│ │ 2. If anomaly detected → Trigger MCP call to Claude │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
↓ Anomaly detected
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code (Remediation Agent) │
│ 1. Analyze metrics and logs │
│ 2. Determine root cause │
│ 3. Call: execute_remediation(action) │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ n8n: Remediation Workflow │
│ - Restart service if needed │
│ - Scale resources │
│ - Clear cache │
│ - Create incident ticket │
│ - Alert on-call engineer │
│ - Return results │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code │
│ - Verify remediation successful │
│ - Document incident │
│ - Call: update_incident_log() │
└─────────────────────────────────────────────────────────────────┘
ツールの構成と連鎖
パターン:ツールの逐次呼び出し
複数の MCP ツール呼び出しを連鎖させて、複雑な自動化を構築します:
// Claude Code orchestrates sequence
async function processCustomerOrder(orderId) {
// Step 1: Get order details
const order = await mcpCall('n8n', 'get_order', { orderId });
// Step 2: Validate inventory
const inventory = await mcpCall('n8n', 'check_inventory', {
items: order.items
});
if (!inventory.available) {
// Step 3a: Order out of stock items
await mcpCall('n8n', 'create_purchase_order', {
items: inventory.missing
});
// Step 3b: Notify customer of delay
await mcpCall('n8n', 'send_email', {
to: order.customerEmail,
template: 'order_delayed',
data: { estimatedDate: inventory.restockDate }
});
} else {
// Step 3: Process payment
const payment = await mcpCall('n8n', 'process_payment', {
orderId,
amount: order.total
});
// Step 4: Create shipment
await mcpCall('n8n', 'create_shipment', {
orderId,
address: order.shippingAddress
});
// Step 5: Send confirmation
await mcpCall('n8n', 'send_email', {
to: order.customerEmail,
template: 'order_confirmed',
data: { trackingNumber: payment.trackingNumber }
});
}
}
パターン:ツールの並列実行
効率を高めるため、複数のツールを同時に実行します:
// Claude Code executes in parallel
async function enrichCustomerProfile(customerId) {
const [
orders,
supportTickets,
socialData,
emailEngagement
] = await Promise.all([
mcpCall('n8n', 'get_customer_orders', { customerId }),
mcpCall('n8n', 'get_support_history', { customerId }),
mcpCall('n8n', 'get_social_data', { customerId }),
mcpCall('n8n', 'get_email_metrics', { customerId })
]);
// Combine all data
const profile = {
totalSpent: orders.reduce((sum, o) => sum + o.total, 0),
supportIssues: supportTickets.length,
sentimentScore: socialData.sentiment,
emailEngagement: emailEngagement.averageClickRate
};
// Update CRM
await mcpCall('n8n', 'update_crm', {
customerId,
profile
});
}
リソース管理
MCP 経由でリソースを公開する
リソースを使うと、ツールを呼び出さずに AI エージェントにコンテキストを提供できます。
リソースの種類:
- ドキュメント:Markdown、テキスト、PDF
- データ:JSON、CSV、構造化データ
- コンテキスト:設定、メタデータ
- テンプレート:プロンプトテンプレート、コードスニペット
例:API ドキュメントをリソースとして公開
{
"resources": [
{
"uri": "resource://api-docs/authentication",
"name": "Authentication API Docs",
"description": "Complete authentication API documentation",
"mimeType": "text/markdown",
"content": "# Authentication API\n\n## Endpoints\n\n### POST /auth/login..."
},
{
"uri": "resource://api-docs/users",
"name": "Users API Docs",
"description": "User management API documentation",
"mimeType": "text/markdown",
"content": "# Users API\n\n## Endpoints\n\n### GET /users..."
}
]
}
リソースを提供する n8n ワークフロー:
┌──────────────────────────────────────┐
│ MCP Server Trigger │
│ Resource: api-docs/* │
└──────────────────────────────────────┘
↓
┌──────────────────────────────────────┐
│ Switch: Route by resource URI │
└──────────────────────────────────────┘
↓
┌──────────────────────────────────────┐
│ HTTP Request: Fetch from docs repo │
└──────────────────────────────────────┘
↓
┌──────────────────────────────────────┐
│ Format and return markdown │
└──────────────────────────────────────┘
AI ワークフローでリソースを使用する
Claude Code はコンテキストを得るためにリソースを読み取ることができます:
User: "How do I authenticate with the API?"
Claude Code:
1. Reads resource: resource://api-docs/authentication
2. Analyzes documentation
3. Provides answer with code examples
本番環境へのデプロイ
n8n MCP サーバーのホスティング
デプロイの選択肢:
1. セルフホスト版 n8n
# docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
- N8N_MCP_ENABLED=true
- N8N_MCP_PORT=8080
volumes:
- n8n_data:/home/node/.n8n
restart: unless-stopped
volumes:
n8n_data:
2. n8n Cloud
- n8n のフルマネージドホスティング
- MCP の組み込みサポート
- 自動スケーリング
- SSL/TLS を含む
3. Kubernetes へのデプロイ
# n8n-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: n8n-mcp-server
spec:
replicas: 3
selector:
matchLabels:
app: n8n
template:
metadata:
labels:
app: n8n
spec:
containers:
- name: n8n
image: n8nio/n8n:latest
ports:
- containerPort: 5678
name: http
- containerPort: 8080
name: mcp
env:
- name: N8N_MCP_ENABLED
value: "true"
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
セキュリティのベストプラクティス
1. 認証
{
"mcp": {
"authentication": {
"type": "oauth2",
"provider": "okta",
"clientId": "${OAUTH_CLIENT_ID}",
"clientSecret": "${OAUTH_CLIENT_SECRET}",
"authorizationUrl": "https://company.okta.com/oauth2/v1/authorize",
"tokenUrl": "https://company.okta.com/oauth2/v1/token"
}
}
}
2. レート制限
{
"mcp": {
"rateLimiting": {
"enabled": true,
"maxRequests": 100,
"windowMs": 60000,
"message": "Too many requests, please try again later"
}
}
}
3. IP の許可リスト
{
"mcp": {
"ipWhitelist": [
"10.0.0.0/8",
"172.16.0.0/12",
"192.168.1.100"
]
}
}
4. HTTPS のみ
# nginx.conf
server {
listen 443 ssl http2;
server_name mcp.company.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
proxy_pass http://n8n:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
監視とデバッグ
ワークフロー実行のログ記録:
// Add to n8n workflow
{
"nodes": [
{
"name": "Log MCP Request",
"type": "n8n-nodes-base.function",
"parameters": {
"functionCode": `
const mcpRequest = $input.item.json;
console.log('MCP Tool Invoked:', {
tool: mcpRequest.tool,
parameters: mcpRequest.parameters,
timestamp: new Date().toISOString(),
clientId: mcpRequest.clientId
});
return { json: mcpRequest };
`
}
}
]
}
エラー処理:
// MCP error response format
{
"error": {
"code": "INVALID_PARAMETERS",
"message": "Missing required parameter: customerId",
"details": {
"parameter": "customerId",
"expected": "string",
"received": "undefined"
}
}
}
監視メトリクス:
# Prometheus metrics for n8n MCP
metrics:
- mcp_tool_invocations_total
- mcp_tool_execution_duration_seconds
- mcp_tool_errors_total
- mcp_active_connections
- mcp_requests_per_second
ベストプラクティス
MCP サーバーの設計
- わかりやすいツール名:動詞-名詞の形式を使用します(create_ticket、get_user)
- 詳細な説明:各ツールをいつ使用するかを AI が理解できるようにします
- パラメーターの検証:入力パラメーターは必ず検証します
- 構造化データの返却:一貫性のある JSON レスポンス形式を使用します
- 適切なエラー処理:意味のあるエラーメッセージを返します
- ツールのバージョン管理:互換性を損なう変更に備えてバージョン管理に対応します
- すべてを文書化:例と使用ガイドを提供します
MCP クライアントの使用
- コネクションプーリング:MCP クライアント接続を再利用します
- タイムアウトの設定:適切なタイムアウトを設定します
- 再試行ロジック:指数バックオフを実装します
- エラー処理:MCP エラーを捕捉して処理します
- レスポンスのキャッシュ:適切な場合は、コストの高いツール呼び出しをキャッシュします
- 並列実行:独立した呼び出しには Promise.all を使用します
- ログ記録:デバッグのために、すべての MCP インタラクションを記録します
ワークフローの最適化
- ツール呼び出しを最小限に:可能な場合は操作をまとめて実行します
- Webhook の使用:長時間実行される操作に使用します
- 非同期パターン:時間のかかる操作で処理をブロックしないようにします
- リソース制限:メモリと CPU の制限を設定します
- 監視:実行時間とエラーを追跡します
- テスト:MCP ツールを個別にテストします
- ドキュメント:ツールのドキュメントを最新の状態に保ちます
セキュリティガイドライン
- 認証:本番環境では必ず認証を必須にします
- 認可:ロールベースのアクセス制御を実装します
- 入力検証:すべての入力をサニタイズします
- レート制限:不正利用を防止します
- 監査ログ:すべてのツール呼び出しを記録します
- シークレット管理:環境変数を使用します
- HTTPS:本番環境では必ず TLS を使用します
トラブルシューティング
よくある問題
Claude Code にツールが表示されない
考えられる原因:
- MCP サーバーが mcp_config.json に登録されていない
- ツールの説明がない、または不明瞭
- 認証に失敗している
- n8n ワークフローが有効化されていない
解決方法:
- MCP サーバーの URL が正しいことを確認します
- 認証情報を確認します
- n8n でワークフローが有効になっていることを確認します
- ツール一覧を更新するために Claude Code を再起動します
MCP ツールの呼び出しに失敗する
考えられる原因:
- パラメーターが無効
- タイムアウト
- n8n ワークフローのエラー
- 認証の有効期限切れ
解決方法:
- パラメーターの型がスキーマと一致していることを確認します
- 設定のタイムアウトを延長します
- n8n ワークフローの実行ログを確認します
- 認証トークンを更新します
ツールの実行が遅い
考えられる原因:
- ワークフローが複雑
- 外部 API の応答遅延
- データベースクエリ
- ネットワーク遅延
解決方法:
- ワークフローのロジックを最適化します
- 繰り返し実行されるクエリにキャッシュを追加します
- 非同期パターンを使用します
- n8n インスタンスをスケールします
認証エラー
考えられる原因:
- API キーの有効期限切れ
- 認証情報の誤り
- IP アドレスが許可リストに登録されていない
- OAuth トークンの有効期限切れ
解決方法:
- API キーを再生成します
- 設定の認証情報を確認します
- IP アドレスを許可リストに追加します
- OAuth トークンを更新します
高度なパターン
パターン:イベント駆動アーキテクチャ
┌─────────────────────────────────────────────────────────────────┐
│ External System (e.g., Stripe) │
│ Event: payment_succeeded │
└─────────────────────────────────────────────────────────────────┘
│
↓ Webhook
┌─────────────────────────────────────────────────────────────────┐
│ n8n: Webhook Trigger │
│ 1. Receive payment event │
│ 2. Call MCP: analyze_payment_risk() │
└─────────────────────────────────────────────────────────────────┘
│
↓ MCP Call
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code (Risk Analysis Agent) │
│ - Analyze transaction pattern │
│ - Check customer history │
│ - Assess fraud risk │
│ - Return risk score │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ n8n: Risk-Based Routing │
│ IF risk_score > 0.7: │
│ - Flag for manual review │
│ - Notify fraud team │
│ ELSE: │
│ - Auto-approve │
│ - Trigger fulfillment │
└─────────────────────────────────────────────────────────────────┘
パターン:人間が介在するループ
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code: Draft email response │
└─────────────────────────────────────────────────────────────────┘
│
↓ Call MCP tool
┌─────────────────────────────────────────────────────────────────┐
│ n8n: request_human_approval(draft) │
│ 1. Send draft to manager via Slack │
│ 2. Wait for approval (webhook) │
│ 3. Return approval status │
└─────────────────────────────────────────────────────────────────┘
│
↓ Approval received
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code: Send approved email │
│ Call: send_email(approved_draft) │
└─────────────────────────────────────────────────────────────────┘
パターン:マルチモーダル処理
┌─────────────────────────────────────────────────────────────────┐
│ User uploads image to chat │
└─────────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code: Analyze image │
│ - Extract text (OCR) │
│ - Detect objects │
│ - Identify action items │
└─────────────────────────────────────────────────────────────────┘
│
↓ For each action item
┌─────────────────────────────────────────────────────────────────┐
│ n8n MCP Tools: │
│ - create_task(item) │
│ - send_notification(team) │
│ - update_dashboard(metrics) │
└─────────────────────────────────────────────────────────────────┘
クイックリファレンス
n8n の必須 MCP ノード
MCP Server Trigger
- ワークフローを AI から呼び出し可能なツールとして公開します
- ツール名、説明、パラメーターを定義します
- ワークフローの出力を AI クライアントに返します
MCP Client Tool
- 外部 MCP サーバーを呼び出します
- サーバー URL とツール名を指定します
- パラメーターを渡し、レスポンスを処理します
よく使われるツールパターン
リソースの作成
{
"tool": "create_resource",
"parameters": {
"type": "string",
"data": "object"
},
"returns": {
"id": "string",
"status": "string"
}
}
リソースの更新
{
"tool": "update_resource",
"parameters": {
"id": "string",
"updates": "object"
},
"returns": {
"success": "boolean",
"resource": "object"
}
}
データのクエリ
{
"tool": "query_data",
"parameters": {
"filters": "object",
"limit": "number"
},
"returns": {
"data": "array",
"total": "number"
}
}
参考資料
- n8n ドキュメント:https://docs.n8n.io
- MCP 仕様:https://modelcontextprotocol.io
- n8n MCP ノードガイド:https://docs.n8n.io/integrations/builtin/core-nodes/mcp/
- Claude Code MCP 統合:https://docs.anthropic.com/claude/docs/mcp
- n8n コミュニティ:https://community.n8n.io
- MCP サンプルリポジトリ:https://github.com/anthropics/model-context-protocol
スキルのバージョン:1.0.0 最終更新日:2025年10月 スキルのカテゴリー:AI オーケストレーション、ワークフロー自動化、MCP 統合 対応環境:n8n、Claude Code、Claude Desktop、MCP Protocol