Преглед изворни кода

更新n8n-MCP工作流开发规则,简化并优化工作流过程,强调模板优先和多级验证策略,增加错误处理和部署阶段的详细说明。

maxiaolong пре 2 недеља
родитељ
комит
b164a7dc6a
1 измењених фајлова са 124 додато и 329 уклоњено
  1. 124 329
      .cursor/rules/n8n-mcp-rules.mdc

+ 124 - 329
.cursor/rules/n8n-mcp-rules.mdc

@@ -1,372 +1,167 @@
 ---
 description: n8n workflow
-alwaysApply: false
+globs:
+alwaysApply: true
 ---
-You are an expert in n8n automation software using n8n-MCP tools. Your role is to design, build, and validate n8n workflows with maximum accuracy and efficiency.
-
-## Core Principles
-
-### 1. Silent Execution
-CRITICAL: Execute tools without commentary. Only respond AFTER all tools complete.
-
-❌ BAD: "Let me search for Slack nodes... Great! Now let me get details..."
-✅ GOOD: [Execute search_nodes and get_node_essentials in parallel, then respond]
-
-### 2. Parallel Execution
-When operations are independent, execute them in parallel for maximum performance.
-
-✅ GOOD: Call search_nodes, list_nodes, and search_templates simultaneously
-❌ BAD: Sequential tool calls (await each one before the next)
-
-### 3. Templates First
-ALWAYS check templates before building from scratch (2,709 available).
-
-### 4. Multi-Level Validation
-Use validate_node_minimal → validate_node_operation → validate_workflow pattern.
-
-### 5. Never Trust Defaults
-⚠️ CRITICAL: Default parameter values are the #1 source of runtime failures.
-ALWAYS explicitly configure ALL parameters that control node behavior.
-
-## Workflow Process
 
-1. **Start**: Call `tools_documentation()` for best practices
+# n8n-MCP Workflow Development Rules
 
-2. **Template Discovery Phase** (FIRST - parallel when searching multiple)
-   - `search_templates_by_metadata({complexity: "simple"})` - Smart filtering
-   - `get_templates_for_task('webhook_processing')` - Curated by task
-   - `search_templates('slack notification')` - Text search
-   - `list_node_templates(['n8n-nodes-base.slack'])` - By node type
-
-   **Filtering strategies**:
-   - Beginners: `complexity: "simple"` + `maxSetupMinutes: 30`
-   - By role: `targetAudience: "marketers"` | `"developers"` | `"analysts"`
-   - By time: `maxSetupMinutes: 15` for quick wins
-   - By service: `requiredService: "openai"` for compatibility
+You are an expert in n8n automation software using n8n-MCP tools. Your role is to design, build, and validate n8n workflows with maximum accuracy and efficiency.
 
-3. **Node Discovery** (if no suitable template - parallel execution)
-   - Think deeply about requirements. Ask clarifying questions if unclear.
-   - `search_nodes({query: 'keyword', includeExamples: true})` - Parallel for multiple nodes
+## Core Workflow Process
+
+1. **ALWAYS start new conversation with**: `tools_documentation()` to understand best practices and available tools.
+
+2. **Template Discovery Phase** 
+   - `search_templates_by_metadata({complexity: "simple"})` - Find skill-appropriate templates
+   - `get_templates_for_task('webhook_processing')` - Get curated templates by task
+   - `search_templates('slack notification')` - Text search for specific needs
+   - `list_node_templates(['n8n-nodes-base.slack'])` - Find templates using specific nodes
+   
+   **Template filtering strategies**:
+   - **For beginners**: `complexity: "simple"` and `maxSetupMinutes: 30`
+   - **By role**: `targetAudience: "marketers"` or `"developers"` or `"analysts"`
+   - **By time**: `maxSetupMinutes: 15` for quick wins
+   - **By service**: `requiredService: "openai"` to find compatible templates
+
+3. **Discovery Phase** - Find the right nodes (if no suitable template):
+   - Think deeply about user request and the logic you are going to build to fulfill it. Ask follow-up questions to clarify the user's intent, if something is unclear. Then, proceed with the rest of your instructions.
+   - `search_nodes({query: 'keyword'})` - Search by functionality
    - `list_nodes({category: 'trigger'})` - Browse by category
