mirror of
https://github.com/czlonkowski/n8n-skills.git
synced 2026-03-16 23:43:08 +00:00
feat: Update skills for n8n-mcp unified tool API (v1.1.0)
BREAKING: Updated all skills to reflect n8n-mcp tool consolidation:
## Tool API Changes
- get_node_essentials → get_node({detail: "standard"})
- get_node_info → get_node({detail: "full"})
- get_node_documentation → get_node({mode: "docs"})
- search_node_properties → get_node({mode: "search_properties"})
- validate_node_minimal → validate_node({mode: "minimal"})
- validate_node_operation → validate_node({mode: "full"})
- get_property_dependencies → REMOVED (use get_node modes)
## New Features Documented
- Workflow activation via API (activateWorkflow/deactivateWorkflow operations)
- n8n_deploy_template - deploy templates directly to n8n
- n8n_workflow_versions - version history and rollback
- n8n_test_workflow - trigger execution
- n8n_executions - manage executions
- Smart parameters (branch, case) for IF/Switch connections
- Intent parameter for better AI responses
## Documentation Updates
- Added YouTube video introduction with thumbnail
- Added GitHub stars badge (1.2k milestone)
- Added build.sh script for dist packaging
- Fixed "5 skills" → "7 skills" inconsistency in README
## Files Updated
- n8n-mcp-tools-expert: Complete rewrite of SKILL.md, SEARCH_GUIDE.md,
VALIDATION_GUIDE.md, WORKFLOW_GUIDE.md
- n8n-node-configuration: Updated SKILL.md, DEPENDENCIES.md
- n8n-validation-expert: Updated SKILL.md, ERROR_CATALOG.md, FALSE_POSITIVES.md
- n8n-workflow-patterns: Updated SKILL.md, README.md
- README.md, CLAUDE.md: Modernized documentation
Conceived by Romuald Członkowski - www.aiadvisors.pl/en
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -233,43 +233,27 @@ Deep dive into n8n property dependencies and displayOptions mechanism.
|
||||
|
||||
---
|
||||
|
||||
## Using get_property_dependencies
|
||||
## Finding Property Dependencies
|
||||
|
||||
### Basic Usage
|
||||
### Using get_node with search_properties Mode
|
||||
|
||||
```javascript
|
||||
const deps = get_property_dependencies({
|
||||
nodeType: "nodes-base.httpRequest"
|
||||
// Find properties related to "body"
|
||||
get_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
mode: "search_properties",
|
||||
propertyQuery: "body"
|
||||
});
|
||||
```
|
||||
|
||||
### Example Response
|
||||
### Using get_node with Full Detail
|
||||
|
||||
```javascript
|
||||
{
|
||||
"nodeType": "n8n-nodes-base.httpRequest",
|
||||
"dependencies": {
|
||||
"body": {
|
||||
"shows_when": {
|
||||
"sendBody": [true],
|
||||
"method": ["POST", "PUT", "PATCH", "DELETE"]
|
||||
},
|
||||
"required_when_shown": true
|
||||
},
|
||||
"queryParameters": {
|
||||
"shows_when": {
|
||||
"sendQuery": [true]
|
||||
},
|
||||
"required_when_shown": false
|
||||
},
|
||||
"headerParameters": {
|
||||
"shows_when": {
|
||||
"sendHeaders": [true]
|
||||
},
|
||||
"required_when_shown": false
|
||||
}
|
||||
}
|
||||
}
|
||||
// Get complete schema with displayOptions
|
||||
get_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
detail: "full"
|
||||
});
|
||||
```
|
||||
|
||||
### When to Use
|
||||
@@ -281,7 +265,7 @@ const deps = get_property_dependencies({
|
||||
- Building dynamic configuration tools
|
||||
|
||||
**❌ Don't use when**:
|
||||
- Simple configuration (use get_node_essentials)
|
||||
- Simple configuration (use `get_node` with standard detail)
|
||||
- Just starting configuration
|
||||
- Field requirements are obvious
|
||||
|
||||
@@ -564,9 +548,11 @@ method=POST
|
||||
|
||||
**Solution**:
|
||||
```javascript
|
||||
// Check dependencies
|
||||
const deps = get_property_dependencies({
|
||||
nodeType: "nodes-base.httpRequest"
|
||||
// Check field dependencies using search_properties
|
||||
get_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
mode: "search_properties",
|
||||
propertyQuery: "body"
|
||||
});
|
||||
|
||||
// Find that body shows when sendBody=true
|
||||
@@ -606,8 +592,8 @@ const deps = get_property_dependencies({
|
||||
|
||||
**Solution**:
|
||||
```javascript
|
||||
// Check essentials for new operation
|
||||
get_node_essentials({
|
||||
// Check requirements for new operation
|
||||
get_node({
|
||||
nodeType: "nodes-base.slack"
|
||||
});
|
||||
|
||||
@@ -644,9 +630,11 @@ get_node_essentials({
|
||||
**Solution**: Respect dependencies from the start
|
||||
|
||||
```javascript
|
||||
// Correct approach
|
||||
get_property_dependencies({
|
||||
nodeType: "nodes-base.httpRequest"
|
||||
// Correct approach - check property dependencies
|
||||
get_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
mode: "search_properties",
|
||||
propertyQuery: "body"
|
||||
});
|
||||
|
||||
// See that body only shows for POST/PUT/PATCH/DELETE
|
||||
@@ -730,7 +718,7 @@ get_property_dependencies({
|
||||
|
||||
1. **Check dependencies when stuck**
|
||||
```javascript
|
||||
get_property_dependencies({nodeType: "..."});
|
||||
get_node({nodeType: "...", mode: "search_properties", propertyQuery: "..."});
|
||||
```
|
||||
|
||||
2. **Configure parent properties first**
|
||||
@@ -742,7 +730,7 @@ get_property_dependencies({
|
||||
3. **Validate after changing operation**
|
||||
```javascript
|
||||
// Operation changed → requirements changed
|
||||
validate_node_operation({...});
|
||||
validate_node({nodeType: "...", config: {...}, profile: "runtime"});
|
||||
```
|
||||
|
||||
4. **Read validation errors for dependency hints**
|
||||
@@ -791,8 +779,9 @@ get_property_dependencies({
|
||||
- Field doesn't save → Hidden by dependencies
|
||||
|
||||
**Tools**:
|
||||
- `get_property_dependencies` - See dependency rules
|
||||
- `get_node_essentials` - See operation requirements
|
||||
- `get_node({mode: "search_properties"})` - Find property dependencies
|
||||
- `get_node({detail: "full"})` - See complete schema with displayOptions
|
||||
- `get_node` - See operation requirements (standard detail)
|
||||
- Validation errors - Hints about dependencies
|
||||
|
||||
**Related Files**:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: n8n-node-configuration
|
||||
description: Operation-aware node configuration guidance. Use when configuring nodes, understanding property dependencies, determining required fields, choosing between get_node_essentials and get_node_info, or learning common configuration patterns by node type.
|
||||
description: Operation-aware node configuration guidance. Use when configuring nodes, understanding property dependencies, determining required fields, choosing between get_node detail levels, or learning common configuration patterns by node type.
|
||||
---
|
||||
|
||||
# n8n Node Configuration
|
||||
@@ -14,11 +14,11 @@ Expert guidance for operation-aware node configuration with property dependencie
|
||||
**Progressive disclosure**: Start minimal, add complexity as needed
|
||||
|
||||
Configuration best practices:
|
||||
- get_node_essentials is the most used discovery pattern
|
||||
- `get_node` with `detail: "standard"` is the most used discovery pattern
|
||||
- 56 seconds average between configuration edits
|
||||
- 91.7% success rate with essentials-based configuration
|
||||
- Covers 95% of use cases with 1-2K tokens response
|
||||
|
||||
**Key insight**: Most configurations need only essentials, not full schema!
|
||||
**Key insight**: Most configurations need only standard detail, not full schema!
|
||||
|
||||
---
|
||||
|
||||
@@ -79,23 +79,20 @@ Configuration best practices:
|
||||
|
||||
### 3. Progressive Discovery
|
||||
|
||||
**Use the right tool for the right job**:
|
||||
**Use the right detail level**:
|
||||
|
||||
1. **get_node_essentials** (91.7% success rate)
|
||||
- Quick overview
|
||||
- Required fields
|
||||
- Common options
|
||||
- **Use first** - covers 90% of needs
|
||||
1. **get_node({detail: "standard"})** - DEFAULT
|
||||
- Quick overview (~1-2K tokens)
|
||||
- Required fields + common options
|
||||
- **Use first** - covers 95% of needs
|
||||
|
||||
2. **get_property_dependencies** (for complex nodes)
|
||||
- Shows what fields depend on others
|
||||
- Reveals conditional requirements
|
||||
- Use when essentials isn't enough
|
||||
2. **get_node({mode: "search_properties", propertyQuery: "..."})** (for finding specific fields)
|
||||
- Find properties by name
|
||||
- Use when looking for auth, body, headers, etc.
|
||||
|
||||
3. **get_node_info** (full schema)
|
||||
- Complete documentation
|
||||
- All possible fields
|
||||
- Use when essentials + dependencies insufficient
|
||||
3. **get_node({detail: "full"})** (complete schema)
|
||||
- All properties (~3-8K tokens)
|
||||
- Use only when standard detail is insufficient
|
||||
|
||||
---
|
||||
|
||||
@@ -106,13 +103,13 @@ Configuration best practices:
|
||||
```
|
||||
1. Identify node type and operation
|
||||
↓
|
||||
2. Use get_node_essentials
|
||||
2. Use get_node (standard detail is default)
|
||||
↓
|
||||
3. Configure required fields
|
||||
↓
|
||||
4. Validate configuration
|
||||
↓
|
||||
5. If dependencies unclear → get_property_dependencies
|
||||
5. If field unclear → get_node({mode: "search_properties"})
|
||||
↓
|
||||
6. Add optional fields as needed
|
||||
↓
|
||||
@@ -128,9 +125,9 @@ Configuration best practices:
|
||||
// Goal: POST JSON to API
|
||||
```
|
||||
|
||||
**Step 2**: Get essentials
|
||||
**Step 2**: Get node info
|
||||
```javascript
|
||||
const info = get_node_essentials({
|
||||
const info = get_node({
|
||||
nodeType: "nodes-base.httpRequest"
|
||||
});
|
||||
|
||||
@@ -148,7 +145,7 @@ const info = get_node_essentials({
|
||||
|
||||
**Step 4**: Validate
|
||||
```javascript
|
||||
validate_node_operation({
|
||||
validate_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
config,
|
||||
profile: "runtime"
|
||||
@@ -168,7 +165,7 @@ validate_node_operation({
|
||||
|
||||
**Step 6**: Validate again
|
||||
```javascript
|
||||
validate_node_operation({...});
|
||||
validate_node({...});
|
||||
// → Error: "body required when sendBody=true"
|
||||
```
|
||||
|
||||
@@ -191,47 +188,61 @@ validate_node_operation({...});
|
||||
|
||||
**Step 8**: Final validation
|
||||
```javascript
|
||||
validate_node_operation({...});
|
||||
validate_node({...});
|
||||
// → Valid! ✅
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## get_node_essentials vs get_node_info
|
||||
## get_node Detail Levels
|
||||
|
||||
### Use get_node_essentials When:
|
||||
### Standard Detail (DEFAULT - Use This!)
|
||||
|
||||
**✅ Starting configuration** (91.7% success rate)
|
||||
**✅ Starting configuration**
|
||||
```javascript
|
||||
get_node_essentials({
|
||||
get_node({
|
||||
nodeType: "nodes-base.slack"
|
||||
});
|
||||
// detail="standard" is the default
|
||||
```
|
||||
|
||||
**Returns**:
|
||||
**Returns** (~1-2K tokens):
|
||||
- Required fields
|
||||
- Common options
|
||||
- Basic examples
|
||||
- Operation list
|
||||
- Metadata
|
||||
|
||||
**Fast**: ~18 seconds average (from search → essentials)
|
||||
**Use**: 95% of configuration needs
|
||||
|
||||
### Use get_node_info When:
|
||||
### Full Detail (Use Sparingly)
|
||||
|
||||
**✅ Essentials insufficient**
|
||||
**✅ When standard isn't enough**
|
||||
```javascript
|
||||
get_node_info({
|
||||
nodeType: "nodes-base.slack"
|
||||
get_node({
|
||||
nodeType: "nodes-base.slack",
|
||||
detail: "full"
|
||||
});
|
||||
```
|
||||
|
||||
**Returns**:
|
||||
- Full schema
|
||||
**Returns** (~3-8K tokens):
|
||||
- Complete schema
|
||||
- All properties
|
||||
- Complete documentation
|
||||
- Advanced options
|
||||
- All nested options
|
||||
|
||||
**Slower**: More data to process
|
||||
**Warning**: Large response, use only when standard insufficient
|
||||
|
||||
### Search Properties Mode
|
||||
|
||||
**✅ Looking for specific field**
|
||||
```javascript
|
||||
get_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
mode: "search_properties",
|
||||
propertyQuery: "auth"
|
||||
});
|
||||
```
|
||||
|
||||
**Use**: Find authentication, headers, body fields, etc.
|
||||
|
||||
### Decision Tree
|
||||
|
||||
@@ -239,27 +250,27 @@ get_node_info({
|
||||
┌─────────────────────────────────┐
|
||||
│ Starting new node config? │
|
||||
├─────────────────────────────────┤
|
||||
│ YES → get_node_essentials │
|
||||
│ YES → get_node (standard) │
|
||||
└─────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────┐
|
||||
│ Essentials has what you need? │
|
||||
│ Standard has what you need? │
|
||||
├─────────────────────────────────┤
|
||||
│ YES → Configure with essentials │
|
||||
│ YES → Configure with it │
|
||||
│ NO → Continue │
|
||||
└─────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────┐
|
||||
│ Need dependency info? │
|
||||
│ Looking for specific field? │
|
||||
├─────────────────────────────────┤
|
||||
│ YES → get_property_dependencies │
|
||||
│ YES → search_properties mode │
|
||||
│ NO → Continue │
|
||||
└─────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────┐
|
||||
│ Still need more details? │
|
||||
├─────────────────────────────────┤
|
||||
│ YES → get_node_info │
|
||||
│ YES → get_node({detail: "full"})│
|
||||
└─────────────────────────────────┘
|
||||
```
|
||||
|
||||
@@ -334,30 +345,27 @@ get_node_info({
|
||||
}
|
||||
```
|
||||
|
||||
### Using get_property_dependencies
|
||||
### Finding Property Dependencies
|
||||
|
||||
**Example**:
|
||||
**Use get_node with search_properties mode**:
|
||||
```javascript
|
||||
const deps = get_property_dependencies({
|
||||
nodeType: "nodes-base.httpRequest"
|
||||
get_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
mode: "search_properties",
|
||||
propertyQuery: "body"
|
||||
});
|
||||
|
||||
// Returns dependency tree
|
||||
{
|
||||
"dependencies": {
|
||||
"body": {
|
||||
"shows_when": {
|
||||
"sendBody": [true],
|
||||
"method": ["POST", "PUT", "PATCH", "DELETE"]
|
||||
}
|
||||
},
|
||||
"queryParameters": {
|
||||
"shows_when": {
|
||||
"sendQuery": [true]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Returns property paths matching "body" with descriptions
|
||||
```
|
||||
|
||||
**Or use full detail for complete schema**:
|
||||
```javascript
|
||||
get_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
detail: "full"
|
||||
});
|
||||
|
||||
// Returns complete schema with displayOptions rules
|
||||
```
|
||||
|
||||
**Use this when**: Validation fails and you don't understand why field is missing/required
|
||||
@@ -382,7 +390,7 @@ const deps = get_property_dependencies({
|
||||
**How to configure**:
|
||||
1. Choose resource
|
||||
2. Choose operation
|
||||
3. Use get_node_essentials to see operation-specific requirements
|
||||
3. Use get_node to see operation-specific requirements
|
||||
4. Configure required fields
|
||||
|
||||
### Pattern 2: HTTP-Based Nodes
|
||||
@@ -573,14 +581,16 @@ body is required when:
|
||||
**How to discover**:
|
||||
```javascript
|
||||
// Option 1: Read validation error
|
||||
validate_node_operation({...});
|
||||
validate_node({...});
|
||||
// Error: "body required when sendBody=true"
|
||||
|
||||
// Option 2: Check dependencies
|
||||
get_property_dependencies({
|
||||
nodeType: "nodes-base.httpRequest"
|
||||
// Option 2: Search for the property
|
||||
get_node({
|
||||
nodeType: "nodes-base.httpRequest",
|
||||
mode: "search_properties",
|
||||
propertyQuery: "body"
|
||||
});
|
||||
// Shows: body → shows_when: sendBody=[true], method=[POST,PUT,PATCH,DELETE]
|
||||
// Shows: body property with displayOptions rules
|
||||
|
||||
// Option 3: Try minimal config and iterate
|
||||
// Start without body, validation will tell you if needed
|
||||
@@ -600,10 +610,11 @@ singleValue should be true when:
|
||||
|
||||
**Manual check**:
|
||||
```javascript
|
||||
get_property_dependencies({
|
||||
nodeType: "nodes-base.if"
|
||||
get_node({
|
||||
nodeType: "nodes-base.if",
|
||||
detail: "full"
|
||||
});
|
||||
// Shows operator-specific dependencies
|
||||
// Shows complete schema with operator-specific rules
|
||||
```
|
||||
|
||||
---
|
||||
@@ -651,7 +662,7 @@ n8n_update_partial_workflow({...}); // YOLO
|
||||
```javascript
|
||||
// Validate before deploying
|
||||
const config = {...};
|
||||
const result = validate_node_operation({...});
|
||||
const result = validate_node({...});
|
||||
if (result.valid) {
|
||||
n8n_update_partial_workflow({...});
|
||||
}
|
||||
@@ -681,7 +692,7 @@ if (result.valid) {
|
||||
**Good**:
|
||||
```javascript
|
||||
// Check requirements when changing operation
|
||||
get_node_essentials({
|
||||
get_node({
|
||||
nodeType: "nodes-base.slack"
|
||||
});
|
||||
// See what update operation needs (messageId, not channel)
|
||||
@@ -693,24 +704,24 @@ get_node_essentials({
|
||||
|
||||
### ✅ Do
|
||||
|
||||
1. **Start with get_node_essentials**
|
||||
- 91.7% success rate
|
||||
- Faster than get_node_info
|
||||
- Sufficient for most needs
|
||||
1. **Start with get_node (standard detail)**
|
||||
- ~1-2K tokens response
|
||||
- Covers 95% of configuration needs
|
||||
- Default detail level
|
||||
|
||||
2. **Validate iteratively**
|
||||
- Configure → Validate → Fix → Repeat
|
||||
- Average 2-3 iterations is normal
|
||||
- Read validation errors carefully
|
||||
|
||||
3. **Use property dependencies when stuck**
|
||||
- If field seems missing, check dependencies
|
||||
3. **Use search_properties mode when stuck**
|
||||
- If field seems missing, search for it
|
||||
- Understand what controls field visibility
|
||||
- get_property_dependencies reveals rules
|
||||
- `get_node({mode: "search_properties", propertyQuery: "..."})`
|
||||
|
||||
4. **Respect operation context**
|
||||
- Different operations = different requirements
|
||||
- Always check essentials when changing operation
|
||||
- Always check get_node when changing operation
|
||||
- Don't assume configs are transferable
|
||||
|
||||
5. **Trust auto-sanitization**
|
||||
@@ -720,15 +731,15 @@ get_node_essentials({
|
||||
|
||||
### ❌ Don't
|
||||
|
||||
1. **Jump to get_node_info immediately**
|
||||
- Try essentials first
|
||||
1. **Jump to detail="full" immediately**
|
||||
- Try standard detail first
|
||||
- Only escalate if needed
|
||||
- Full schema is overwhelming
|
||||
- Full schema is 3-8K tokens
|
||||
|
||||
2. **Configure blindly**
|
||||
- Always validate before deploying
|
||||
- Understand why fields are required
|
||||
- Check dependencies for conditional fields
|
||||
- Use search_properties for conditional fields
|
||||
|
||||
3. **Copy configs without understanding**
|
||||
- Different operations need different fields
|
||||
@@ -754,10 +765,10 @@ For comprehensive guides on specific topics:
|
||||
## Summary
|
||||
|
||||
**Configuration Strategy**:
|
||||
1. Start with get_node_essentials (91.7% success)
|
||||
1. Start with `get_node` (standard detail is default)
|
||||
2. Configure required fields for operation
|
||||
3. Validate configuration
|
||||
4. Check dependencies if stuck
|
||||
4. Search properties if stuck
|
||||
5. Iterate until valid (avg 2-3 cycles)
|
||||
6. Deploy with confidence
|
||||
|
||||
|
||||
Reference in New Issue
Block a user