mirror of
https://github.com/czlonkowski/n8n-skills.git
synced 2026-03-16 23:43:08 +00:00
Implements comprehensive guidance for using n8n-mcp MCP tools effectively. This is the HIGHEST PRIORITY skill that addresses the 20% MCP tool failure rate. Files created: - 5 evaluations testing tool selection, nodeType formats, validation, and smart parameters - SKILL.md (505 lines) - Core tool usage guide with telemetry insights - SEARCH_GUIDE.md (243 lines) - Node discovery tools (search, essentials vs info) - VALIDATION_GUIDE.md (377 lines) - Configuration validation and auto-sanitization - WORKFLOW_GUIDE.md (385 lines) - Workflow management with 15 operation types - README.md - Skill metadata emphasizing highest priority Key features: - Tool selection guide with success rates (search_nodes 99.9%, get_node_essentials 91.7%) - nodeType format distinction (nodes-base.* vs n8n-nodes-base.*) - Validation profiles explained (minimal/runtime/ai-friendly/strict) - Smart parameters for IF/Switch nodes (branch="true", case=0) - Auto-sanitization system for operator structures - Telemetry insights (56s between edits, 18s search→essentials, 23s+58s validate→fix) - AI connection types (8 types documented) Total: ~1,650 lines across 10 files Based on analysis of 447,557 real MCP tool usage events. 🤖 Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en
505 lines
12 KiB
Markdown
505 lines
12 KiB
Markdown
---
|
||
name: n8n MCP Tools Expert
|
||
description: Expert guide for using n8n-mcp MCP tools effectively. Use when searching for nodes, validating configurations, accessing templates, managing workflows, or using any n8n-mcp tool. Provides tool selection guidance, parameter formats, and common patterns.
|
||
---
|
||
|
||
# n8n MCP Tools Expert
|
||
|
||
Master guide for using n8n-mcp MCP server tools to build workflows.
|
||
|
||
---
|
||
|
||
## Tool Categories
|
||
|
||
n8n-mcp provides **40+ tools** organized into categories:
|
||
|
||
1. **Node Discovery** → [SEARCH_GUIDE.md](SEARCH_GUIDE.md)
|
||
2. **Configuration Validation** → [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md)
|
||
3. **Workflow Management** → [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md)
|
||
4. **Template Library** - Search and access 2,653 real workflows
|
||
5. **Documentation** - Get tool and node documentation
|
||
|
||
---
|
||
|
||
## Quick Reference
|
||
|
||
### Most Used Tools (by frequency & success rate)
|
||
|
||
| Tool | Use When | Success Rate | Speed |
|
||
|------|----------|--------------|-------|
|
||
| `search_nodes` | Finding nodes by keyword | 99.9% | <20ms |
|
||
| `get_node_essentials` | Understanding node operations | 91.7% | <10ms |
|
||
| `validate_node_operation` | Checking configurations | Varies | <100ms |
|
||
| `n8n_create_workflow` | Creating workflows | 96.8% | 100-500ms |
|
||
| `n8n_update_partial_workflow` | Editing workflows (MOST USED!) | 99.0% | 50-200ms |
|
||
| `validate_workflow` | Checking complete workflow | 95.5% | 100-500ms |
|
||
|
||
---
|
||
|
||
## Tool Selection Guide
|
||
|
||
### Finding the Right Node
|
||
|
||
**Workflow**:
|
||
```
|
||
1. search_nodes({query: "keyword"})
|
||
2. get_node_essentials({nodeType: "nodes-base.name"})
|
||
3. [Optional] get_node_documentation({nodeType: "nodes-base.name"})
|
||
```
|
||
|
||
**Example**:
|
||
```javascript
|
||
// Step 1: Search
|
||
search_nodes({query: "slack"})
|
||
// Returns: nodes-base.slack
|
||
|
||
// Step 2: Get details (18s avg between steps)
|
||
get_node_essentials({nodeType: "nodes-base.slack"})
|
||
// Returns: operations, properties, examples
|
||
```
|
||
|
||
**Pattern from telemetry**: search → essentials (9,835 occurrences, 18s avg)
|
||
|
||
### Validating Configuration
|
||
|
||
**Workflow**:
|
||
```
|
||
1. validate_node_minimal({nodeType, config: {}}) - Check required fields
|
||
2. validate_node_operation({nodeType, config, profile: "runtime"}) - Full validation
|
||
3. [Repeat] Fix errors, validate again
|
||
```
|
||
|
||
**Pattern from telemetry**: validate → fix → validate (7,841 loops, 23s thinking, 58s fixing)
|
||
|
||
### Managing Workflows
|
||
|
||
**Workflow**:
|
||
```
|
||
1. n8n_create_workflow({name, nodes, connections})
|
||
2. n8n_validate_workflow({id})
|
||
3. n8n_update_partial_workflow({id, operations: [...]})
|
||
4. n8n_validate_workflow({id}) again
|
||
```
|
||
|
||
**Pattern from telemetry**: update (38,287 uses, 56s avg between edits)
|
||
|
||
---
|
||
|
||
## Critical: nodeType Formats
|
||
|
||
**Two different formats** for different tools!
|
||
|
||
### Format 1: Search/Validate Tools
|
||
```javascript
|
||
// Use SHORT prefix
|
||
"nodes-base.slack"
|
||
"nodes-base.httpRequest"
|
||
"nodes-base.webhook"
|
||
"nodes-langchain.agent"
|
||
```
|
||
|
||
**Tools that use this**:
|
||
- search_nodes (returns this format)
|
||
- get_node_essentials
|
||
- get_node_info
|
||
- validate_node_minimal
|
||
- validate_node_operation
|
||
- get_property_dependencies
|
||
|
||
### Format 2: Workflow Tools
|
||
```javascript
|
||
// Use FULL prefix
|
||
"n8n-nodes-base.slack"
|
||
"n8n-nodes-base.httpRequest"
|
||
"n8n-nodes-base.webhook"
|
||
"@n8n/n8n-nodes-langchain.agent"
|
||
```
|
||
|
||
**Tools that use this**:
|
||
- n8n_create_workflow
|
||
- n8n_update_partial_workflow
|
||
- list_node_templates
|
||
|
||
### Conversion
|
||
|
||
```javascript
|
||
// search_nodes returns BOTH formats
|
||
{
|
||
"nodeType": "nodes-base.slack", // For search/validate tools
|
||
"workflowNodeType": "n8n-nodes-base.slack" // For workflow tools
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Common Mistakes
|
||
|
||
### ❌ Mistake 1: Wrong nodeType Format
|
||
|
||
**Problem**: "Node not found" error
|
||
|
||
```javascript
|
||
❌ get_node_essentials({nodeType: "slack"}) // Missing prefix
|
||
❌ get_node_essentials({nodeType: "n8n-nodes-base.slack"}) // Wrong prefix
|
||
|
||
✅ get_node_essentials({nodeType: "nodes-base.slack"}) // Correct!
|
||
```
|
||
|
||
### ❌ Mistake 2: Using get_node_info Instead of get_node_essentials
|
||
|
||
**Problem**: 20% failure rate, slow response, huge payload
|
||
|
||
```javascript
|
||
❌ get_node_info({nodeType: "nodes-base.slack"})
|
||
// Returns: 100KB+ data, 20% chance of failure
|
||
|
||
✅ get_node_essentials({nodeType: "nodes-base.slack"})
|
||
// Returns: 5KB focused data, 91.7% success, <10ms
|
||
```
|
||
|
||
**When to use get_node_info**:
|
||
- Debugging complex configuration issues
|
||
- Need complete property schema
|
||
- Exploring advanced features
|
||
|
||
**Better alternatives**:
|
||
1. get_node_essentials - for operations list
|
||
2. get_node_documentation - for readable docs
|
||
3. search_node_properties - for specific property
|
||
|
||
### ❌ Mistake 3: Not Using Validation Profiles
|
||
|
||
**Problem**: Too many false positives OR missing real errors
|
||
|
||
**Profiles**:
|
||
- `minimal` - Only required fields (fast, permissive)
|
||
- `runtime` - Values + types (recommended for pre-deployment)
|
||
- `ai-friendly` - Reduce false positives (for AI configuration)
|
||
- `strict` - Maximum validation (for production)
|
||
|
||
```javascript
|
||
❌ validate_node_operation({nodeType, config}) // Uses default
|
||
|
||
✅ validate_node_operation({nodeType, config, profile: "runtime"}) // Explicit
|
||
```
|
||
|
||
### ❌ Mistake 4: Ignoring Auto-Sanitization
|
||
|
||
**What happens**: ALL nodes sanitized on ANY workflow update
|
||
|
||
**Auto-fixes**:
|
||
- Binary operators (equals, contains) → removes singleValue
|
||
- Unary operators (isEmpty, isNotEmpty) → adds singleValue: true
|
||
- IF/Switch nodes → adds missing metadata
|
||
|
||
**Cannot fix**:
|
||
- Broken connections
|
||
- Branch count mismatches
|
||
- Paradoxical corrupt states
|
||
|
||
```javascript
|
||
// After ANY update, auto-sanitization runs on ALL nodes
|
||
n8n_update_partial_workflow({id, operations: [...]})
|
||
// → Automatically fixes operator structures
|
||
```
|
||
|
||
### ❌ Mistake 5: Not Using Smart Parameters
|
||
|
||
**Problem**: Complex sourceIndex calculations for multi-output nodes
|
||
|
||
**Old way** (manual):
|
||
```javascript
|
||
// IF node connection
|
||
{
|
||
type: "addConnection",
|
||
source: "IF",
|
||
target: "Handler",
|
||
sourceIndex: 0 // Which output? Hard to remember!
|
||
}
|
||
```
|
||
|
||
**New way** (smart parameters):
|
||
```javascript
|
||
// IF node - semantic branch names
|
||
{
|
||
type: "addConnection",
|
||
source: "IF",
|
||
target: "True Handler",
|
||
branch: "true" // Clear and readable!
|
||
}
|
||
|
||
{
|
||
type: "addConnection",
|
||
source: "IF",
|
||
target: "False Handler",
|
||
branch: "false"
|
||
}
|
||
|
||
// Switch node - semantic case numbers
|
||
{
|
||
type: "addConnection",
|
||
source: "Switch",
|
||
target: "Handler A",
|
||
case: 0
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Tool Usage Patterns
|
||
|
||
### Pattern 1: Node Discovery (Most Common)
|
||
|
||
**From telemetry**: 9,835 occurrences, 18s avg between steps
|
||
|
||
```javascript
|
||
// Step 1: Search (fast!)
|
||
const results = await search_nodes({
|
||
query: "slack",
|
||
mode: "OR", // Default: any word matches
|
||
limit: 20
|
||
});
|
||
// → Returns: nodes-base.slack, nodes-base.slackTrigger
|
||
|
||
// Step 2: Get details (~18s later, user reviewing results)
|
||
const details = await get_node_essentials({
|
||
nodeType: "nodes-base.slack",
|
||
includeExamples: true // Get real template configs
|
||
});
|
||
// → Returns: operations, properties, metadata
|
||
```
|
||
|
||
### Pattern 2: Validation Loop
|
||
|
||
**From telemetry**: 7,841 occurrences, 23s thinking, 58s fixing
|
||
|
||
```javascript
|
||
// Step 1: Validate
|
||
const result = await validate_node_operation({
|
||
nodeType: "nodes-base.slack",
|
||
config: {
|
||
resource: "channel",
|
||
operation: "create"
|
||
},
|
||
profile: "runtime"
|
||
});
|
||
|
||
// Step 2: Check errors (~23s thinking)
|
||
if (!result.valid) {
|
||
console.log(result.errors); // "Missing required field: name"
|
||
}
|
||
|
||
// Step 3: Fix config (~58s fixing)
|
||
config.name = "general";
|
||
|
||
// Step 4: Validate again
|
||
await validate_node_operation({...}); // Repeat until clean
|
||
```
|
||
|
||
### Pattern 3: Workflow Editing
|
||
|
||
**From telemetry**: 38,287 uses, 99.0% success, 56s avg between edits
|
||
|
||
```javascript
|
||
// Iterative workflow building (NOT one-shot!)
|
||
// Edit 1
|
||
await n8n_update_partial_workflow({
|
||
id: "workflow-id",
|
||
operations: [{type: "addNode", node: {...}}]
|
||
});
|
||
|
||
// ~56s later...
|
||
|
||
// Edit 2
|
||
await n8n_update_partial_workflow({
|
||
id: "workflow-id",
|
||
operations: [{type: "addConnection", source: "...", target: "..."}]
|
||
});
|
||
|
||
// ~56s later...
|
||
|
||
// Edit 3 (validation)
|
||
await n8n_validate_workflow({id: "workflow-id"});
|
||
```
|
||
|
||
---
|
||
|
||
## Detailed Guides
|
||
|
||
### Node Discovery Tools
|
||
See [SEARCH_GUIDE.md](SEARCH_GUIDE.md) for:
|
||
- search_nodes (99.9% success)
|
||
- get_node_essentials vs get_node_info
|
||
- list_nodes by category
|
||
- search_node_properties for specific fields
|
||
|
||
### Validation Tools
|
||
See [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md) for:
|
||
- Validation profiles explained
|
||
- validate_node_minimal vs validate_node_operation
|
||
- validate_workflow complete structure
|
||
- Auto-sanitization system
|
||
- Handling validation errors
|
||
|
||
### Workflow Management
|
||
See [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md) for:
|
||
- n8n_create_workflow
|
||
- n8n_update_partial_workflow (15 operation types!)
|
||
- Smart parameters (branch, case)
|
||
- AI connection types (8 types)
|
||
- cleanStaleConnections recovery
|
||
|
||
---
|
||
|
||
## Template Usage
|
||
|
||
### Search Templates
|
||
|
||
```javascript
|
||
// Search by keyword
|
||
search_templates({
|
||
query: "webhook slack",
|
||
limit: 20
|
||
});
|
||
// → Returns: 1,085 templates with metadata
|
||
|
||
// Get template details
|
||
get_template({
|
||
templateId: 2947, // Weather to Slack
|
||
mode: "structure" // or "full" for complete JSON
|
||
});
|
||
```
|
||
|
||
### Template Metadata
|
||
|
||
Templates include:
|
||
- Complexity (simple, medium, complex)
|
||
- Setup time estimate
|
||
- Required services
|
||
- Categories and use cases
|
||
- View counts (popularity)
|
||
|
||
---
|
||
|
||
## Self-Help Tools
|
||
|
||
### Get Tool Documentation
|
||
|
||
```javascript
|
||
// List all tools
|
||
tools_documentation()
|
||
|
||
// Specific tool details
|
||
tools_documentation({
|
||
topic: "search_nodes",
|
||
depth: "full"
|
||
})
|
||
```
|
||
|
||
### Health Check
|
||
|
||
```javascript
|
||
// Verify MCP server connectivity
|
||
n8n_health_check()
|
||
// → Returns: status, features, API availability, version
|
||
```
|
||
|
||
### Database Statistics
|
||
|
||
```javascript
|
||
get_database_statistics()
|
||
// → Returns: 537 nodes, 270 AI tools, 2,653 templates
|
||
```
|
||
|
||
---
|
||
|
||
## Tool Availability
|
||
|
||
**Always Available** (no n8n API needed):
|
||
- search_nodes, list_nodes, get_node_essentials ✅
|
||
- validate_node_minimal, validate_node_operation ✅
|
||
- validate_workflow, get_property_dependencies ✅
|
||
- search_templates, get_template, list_tasks ✅
|
||
- tools_documentation, get_database_statistics ✅
|
||
|
||
**Requires n8n API** (N8N_API_URL + N8N_API_KEY):
|
||
- n8n_create_workflow ⚠️
|
||
- n8n_update_partial_workflow ⚠️
|
||
- n8n_validate_workflow (by ID) ⚠️
|
||
- n8n_list_workflows, n8n_get_workflow ⚠️
|
||
- n8n_trigger_webhook_workflow ⚠️
|
||
|
||
If API tools unavailable, use templates and validation-only workflows.
|
||
|
||
---
|
||
|
||
## Performance Characteristics
|
||
|
||
| Tool | Response Time | Payload Size | Reliability |
|
||
|------|---------------|--------------|-------------|
|
||
| search_nodes | <20ms | Small | 99.9% |
|
||
| list_nodes | <20ms | Small | 99.6% |
|
||
| get_node_essentials | <10ms | ~5KB | 91.7% |
|
||
| get_node_info | Varies | 100KB+ | 80% ⚠️ |
|
||
| validate_node_minimal | <100ms | Small | 97.4% |
|
||
| validate_node_operation | <100ms | Medium | Varies |
|
||
| validate_workflow | 100-500ms | Medium | 95.5% |
|
||
| n8n_create_workflow | 100-500ms | Medium | 96.8% |
|
||
| n8n_update_partial_workflow | 50-200ms | Small | 99.0% |
|
||
|
||
---
|
||
|
||
## Best Practices
|
||
|
||
### ✅ Do
|
||
|
||
- Use get_node_essentials over get_node_info (91.7% vs 80%)
|
||
- Specify validation profile explicitly
|
||
- Use smart parameters (branch, case) for clarity
|
||
- Follow search → essentials → validate workflow
|
||
- Iterate workflows (avg 56s between edits)
|
||
- Validate after every significant change
|
||
- Use includeExamples: true for real configs
|
||
|
||
### ❌ Don't
|
||
|
||
- Use get_node_info unless necessary (20% failure rate!)
|
||
- Forget nodeType prefix (nodes-base.*)
|
||
- Skip validation profiles (use "runtime")
|
||
- Try to build workflows in one shot (iterate!)
|
||
- Ignore auto-sanitization behavior
|
||
- Use full prefix (n8n-nodes-base.*) with search tools
|
||
|
||
---
|
||
|
||
## Summary
|
||
|
||
**Most Important**:
|
||
1. Use **get_node_essentials**, not get_node_info (5KB vs 100KB, 91.7% vs 80%)
|
||
2. nodeType formats differ: `nodes-base.*` (search) vs `n8n-nodes-base.*` (workflows)
|
||
3. Specify **validation profiles** (runtime recommended)
|
||
4. Use **smart parameters** (branch="true", case=0)
|
||
5. **Auto-sanitization** runs on ALL nodes during updates
|
||
6. Workflows are built **iteratively** (56s avg between edits)
|
||
|
||
**Common Workflow**:
|
||
1. search_nodes → find node
|
||
2. get_node_essentials → understand config
|
||
3. validate_node_operation → check config
|
||
4. n8n_create_workflow → build
|
||
5. n8n_validate_workflow → verify
|
||
6. n8n_update_partial_workflow → iterate
|
||
|
||
For details, see:
|
||
- [SEARCH_GUIDE.md](SEARCH_GUIDE.md) - Node discovery
|
||
- [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md) - Configuration validation
|
||
- [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md) - Workflow management
|
||
|
||
---
|
||
|
||
**Related Skills**:
|
||
- n8n Expression Syntax - Write expressions in workflow fields
|
||
- n8n Workflow Patterns - Architectural patterns from templates
|
||
- n8n Validation Expert - Interpret validation errors
|
||
- n8n Node Configuration - Operation-specific requirements
|