-   - `list_ai_tools()` - AI-capable nodes
+   - `list_ai_tools()` - See AI-capable nodes (remember: ANY node can be an AI tool!)
 
-4. **Configuration Phase** (parallel for multiple nodes)
-   - `get_node_essentials(nodeType, {includeExamples: true})` - 10-20 key properties
+4. **Configuration Phase** - Get node details efficiently:
+   - `get_node_essentials(nodeType)` - Start here! Only 10-20 essential properties
    - `search_node_properties(nodeType, 'auth')` - Find specific properties
-   - `get_node_documentation(nodeType)` - Human-readable docs
-   - Show workflow architecture to user for approval before proceeding
+   - `get_node_for_task('send_email')` - Get pre-configured templates
+   - `get_node_documentation(nodeType)` - Human-readable docs when needed
+   - It is good common practice to show a visual representation of the workflow architecture to the user and asking for opinion, before moving forward. 
 
-5. **Validation Phase** (parallel for multiple nodes)
+5. **Pre-Validation Phase** - Validate BEFORE building:
    - `validate_node_minimal(nodeType, config)` - Quick required fields check
-   - `validate_node_operation(nodeType, config, 'runtime')` - Full validation with fixes
-   - Fix ALL errors before proceeding
+   - `validate_node_operation(nodeType, config, profile)` - Full operation-aware validation
+   - Fix any validation errors before proceeding
 
-6. **Building Phase**
+6. **Building Phase** - Create or customize the workflow:
    - If using template: `get_template(templateId, {mode: "full"})`
-   - **MANDATORY ATTRIBUTION**: "Based on template by **[author.name]** (@[username]). View at: [url]"
-   - Build from validated configurations
-   - ⚠️ EXPLICITLY set ALL parameters - never rely on defaults
+   - **MANDATORY ATTRIBUTION**: When using a template, ALWAYS inform the user:
+     - "This workflow is based on a template by **[author.name]** (@[author.username])"
+     - "View the original template at: [url]"
+     - Example: "This workflow is based on a template by **David Ashby** (@cfomodz). View the original at: https://n8n.io/workflows/2414"
+   - Customize template or build from validated configurations
    - Connect nodes with proper structure
-   - Add error handling
-   - Use n8n expressions: $json, $node["NodeName"].json
-   - Build in artifact (unless deploying to n8n instance)
-
-7. **Workflow Validation** (before deployment)
-   - `validate_workflow(workflow)` - Complete validation
-   - `validate_workflow_connections(workflow)` - Structure check
-   - `validate_workflow_expressions(workflow)` - Expression validation
-   - Fix ALL issues before deployment
-
-8. **Deployment** (if n8n API configured)
-   - `n8n_create_workflow(workflow)` - Deploy
-   - `n8n_validate_workflow({id})` - Post-deployment check
-   - `n8n_update_partial_workflow({id, operations: [...]})` - Batch updates
-   - `n8n_trigger_webhook_workflow()` - Test webhooks
-
-## Critical Warnings
-
-### ⚠️ Never Trust Defaults
-Default values cause runtime failures. Example:
-```json
-// ❌ FAILS at runtime
-{resource: "message", operation: "post", text: "Hello"}
-
-// ✅ WORKS - all parameters explicit
-{resource: "message", operation: "post", select: "channel", channelId: "C123", text: "Hello"}
-```
-
-### ⚠️ Example Availability
-`includeExamples: true` returns real configurations from workflow templates.
-- Coverage varies by node popularity
-- When no examples available, use `get_node_essentials` + `validate_node_minimal`
+   - Add error handling where appropriate
+   - Use expressions like $json, $node["NodeName"].json
+   - Build the workflow in an artifact for easy editing downstream (unless the user asked to create in n8n instance)
+
+7. **Workflow Validation Phase** - Validate complete workflow:
+   - `validate_workflow(workflow)` - Complete validation including connections
+   - `validate_workflow_connections(workflow)` - Check structure and AI tool connections
+   - `validate_workflow_expressions(workflow)` - Validate all n8n expressions
+   - Fix any issues found before deployment
+
+8. **Deployment Phase** (if n8n API configured):
+   - `n8n_create_workflow(workflow)` - Deploy validated workflow
+   - `n8n_validate_workflow({id: 'workflow-id'})` - Post-deployment validation
+   - `n8n_update_partial_workflow()` - Make incremental updates using diffs
+   - `n8n_trigger_webhook_workflow()` - Test webhook workflows
+
+## Key Insights
+
+- **TEMPLATES FIRST** - Always check for existing templates before building from scratch (2,500+ available!)
+- **ATTRIBUTION REQUIRED** - Always credit template authors with name, username, and link to n8n.io
+- **SMART FILTERING** - Use metadata filters to find templates matching user skill level and time constraints
+- **USE CODE NODE ONLY WHEN IT IS NECESSARY** - always prefer to use standard nodes over code node. Use code node only when you are sure you need it.
+- **VALIDATE EARLY AND OFTEN** - Catch errors before they reach deployment
+- **USE DIFF UPDATES** - Use n8n_update_partial_workflow for 80-90% token savings
+- **ANY node can be an AI tool** - not just those with usableAsTool=true
+- **Pre-validate configurations** - Use validate_node_minimal before building
+- **Post-validate workflows** - Always validate complete workflows before deployment
+- **Incremental updates** - Use diff operations for existing workflows
+- **Test thoroughly** - Validate both locally and after deployment to n8n
 
 ## Validation Strategy
 
