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:
Romuald Członkowski
2026-01-08 15:37:57 +01:00
parent ec350daa6e
commit d9c2872029
27 changed files with 2393 additions and 610 deletions

View File

@@ -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**:

View File

@@ -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