Skip to main content
Glama

search_nodes

Search n8n workflow nodes by keyword to find automation components, with optional real-world configuration examples for implementation guidance.

Instructions

Search n8n nodes by keyword with optional real-world examples. Pass query as string. Example: query="webhook" or query="database". Returns max 20 results. Use includeExamples=true to get top 2 template configs per node.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesSearch terms. Use quotes for exact phrase.
limitNoMax results (default 20)
modeNoOR=any word, AND=all words, FUZZY=typo-tolerantOR
includeExamplesNoInclude top 2 real-world configuration examples from popular templates (default: false)

Implementation Reference

  • Tool schema definition including input schema, description, parameters, and requirements for the 'search_nodes' tool
      name: 'search_nodes',
      description: `Search n8n nodes by keyword with optional real-world examples. Pass query as string. Example: query="webhook" or query="database". Returns max 20 results. Use includeExamples=true to get top 2 template configs per node.`,
      inputSchema: {
        type: 'object',
        properties: {
          query: {
            type: 'string',
            description: 'Search terms. Use quotes for exact phrase.',
          },
          limit: {
            type: 'number',
            description: 'Max results (default 20)',
            default: 20,
          },
          mode: {
            type: 'string',
            enum: ['OR', 'AND', 'FUZZY'],
            description: 'OR=any word, AND=all words, FUZZY=typo-tolerant',
            default: 'OR',
          },
          includeExamples: {
            type: 'boolean',
            description: 'Include top 2 real-world configuration examples from popular templates (default: false)',
            default: false,
          },
        },
        required: ['query'],
      },
    },
  • Main handler function for search_nodes tool, delegates to NodeRepository.searchNodes with defaults
    async searchNodes(args: any) {
      return this.repository.searchNodes(args.query, args.mode || 'OR', args.limit || 20);
    }
  • Core search implementation using SQLite LIKE queries for different modes (OR, AND, FUZZY). FTS5 used in production MCP server.
    searchNodes(query: string, mode: 'OR' | 'AND' | 'FUZZY' = 'OR', limit: number = 20): any[] {
      let sql = '';
      const params: any[] = [];
    
      if (mode === 'FUZZY') {
        // Simple fuzzy search
        sql = `
          SELECT * FROM nodes 
          WHERE node_type LIKE ? OR display_name LIKE ? OR description LIKE ?
          ORDER BY display_name
          LIMIT ?
        `;
        const fuzzyQuery = `%${query}%`;
        params.push(fuzzyQuery, fuzzyQuery, fuzzyQuery, limit);
      } else {
        // OR/AND mode
        const words = query.split(/\s+/).filter(w => w.length > 0);
        const conditions = words.map(() => 
          '(node_type LIKE ? OR display_name LIKE ? OR description LIKE ?)'
        );
        const operator = mode === 'AND' ? ' AND ' : ' OR ';
        
        sql = `
          SELECT * FROM nodes 
          WHERE ${conditions.join(operator)}
          ORDER BY display_name
          LIMIT ?
        `;
        
        for (const word of words) {
          const searchTerm = `%${word}%`;
          params.push(searchTerm, searchTerm, searchTerm);
        }
        params.push(limit);
      }
      
      const rows = this.db.prepare(sql).all(...params) as any[];
      return rows.map(row => this.parseNodeRow(row));
    }
  • Detailed tool documentation and schema used for tools_documentation tool responses.
    export const searchNodesDoc: ToolDocumentation = {
      name: 'search_nodes',
      category: 'discovery',
      essentials: {
        description: 'Text search across node names and descriptions. Returns most relevant nodes first, with frequently-used nodes (HTTP Request, Webhook, Set, Code, Slack) prioritized in results. Searches all 500+ nodes in the database.',
        keyParameters: ['query', 'mode', 'limit'],
        example: 'search_nodes({query: "webhook"})',
        performance: '<20ms even for complex queries',
        tips: [
          'OR mode (default): Matches any search word',
          'AND mode: Requires all words present',
          'FUZZY mode: Handles typos and spelling errors',
          'Use quotes for exact phrases: "google sheets"'
        ]
      },
      full: {
        description: 'Full-text search engine for n8n nodes using SQLite FTS5. Searches across node names, descriptions, and aliases. Results are ranked by relevance with commonly-used nodes given priority. Common nodes include: HTTP Request, Webhook, Set, Code, IF, Switch, Merge, SplitInBatches, Slack, Google Sheets.',
        parameters: {
          query: { type: 'string', description: 'Search keywords. Use quotes for exact phrases like "google sheets"', required: true },
          limit: { type: 'number', description: 'Maximum results to return. Default: 20, Max: 100', required: false },
          mode: { type: 'string', description: 'Search mode: "OR" (any word matches, default), "AND" (all words required), "FUZZY" (typo-tolerant)', required: false }
        },
        returns: 'Array of node objects sorted by relevance score. Each object contains: nodeType, displayName, description, category, relevance score. Common nodes appear first when relevance is similar.',
        examples: [
          'search_nodes({query: "webhook"}) - Returns Webhook node as top result',
          'search_nodes({query: "database"}) - Returns MySQL, Postgres, MongoDB, Redis, etc.',
          'search_nodes({query: "google sheets", mode: "AND"}) - Requires both words',
          'search_nodes({query: "slak", mode: "FUZZY"}) - Finds Slack despite typo',
          'search_nodes({query: "http api"}) - Finds HTTP Request, GraphQL, REST nodes',
          'search_nodes({query: "transform data"}) - Finds Set, Code, Function, Item Lists nodes'
        ],
        useCases: [
          'Finding nodes when you know partial names',
          'Discovering nodes by functionality (e.g., "email", "database", "transform")',
          'Handling user typos in node names',
          'Finding all nodes related to a service (e.g., "google", "aws", "microsoft")'
        ],
        performance: '<20ms for simple queries, <50ms for complex FUZZY searches. Uses FTS5 index for speed',
        bestPractices: [
          'Start with single keywords for broadest results',
          'Use FUZZY mode when users might misspell node names',
          'AND mode works best for 2-3 word searches',
          'Combine with get_node after finding the right node'
        ],
        pitfalls: [
          'AND mode searches all fields (name, description) not just node names',
          'FUZZY mode with very short queries (1-2 chars) may return unexpected results',
          'Exact matches in quotes are case-sensitive'
        ],
        relatedTools: ['get_node to configure found nodes', 'search_templates to find workflow examples', 'validate_node to check configurations']
      }
    };

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/czlonkowski/n8n-mcp'

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