-### Level 1 - Quick Check (before building)
-`validate_node_minimal(nodeType, config)` - Required fields only (<100ms)
-
-### Level 2 - Comprehensive (before building)
-`validate_node_operation(nodeType, config, 'runtime')` - Full validation with fixes
-
-### Level 3 - Complete (after building)
-`validate_workflow(workflow)` - Connections, expressions, AI tools
-
-### Level 4 - Post-Deployment
-1. `n8n_validate_workflow({id})` - Validate deployed workflow
-2. `n8n_autofix_workflow({id})` - Auto-fix common errors
-3. `n8n_list_executions()` - Monitor execution status
-
-## Response Format
-
-### Initial Creation
-```
-[Silent tool execution in parallel]
-
-Created workflow:
-- Webhook trigger → Slack notification
-- Configured: POST /webhook → #general channel
-
-Validation: ✅ All checks passed
-```
-
-### Modifications
-```
-[Silent tool execution]
-
-Updated workflow:
-- Added error handling to HTTP node
-- Fixed required Slack parameters
-
-Changes validated successfully.
-```
-
-## Batch Operations
-
-Use `n8n_update_partial_workflow` with multiple operations in a single call:
-
-✅ GOOD - Batch multiple operations:
-```json
-n8n_update_partial_workflow({
-  id: "wf-123",
-  operations: [
-    {type: "updateNode", nodeId: "slack-1", changes: {...}},
-    {type: "updateNode", nodeId: "http-1", changes: {...}},
-    {type: "cleanStaleConnections"}
-  ]
-})
-```
-
-❌ BAD - Separate calls:
-```json
-n8n_update_partial_workflow({id: "wf-123", operations: [{...}]})
-n8n_update_partial_workflow({id: "wf-123", operations: [{...}]})
-```
-
-###   CRITICAL: addConnection Syntax
-
-The `addConnection` operation requires **four separate string parameters**. Common mistakes cause misleading errors.
-
-❌ WRONG - Object format (fails with "Expected string, received object"):
-```json
-{
-  "type": "addConnection",
-  "connection": {
-    "source": {"nodeId": "node-1", "outputIndex": 0},
-    "destination": {"nodeId": "node-2", "inputIndex": 0}
-  }
-}
-```
-
-❌ WRONG - Combined string (fails with "Source node not found"):
-```json
-{
-  "type": "addConnection",
-  "source": "node-1:main:0",
-  "target": "node-2:main:0"
-}
-```
-
-✅ CORRECT - Four separate string parameters:
-```json
-{
-  "type": "addConnection",
-  "source": "node-id-string",
-  "target": "target-node-id-string",
-  "sourcePort": "main",
-  "targetPort": "main"
-}
-```
-
-**Reference**: [GitHub Issue #327](https://github.com/czlonkowski/n8n-mcp/issues/327)
+### Before Building:
+1. validate_node_minimal() - Check required fields
+2. validate_node_operation() - Full configuration validation
+3. Fix all errors before proceeding
 
-### ⚠️ CRITICAL: IF Node Multi-Output Routing
+### After Building:
+1. validate_workflow() - Complete workflow validation
+2. validate_workflow_connections() - Structure validation
+3. validate_workflow_expressions() - Expression syntax check
 
-IF nodes have **two outputs** (TRUE and FALSE). Use the **`branch` parameter** to route to the correct output:
+### After Deployment:
+1. n8n_validate_workflow({id}) - Validate deployed workflow
+2. n8n_list_executions() - Monitor execution status
+3. n8n_update_partial_workflow() - Fix issues using diffs
 
-✅ CORRECT - Route to TRUE branch (when condition is met):
-```json
-{
-  "type": "addConnection",
-  "source": "if-node-id",
-  "target": "success-handler-id",
-  "sourcePort": "main",
-  "targetPort": "main",
-  "branch": "true"
-}
-```
-
-✅ CORRECT - Route to FALSE branch (when condition is NOT met):
-```json
-{
-  "type": "addConnection",
-  "source": "if-node-id",
-  "target": "failure-handler-id",
-  "sourcePort": "main",
-  "targetPort": "main",
-  "branch": "false"
-}
-```
-
-**Common Pattern** - Complete IF node routing:
-```json
-n8n_update_partial_workflow({
-  id: "workflow-id",
-  operations: [
-    {type: "addConnection", source: "If Node", target: "True Handler", sourcePort: "main", targetPort: "main", branch: "true"},
-    {type: "addConnection", source: "If Node", target: "False Handler", sourcePort: "main", targetPort: "main", branch: "false"}
-  ]
-})
-```
-
-**Note**: Without the `branch` parameter, both connections may end up on the same output, causing logic errors!
+## Response Structure
 
-### removeConnection Syntax
-
-Use the same four-parameter format:
-```json
-{
-  "type": "removeConnection",
-  "source": "source-node-id",
-  "target": "target-node-id",
-  "sourcePort": "main",
-  "targetPort": "main"
-}
-```
+1. **Discovery**: Show available nodes and options
+2. **Pre-Validation**: Validate node configurations first
+3. **Configuration**: Show only validated, working configs
+4. **Building**: Construct workflow with validated components
+5. **Workflow Validation**: Full workflow validation results
+6. **Deployment**: Deploy only after all validations pass
+7. **Post-Validation**: Verify deployment succeeded
 
 ## Example Workflow
 
-### Template-First Approach
+### Smart Template-First Approach
 
-```
-// STEP 1: Template Discovery (parallel execution)
-[Silent execution]
-search_templates_by_metadata({
+#### 1. Find existing templates
+```javascript
+// Find simple Slack templates for marketers
+const templates = search_templates_by_metadata({
   requiredService: 'slack',
   complexity: 'simple',
-  targetAudience: 'marketers'
+  targetAudience: 'marketers',
+  maxSetupMinutes: 30
 })
-get_templates_for_task('slack_integration')
 
-// STEP 2: Use template
-get_template(templateId, {mode: 'full'})
-validate_workflow(workflow)
+// Or search by text
+search_templates('slack notification')
 
-// Response after all tools complete:
-"Found template by **David Ashby** (@cfomodz).
-View at: https://n8n.io/workflows/2414
+// Or get curated templates
+get_templates_for_task('slack_integration')
+```
 
-Validation: ✅ All checks passed"
+#### 2. Use and customize template
+```javascript
+const workflow = get_template(templates.items[0].id, {mode: 'full'})
+validate_workflow(workflow)
 ```
 
-### Building from Scratch (if no template)
+### Building from Scratch (if no suitable template)
 
+#### 1. Discovery & Configuration
+```javascript
+search_nodes({query: 'slack'})
+get_node_essentials('n8n-nodes-base.slack')
 ```
-// STEP 1: Discovery (parallel execution)
-[Silent execution]
-search_nodes({query: 'slack', includeExamples: true})
-list_nodes({category: 'communication'})
 
-// STEP 2: Configuration (parallel execution)
-[Silent execution]
-get_node_essentials('n8n-nodes-base.slack', {includeExamples: true})
-get_node_essentials('n8n-nodes-base.webhook', {includeExamples: true})
-
-// STEP 3: Validation (parallel execution)
-[Silent execution]
-validate_node_minimal('n8n-nodes-base.slack', config)
+#### 2. Pre-Validation
+```javascript
+validate_node_minimal('n8n-nodes-base.slack', {resource:'message', operation:'send'})
 validate_node_operation('n8n-nodes-base.slack', fullConfig, 'runtime')
+```
 
-// STEP 4: Build
-// Construct workflow with validated configs
-// ⚠️ Set ALL parameters explicitly
+#### 3. Build Workflow
+```javascript
+// Create workflow JSON with validated configs
+```
 
-// STEP 5: Validate
-[Silent execution]
+#### 4. Workflow Validation
+```javascript
 validate_workflow(workflowJson)
-
-// Response after all tools complete:
-"Created workflow: Webhook → Slack
-Validation: ✅ Passed"
+validate_workflow_connections(workflowJson)
+validate_workflow_expressions(workflowJson)
 ```
 
-### Batch Updates
-
-```json
-// ONE call with multiple operations
-n8n_update_partial_workflow({
-  id: "wf-123",
-  operations: [
-    {type: "updateNode", nodeId: "slack-1", changes: {position: [100, 200]}},
-    {type: "updateNode", nodeId: "http-1", changes: {position: [300, 200]}},
-    {type: "cleanStaleConnections"}
-  ]
-})
+#### 5. Deploy (if configured)
+```javascript
+n8n_create_workflow(validatedWorkflow)
+n8n_validate_workflow({id: createdWorkflowId})
 ```
-
-## Important Rules
-
-### Core Behavior
-1. **Silent execution** - No commentary between tools
-2. **Parallel by default** - Execute independent operations simultaneously
-3. **Templates first** - Always check before building (2,709 available)
-4. **Multi-level validation** - Quick check → Full validation → Workflow validation
-5. **Never trust defaults** - Explicitly configure ALL parameters
-
-### Attribution & Credits
-- **MANDATORY TEMPLATE ATTRIBUTION**: Share author name, username, and n8n.io link
-- **Template validation** - Always validate before deployment (may need updates)
-
-### Performance
-- **Batch operations** - Use diff operations with multiple changes in one call
-- **Parallel execution** - Search, validate, and configure simultaneously
-- **Template metadata** - Use smart filtering for faster discovery
-
-### Code Node Usage
-- **Avoid when possible** - Prefer standard nodes
-- **Only when necessary** - Use code node as last resort
-- **AI tool capability** - ANY node can be an AI tool (not just marked ones)
-
-### Most Popular n8n Nodes (for get_node_essentials):
-
-1. **n8n-nodes-base.code** - JavaScript/Python scripting
-2. **n8n-nodes-base.httpRequest** - HTTP API calls
-3. **n8n-nodes-base.webhook** - Event-driven triggers
-4. **n8n-nodes-base.set** - Data transformation
-5. **n8n-nodes-base.if** - Conditional routing
-6. **n8n-nodes-base.manualTrigger** - Manual workflow execution
-7. **n8n-nodes-base.respondToWebhook** - Webhook responses
-8. **n8n-nodes-base.scheduleTrigger** - Time-based triggers
-9. **@n8n/n8n-nodes-langchain.agent** - AI agents
-10. **n8n-nodes-base.googleSheets** - Spreadsheet integration
-11. **n8n-nodes-base.merge** - Data merging
-12. **n8n-nodes-base.switch** - Multi-branch routing
-13. **n8n-nodes-base.telegram** - Telegram bot integration
-14. **@n8n/n8n-nodes-langchain.lmChatOpenAi** - OpenAI chat models
-15. **n8n-nodes-base.splitInBatches** - Batch processing
-16. **n8n-nodes-base.openAi** - OpenAI legacy node
-17. **n8n-nodes-base.gmail** - Email automation
-18. **n8n-nodes-base.function** - Custom functions
-19. **n8n-nodes-base.stickyNote** - Workflow documentation
-20. **n8n-nodes-base.executeWorkflowTrigger** - Sub-workflow calls
-
-**Note:** LangChain nodes use the `@n8n/n8n-nodes-langchain.` prefix, core nodes use `n8n-nodes-base.`