Back to Skills
    🦞

    n8n

    Manage n8n workflows and automations via API.

    By @thomasansems
    View on GitHub
    SKILL.md
    ---
    name: n8n
    description: Manage n8n workflows and automations via API. Use when working with n8n workflows, executions, or automation tasks - listing workflows, activating/deactivating, checking execution status, manually triggering workflows, or debugging automation issues.
    metadata: {"openclaw":{"emoji":"\u2699\ufe0f","requires":{"env":["N8N_API_KEY","N8N_BASE_URL"]},"primaryEnv":"N8N_API_KEY"}}
    ---
    
    # n8n Workflow Management
    
    Comprehensive workflow automation management for n8n platform with creation, testing, execution monitoring, and performance optimization capabilities.
    
    ## ⚠️ CRITICAL: Workflow Creation Rules
    
    **When creating n8n workflows, ALWAYS:**
    
    1. ✅ **Generate COMPLETE workflows** with all functional nodes
    2. ✅ **Include actual HTTP Request nodes** for API calls (ImageFX, Gemini, Veo, Suno, etc.)
    3. ✅ **Add Code nodes** for data transformation and logic
    4. ✅ **Create proper connections** between all nodes
    5. ✅ **Use real node types** (n8n-nodes-base.httpRequest, n8n-nodes-base.code, n8n-nodes-base.set)
    
    **NEVER:**
    - ❌ Create "Setup Instructions" placeholder nodes
    - ❌ Generate workflows with only TODO comments
    - ❌ Make incomplete workflows requiring manual node addition
    - ❌ Use text-only nodes as substitutes for real functionality
    
    **Example GOOD workflow:**
    ```
    Manual Trigger → Set Config → HTTP Request (API call) → Code (parse) → Response
    ```
    
    **Example BAD workflow:**
    ```
    Manual Trigger → Code ("Add HTTP nodes here, configure APIs...")
    ```
    
    Always build the complete, functional workflow with all necessary nodes configured and connected.
    
    ## Setup
    
    **Required environment variables:**
    - `N8N_API_KEY` — Your n8n API key (Settings → API in the n8n UI)
    - `N8N_BASE_URL` — Your n8n instance URL
    
    **Configure credentials via OpenClaw settings:**
    
    Add to `~/.config/openclaw/settings.json`:
    ```json
    {
      "skills": {
        "n8n": {
          "env": {
            "N8N_API_KEY": "your-api-key-here",
            "N8N_BASE_URL": "your-n8n-url-here"
          }
        }
      }
    }
    ```
    
    Or set per-session (do **not** persist secrets in shell rc files):
    ```bash
    export N8N_API_KEY="your-api-key-here"
    export N8N_BASE_URL="your-n8n-url-here"
    ```
    
    **Verify connection:**
    ```bash
    python3 scripts/n8n_api.py list-workflows --pretty
    ```
    
    > **Security note:** Never store API keys in plaintext shell config files (`~/.bashrc`, `~/.zshrc`). Use the OpenClaw settings file or a secure secret manager.
    
    ## Quick Reference
    
    ### Workflow Management
    
    #### List Workflows
    ```bash
    python3 scripts/n8n_api.py list-workflows --pretty
    python3 scripts/n8n_api.py list-workflows --active true --pretty
    ```
    
    #### Get Workflow Details
    ```bash
    python3 scripts/n8n_api.py get-workflow --id <workflow-id> --pretty
    ```
    
    #### Create Workflows
    ```bash
    # From JSON file
    python3 scripts/n8n_api.py create --from-file workflow.json
    ```
    
    #### Activate/Deactivate
    ```bash
    python3 scripts/n8n_api.py activate --id <workflow-id>
    python3 scripts/n8n_api.py deactivate --id <workflow-id>
    ```
    
    ### Testing & Validation
    
    #### Validate Workflow Structure
    ```bash
    # Validate existing workflow
    python3 scripts/n8n_tester.py validate --id <workflow-id>
    
    # Validate from file
    python3 scripts/n8n_tester.py validate --file workflow.json --pretty
    
    # Generate validation report
    python3 scripts/n8n_tester.py report --id <workflow-id>
    ```
    
    #### Dry Run Testing
    ```bash
    # Test with data
    python3 scripts/n8n_tester.py dry-run --id <workflow-id> --data '{"email": "test@example.com"}'
    
    # Test with data file
    python3 scripts/n8n_tester.py dry-run --id <workflow-id> --data-file test-data.json
    
    # Full test report (validation + dry run)
    python3 scripts/n8n_tester.py dry-run --id <workflow-id> --data-file test.json --report
    ```
    
    #### Test Suite
    ```bash
    # Run multiple test cases
    python3 scripts/n8n_tester.py test-suite --id <workflow-id> --test-suite test-cases.json
    ```
    
    ### Execution Monitoring
    
    #### List Executions
    ```bash
    # Recent executions (all workflows)
    python3 scripts/n8n_api.py list-executions --limit 10 --pretty
    
    # Specific workflow executions
    python3 scripts/n8n_api.py list-executions --id <workflow-id> --limit 20 --pretty
    ```
    
    #### Get Execution Details
    ```bash
    python3 scripts/n8n_api.py get-execution --id <execution-id> --pretty
    ```
    
    #### Manual Execution
    ```bash
    # Trigger workflow
    python3 scripts/n8n_api.py execute --id <workflow-id>
    
    # Execute with data
    python3 scripts/n8n_api.py execute --id <workflow-id> --data '{"key": "value"}'
    ```
    
    ### Performance Optimization
    
    #### Analyze Performance
    ```bash
    # Full performance analysis
    python3 scripts/n8n_optimizer.py analyze --id <workflow-id> --pretty
    
    # Analyze specific period
    python3 scripts/n8n_optimizer.py analyze --id <workflow-id> --days 30 --pretty
    ```
    
    #### Get Optimization Suggestions
    ```bash
    # Priority-ranked suggestions
    python3 scripts/n8n_optimizer.py suggest --id <workflow-id> --pretty
    ```
    
    #### Generate Optimization Report
    ```bash
    # Human-readable report with metrics, bottlenecks, and suggestions
    python3 scripts/n8n_optimizer.py report --id <workflow-id>
    ```
    
    #### Get Workflow Statistics
    ```bash
    # Execution statistics
    python3 scripts/n8n_api.py stats --id <workflow-id> --days 7 --pretty
    ```
    
    ## Python API
    
    ### Basic Usage
    
    ```python
    from scripts.n8n_api import N8nClient
    
    client = N8nClient()
    
    # List workflows
    workflows = client.list_workflows(active=True)
    
    # Get workflow
    workflow = client.get_workflow('workflow-id')
    
    # Create workflow
    new_workflow = client.create_workflow({
        'name': 'My Workflow',
        'nodes': [...],
        'connections': {...}
    })
    
    # Activate/deactivate
    client.activate_workflow('workflow-id')
    client.deactivate_workflow('workflow-id')
    
    # Executions
    executions = client.list_executions(workflow_id='workflow-id', limit=10)
    execution = client.get_execution('execution-id')
    
    # Execute workflow
    result = client.execute_workflow('workflow-id', data={'key': 'value'})
    ```
    
    ### Validation & Testing
    
    ```python
    from scripts.n8n_api import N8nClient
    from scripts.n8n_tester import WorkflowTester
    
    client = N8nClient()
    tester = WorkflowTester(client)
    
    # Validate workflow
    validation = tester.validate_workflow(workflow_id='123')
    print(f"Valid: {validation['valid']}")
    print(f"Errors: {validation['errors']}")
    print(f"Warnings: {validation['warnings']}")
    
    # Dry run
    result = tester.dry_run(
        workflow_id='123',
        test_data={'email': 'test@example.com'}
    )
    print(f"Status: {result['status']}")
    
    # Test suite
    test_cases = [
        {'name': 'Test 1', 'input': {...}, 'expected': {...}},
        {'name': 'Test 2', 'input': {...}, 'expected': {...}}
    ]
    results = tester.test_suite('123', test_cases)
    print(f"Passed: {results['passed']}/{results['total_tests']}")
    
    # Generate report
    report = tester.generate_test_report(validation, result)
    print(report)
    ```
    
    ### Performance Optimization
    
    ```python
    from scripts.n8n_optimizer import WorkflowOptimizer
    
    optimizer = WorkflowOptimizer()
    
    # Analyze performance
    analysis = optimizer.analyze_performance('workflow-id', days=7)
    print(f"Performance Score: {analysis['performance_score']}/100")
    print(f"Health: {analysis['execution_metrics']['health']}")
    
    # Get suggestions
    suggestions = optimizer.suggest_optimizations('workflow-id')
    print(f"Priority Actions: {len(suggestions['priority_actions'])}")
    print(f"Quick Wins: {len(suggestions['quick_wins'])}")
    
    # Generate report
    report = optimizer.generate_optimization_report(analysis)
    print(report)
    ```
    
    ## Common Workflows
    
    ### 1. Validate and Test Workflow
    
    ```bash
    # Validate workflow structure
    python3 scripts/n8n_tester.py validate --id <workflow-id> --pretty
    
    # Test with sample data
    python3 scripts/n8n_tester.py dry-run --id <workflow-id> \
      --data '{"email": "test@example.com", "name": "Test User"}'
    
    # If tests pass, activate
    python3 scripts/n8n_api.py activate --id <workflow-id>
    ```
    
    ### 2. Debug Failed Workflow
    
    ```bash
    # Check recent executions
    python3 scripts/n8n_api.py list-executions --id <workflow-id> --limit 10 --pretty
    
    # Get specific execution details
    python3 scripts/n8n_api.py get-execution --id <execution-id> --pretty
    
    # Validate workflow structure
    python3 scripts/n8n_tester.py validate --id <workflow-id>
    
    # Generate test report
    python3 scripts/n8n_tester.py report --id <workflow-id>
    
    # Check for optimization issues
    python3 scripts/n8n_optimizer.py report --id <workflow-id>
    ```
    
    ### 3. Optimize Workflow Performance
    
    ```bash
    # Analyze current performance
    python3 scripts/n8n_optimizer.py analyze --id <workflow-id> --days 30 --pretty
    
    # Get actionable suggestions
    python3 scripts/n8n_optimizer.py suggest --id <workflow-id> --pretty
    
    # Generate comprehensive report
    python3 scripts/n8n_optimizer.py report --id <workflow-id>
    
    # Review execution statistics
    python3 scripts/n8n_api.py stats --id <workflow-id> --days 30 --pretty
    
    # Test optimizations with dry run
    python3 scripts/n8n_tester.py dry-run --id <workflow-id> --data-file test-data.json
    ```
    
    ### 4. Monitor Workflow Health
    
    ```bash
    # Check active workflows
    python3 scripts/n8n_api.py list-workflows --active true --pretty
    
    # Review recent execution status
    python3 scripts/n8n_api.py list-executions --limit 20 --pretty
    
    # Get statistics for each critical workflow
    python3 scripts/n8n_api.py stats --id <workflow-id> --pretty
    
    # Generate health reports
    python3 scripts/n8n_optimizer.py report --id <workflow-id>
    ```
    
    ## Validation Checks
    
    The testing module performs comprehensive validation:
    
    ### Structure Validation
    - ✓ Required fields present (nodes, connections)
    - ✓ All nodes have names and types
    - ✓ Connection targets exist
    - ✓ No disconnected nodes (warning)
    
    ### Configuration Validation
    - ✓ Nodes requiring credentials are configured
    - ✓ Required parameters are set
    - ✓ HTTP nodes have URLs
    - ✓ Webhook nodes have paths
    - ✓ Email nodes have content
    
    ### Flow Validation
    - ✓ Workflow has trigger nodes
    - ✓ Proper execution flow
    - ✓ No circular dependencies
    - ✓ End nodes identified
    
    ## Optimization Analysis
    
    The optimizer analyzes multiple dimensions:
    
    ### Execution Metrics
    - Total executions
    - Success/failure rates
    - Health status (excellent/g
    
    ... (truncated)