Skip to main content
Glama

n8n-MCP

by 88-888
webhook-workflows.tsβ€’8.1 kB
/** * Webhook Workflow Configuration * * Provides configuration and setup instructions for webhook workflows * required for integration testing. * * These workflows must be created manually in n8n and activated because * the n8n API doesn't support workflow activation. */ import { Workflow, WorkflowNode } from '../../../../src/types/n8n-api'; export interface WebhookWorkflowConfig { name: string; description: string; httpMethod: 'GET' | 'POST' | 'PUT' | 'DELETE'; path: string; nodes: Array<Partial<WorkflowNode>>; connections: Record<string, any>; } /** * Configuration for required webhook workflows */ export const WEBHOOK_WORKFLOW_CONFIGS: Record<string, WebhookWorkflowConfig> = { GET: { name: '[MCP-TEST] Webhook GET', description: 'Pre-activated webhook for GET method testing', httpMethod: 'GET', path: 'mcp-test-get', nodes: [ { name: 'Webhook', type: 'n8n-nodes-base.webhook', typeVersion: 2, position: [250, 300], parameters: { httpMethod: 'GET', path: 'mcp-test-get', responseMode: 'lastNode', options: {} } }, { name: 'Respond to Webhook', type: 'n8n-nodes-base.respondToWebhook', typeVersion: 1.1, position: [450, 300], parameters: { options: {} } } ], connections: { Webhook: { main: [[{ node: 'Respond to Webhook', type: 'main', index: 0 }]] } } }, POST: { name: '[MCP-TEST] Webhook POST', description: 'Pre-activated webhook for POST method testing', httpMethod: 'POST', path: 'mcp-test-post', nodes: [ { name: 'Webhook', type: 'n8n-nodes-base.webhook', typeVersion: 2, position: [250, 300], parameters: { httpMethod: 'POST', path: 'mcp-test-post', responseMode: 'lastNode', options: {} } }, { name: 'Respond to Webhook', type: 'n8n-nodes-base.respondToWebhook', typeVersion: 1.1, position: [450, 300], parameters: { options: {} } } ], connections: { Webhook: { main: [[{ node: 'Respond to Webhook', type: 'main', index: 0 }]] } } }, PUT: { name: '[MCP-TEST] Webhook PUT', description: 'Pre-activated webhook for PUT method testing', httpMethod: 'PUT', path: 'mcp-test-put', nodes: [ { name: 'Webhook', type: 'n8n-nodes-base.webhook', typeVersion: 2, position: [250, 300], parameters: { httpMethod: 'PUT', path: 'mcp-test-put', responseMode: 'lastNode', options: {} } }, { name: 'Respond to Webhook', type: 'n8n-nodes-base.respondToWebhook', typeVersion: 1.1, position: [450, 300], parameters: { options: {} } } ], connections: { Webhook: { main: [[{ node: 'Respond to Webhook', type: 'main', index: 0 }]] } } }, DELETE: { name: '[MCP-TEST] Webhook DELETE', description: 'Pre-activated webhook for DELETE method testing', httpMethod: 'DELETE', path: 'mcp-test-delete', nodes: [ { name: 'Webhook', type: 'n8n-nodes-base.webhook', typeVersion: 2, position: [250, 300], parameters: { httpMethod: 'DELETE', path: 'mcp-test-delete', responseMode: 'lastNode', options: {} } }, { name: 'Respond to Webhook', type: 'n8n-nodes-base.respondToWebhook', typeVersion: 1.1, position: [450, 300], parameters: { options: {} } } ], connections: { Webhook: { main: [[{ node: 'Respond to Webhook', type: 'main', index: 0 }]] } } } }; /** * Print setup instructions for webhook workflows */ export function printSetupInstructions(): void { console.log(` ╔════════════════════════════════════════════════════════════════╗ β•‘ WEBHOOK WORKFLOW SETUP REQUIRED β•‘ ╠════════════════════════════════════════════════════════════════╣ β•‘ β•‘ β•‘ Integration tests require 4 pre-activated webhook workflows: β•‘ β•‘ β•‘ β•‘ 1. Create workflows manually in n8n UI β•‘ β•‘ 2. Use the configurations shown below β•‘ β•‘ 3. ACTIVATE each workflow in n8n UI β•‘ β•‘ 4. Copy workflow IDs to .env file β•‘ β•‘ β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• Required workflows: `); Object.entries(WEBHOOK_WORKFLOW_CONFIGS).forEach(([method, config]) => { console.log(` ${method} Method: Name: ${config.name} Path: ${config.path} .env variable: N8N_TEST_WEBHOOK_${method}_ID Workflow Structure: 1. Webhook node (${method} method, path: ${config.path}) 2. Respond to Webhook node After creating: 1. Save the workflow 2. ACTIVATE the workflow (toggle in UI) 3. Copy the workflow ID 4. Add to .env: N8N_TEST_WEBHOOK_${method}_ID=<workflow-id> `); }); console.log(` See docs/local/integration-testing-plan.md for detailed instructions. `); } /** * Generate workflow JSON for a webhook workflow * * @param method - HTTP method * @returns Partial workflow ready to create */ export function generateWebhookWorkflowJson( method: 'GET' | 'POST' | 'PUT' | 'DELETE' ): Partial<Workflow> { const config = WEBHOOK_WORKFLOW_CONFIGS[method]; return { name: config.name, nodes: config.nodes as any, connections: config.connections, active: false, // Will need to be activated manually settings: { executionOrder: 'v1' }, tags: ['mcp-integration-test', 'webhook-test'] }; } /** * Export all webhook workflow JSONs * * Returns an object with all 4 webhook workflow configurations * ready to be created in n8n. * * @returns Object with workflow configurations */ export function exportAllWebhookWorkflows(): Record<string, Partial<Workflow>> { return { GET: generateWebhookWorkflowJson('GET'), POST: generateWebhookWorkflowJson('POST'), PUT: generateWebhookWorkflowJson('PUT'), DELETE: generateWebhookWorkflowJson('DELETE') }; } /** * Get webhook URL for a given n8n instance and HTTP method * * @param n8nUrl - n8n instance URL * @param method - HTTP method * @returns Webhook URL */ export function getWebhookUrl( n8nUrl: string, method: 'GET' | 'POST' | 'PUT' | 'DELETE' ): string { const config = WEBHOOK_WORKFLOW_CONFIGS[method]; const baseUrl = n8nUrl.replace(/\/$/, ''); // Remove trailing slash return `${baseUrl}/webhook/${config.path}`; } /** * Validate webhook workflow structure * * Checks if a workflow matches the expected webhook workflow structure. * * @param workflow - Workflow to validate * @param method - Expected HTTP method * @returns true if valid */ export function isValidWebhookWorkflow( workflow: Partial<Workflow>, method: 'GET' | 'POST' | 'PUT' | 'DELETE' ): boolean { if (!workflow.nodes || workflow.nodes.length < 1) { return false; } const webhookNode = workflow.nodes.find(n => n.type === 'n8n-nodes-base.webhook'); if (!webhookNode) { return false; } const params = webhookNode.parameters as any; return params.httpMethod === method; }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/88-888/n8n-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server