Skip to main content
Glama

n8n_trigger_webhook

Trigger active n8n workflows by sending HTTP requests to their webhook URLs with custom data and headers.

Instructions

Trigger a workflow via its webhook URL. The workflow must be active and have a Webhook trigger node.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
webhookUrlYesFull webhook URL (e.g., https://n8n.example.com/webhook/xxx-xxx-xxx)
methodNoHTTP method (default: POST)
dataNoData to send with the webhook request
headersNoAdditional HTTP headers

Implementation Reference

  • The main tool handler function for n8n_trigger_webhook that validates input arguments and calls N8nApiClient.triggerWebhook to execute the webhook trigger.
    n8n_trigger_webhook: async (
      client: N8nApiClient,
      args: Record<string, unknown>
    ): Promise<ToolResult> => {
      const webhookUrl = args.webhookUrl as string;
      if (!webhookUrl) {
        throw new Error('Webhook URL is required');
      }
    
      const result = await client.triggerWebhook(webhookUrl, {
        method: (args.method as 'GET' | 'POST' | 'PUT' | 'DELETE') || 'POST',
        data: args.data as Record<string, unknown> | undefined,
        headers: args.headers as Record<string, string> | undefined,
      });
    
      return {
        content: [
          {
            type: 'text' as const,
            text: JSON.stringify({
              success: true,
              message: 'Webhook triggered successfully',
              response: result,
            }, null, 2),
          },
        ],
      };
    },
  • The tool definition object containing the name, description, and input schema validation for n8n_trigger_webhook.
    {
      name: 'n8n_trigger_webhook',
      description: 'Trigger a workflow via its webhook URL. The workflow must be active and have a Webhook trigger node.',
      inputSchema: {
        type: 'object',
        properties: {
          webhookUrl: {
            type: 'string',
            description: 'Full webhook URL (e.g., https://n8n.example.com/webhook/xxx-xxx-xxx)',
          },
          method: {
            type: 'string',
            enum: ['GET', 'POST', 'PUT', 'DELETE'],
            description: 'HTTP method (default: POST)',
          },
          data: {
            type: 'object',
            description: 'Data to send with the webhook request',
          },
          headers: {
            type: 'object',
            description: 'Additional HTTP headers',
          },
        },
        required: ['webhookUrl'],
      },
    },
  • src/server.ts:127-131 (registration)
    Registration and dispatch logic in the MCP server's handleToolCall method that routes calls to 'n8n_trigger_webhook' to the corresponding handler in executionToolHandlers.
    // Execution tools
    if (name in executionToolHandlers) {
      const handler = executionToolHandlers[name as keyof typeof executionToolHandlers];
      return handler(client, args);
    }
  • Supporting utility method in N8nApiClient that performs the HTTP fetch request to the provided webhook URL, handling method, data, headers, and response parsing.
    async triggerWebhook(
      webhookUrl: string,
      options?: {
        method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
        data?: Record<string, unknown>;
        headers?: Record<string, string>;
      }
    ): Promise<unknown> {
      const method = options?.method || 'POST';
      
      logger.debug(`Triggering webhook: ${method} ${webhookUrl}`);
    
      const fetchOptions: RequestInit = {
        method,
        headers: {
          'Content-Type': 'application/json',
          ...(options?.headers || {}),
        },
      };
    
      if (options?.data && method !== 'GET') {
        fetchOptions.body = JSON.stringify(options.data);
      }
    
      try {
        const response = await fetch(webhookUrl, fetchOptions);
        
        const text = await response.text();
        
        if (!response.ok) {
          throw new Error(`Webhook error: HTTP ${response.status} - ${text}`);
        }
    
        try {
          return JSON.parse(text);
        } catch {
          return { response: text };
        }
      } catch (error) {
        if (error instanceof Error) {
          logger.error(`Webhook error: ${error.message}`);
          throw error;
        }
        throw new Error('Unknown webhook error');
      }
    }

Latest Blog Posts

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/alicankiraz1/cursor-n8n-builder'

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