[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JE603S40EBVCEH2DC4GEAM":3,"skill-same:01M6JE603S40EBVCEH2DC4GEAM":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6JE603S40EBVCEH2DC4GEAM","n8n-mcp-tools-expert",null,"Expert guide for using n8n-mcp MCP tools effectively. Use when searching for nodes, validating configurations, accessing templates, managing workflows, managing credentials, auditing instance security, or using any n8n-mcp tool. Provides tool selection guidance, parameter formats, and common patterns. IMPORTANT — Always consult this skill before calling any n8n-mcp tool — it prevents common mistakes like wrong nodeType formats, incorrect parameter structures, and inefficient tool usage. If the user mentions n8n, workflows, nodes, or automation and you have n8n MCP tools available, use this skill first.","S3YED\u002Fappie-kit","S3YED","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F62743867?v=4","01M6JBKBRRVP6KMS0VWZ27T3R6","01M6JBKBX0KG30284PW1DBYJT1",14,"MIT","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fn8n-workflows\u002Fn8n-mcp-tools-expert\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"mcp tools","Tools","n8n mcp tools expert","MCP","expert","n8n","guide","for","formats","usage","you","calling","patterns","selection","common","tool","consult","credentials","workflows","security","2026-11-10 10:12:30",false,"---\nname: n8n-mcp-tools-expert\ndescription: Expert guide for using n8n-mcp MCP tools effectively. Use when searching for nodes, validating configurations, accessing templates, managing workflows, managing credentials, auditing instance security, or using any n8n-mcp tool. Provides tool selection guidance, parameter formats, and common patterns. IMPORTANT — Always consult this skill before calling any n8n-mcp tool — it prevents common mistakes like wrong nodeType formats, incorrect parameter structures, and inefficient tool usage. If the user mentions n8n, workflows, nodes, or automation and you have n8n MCP tools available, use this skill first.\n---\n\n# n8n MCP Tools Expert\n\nMaster guide for using n8n-mcp MCP server tools to build workflows.\n\n---\n\n## Tool Categories\n\nn8n-mcp provides tools organized into categories:\n\n1. **Node Discovery** → [SEARCH_GUIDE.md](SEARCH_GUIDE.md)\n2. **Configuration Validation** → [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md)\n3. **Workflow Management** → [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md)\n4. **Template Library** - Search and deploy 2,700+ real workflows\n5. **Data Tables** - Manage n8n data tables and rows (`n8n_manage_datatable`)\n6. **Credential Management** - Full credential CRUD + schema discovery (`n8n_manage_credentials`)\n7. **Security & Audit** - Instance security auditing with custom deep scan (`n8n_audit_instance`)\n8. **Documentation & Guides** - Tool docs, AI agent guide, Code node guides\n\n---\n\n## Quick Reference\n\n### Most Used Tools (by success rate)\n\n| Tool | Use When | Speed |\n|------|----------|-------|\n| `search_nodes` | Finding nodes by keyword | \u003C20ms |\n| `get_node` | Understanding node operations (detail=\"standard\") | \u003C10ms |\n| `validate_node` | Checking configurations (mode=\"full\") | \u003C100ms |\n| `n8n_create_workflow` | Creating workflows | 100-500ms |\n| `n8n_update_partial_workflow` | Editing workflows (MOST USED!) | 50-200ms |\n| `validate_workflow` | Checking complete workflow | 100-500ms |\n| `n8n_deploy_template` | Deploy template to n8n instance | 200-500ms |\n| `n8n_manage_datatable` | Managing data tables and rows | 50-500ms |\n| `n8n_manage_credentials` | Credential CRUD + schema discovery | 50-500ms |\n| `n8n_audit_instance` | Security audit (built-in + custom scan) | 500-5000ms |\n| `n8n_autofix_workflow` | Auto-fix validation errors | 200-1500ms |\n\n---\n\n## Tool Selection Guide\n\n### Finding the Right Node\n\n**Workflow**:\n```\n1. search_nodes({query: \"keyword\"})\n2. get_node({nodeType: \"nodes-base.name\"})\n3. [Optional] get_node({nodeType: \"nodes-base.name\", mode: \"docs\"})\n```\n\n**Example**:\n```javascript\n\u002F\u002F Step 1: Search\nsearch_nodes({query: \"slack\"})\n\u002F\u002F Returns: nodes-base.slack\n\n\u002F\u002F Step 2: Get details\nget_node({nodeType: \"nodes-base.slack\"})\n\u002F\u002F Returns: operations, properties, examples (standard detail)\n\n\u002F\u002F Step 3: Get readable documentation\nget_node({nodeType: \"nodes-base.slack\", mode: \"docs\"})\n\u002F\u002F Returns: markdown documentation\n```\n\n**Common pattern**: search → get_node (18s average)\n\n### Validating Configuration\n\n**Workflow**:\n```\n1. validate_node({nodeType, config: {}, mode: \"minimal\"}) - Check required fields\n2. validate_node({nodeType, config, profile: \"runtime\"}) - Full validation\n3. [Repeat] Fix errors, validate again\n```\n\n**Common pattern**: validate → fix → validate (23s thinking, 58s fixing per cycle)\n\n### Managing Workflows\n\n**Workflow**:\n```\n1. n8n_create_workflow({name, nodes, connections})\n2. n8n_validate_workflow({id})\n3. n8n_update_partial_workflow({id, operations: [...]})\n4. n8n_validate_workflow({id}) again\n5. n8n_update_partial_workflow({id, operations: [{type: \"activateWorkflow\"}]})\n```\n\n**Common pattern**: iterative updates (56s average between edits)\n\n---\n\n## Critical: nodeType Formats\n\n**Two different formats** for different tools!\n\n### Format 1: Search\u002FValidate Tools\n```javascript\n\u002F\u002F Use SHORT prefix\n\"nodes-base.slack\"\n\"nodes-base.httpRequest\"\n\"nodes-base.webhook\"\n\"nodes-langchain.agent\"\n```\n\n**Tools that use this**:\n- search_nodes (returns this format)\n- get_node\n- validate_node\n- validate_workflow\n\n### Format 2: Workflow Tools\n```javascript\n\u002F\u002F Use FULL prefix\n\"n8n-nodes-base.slack\"\n\"n8n-nodes-base.httpRequest\"\n\"n8n-nodes-base.webhook\"\n\"@n8n\u002Fn8n-nodes-langchain.agent\"\n```\n\n**Tools that use this**:\n- n8n_create_workflow\n- n8n_update_partial_workflow\n\n### Conversion\n\n```javascript\n\u002F\u002F search_nodes returns BOTH formats\n{\n  \"nodeType\": \"nodes-base.slack\",          \u002F\u002F For search\u002Fvalidate tools\n  \"workflowNodeType\": \"n8n-nodes-base.slack\"  \u002F\u002F For workflow tools\n}\n```\n\n---\n\n## Common Mistakes\n\n### Mistake 1: Wrong nodeType Format\n\n**Problem**: \"Node not found\" error\n\n```javascript\n\u002F\u002F WRONG\nget_node({nodeType: \"slack\"})  \u002F\u002F Missing prefix\nget_node({nodeType: \"n8n-nodes-base.slack\"})  \u002F\u002F Wrong prefix\n\n\u002F\u002F CORRECT\nget_node({nodeType: \"nodes-base.slack\"})\n```\n\n### Mistake 2: Using detail=\"full\" by Default\n\n**Problem**: Huge payload, slower response, token waste\n\n```javascript\n\u002F\u002F WRONG - Returns 3-8K tokens, use sparingly\nget_node({nodeType: \"nodes-base.slack\", detail: \"full\"})\n\n\u002F\u002F CORRECT - Returns 1-2K tokens, covers 95% of use cases\nget_node({nodeType: \"nodes-base.slack\"})  \u002F\u002F detail=\"standard\" is default\nget_node({nodeType: \"nodes-base.slack\", detail: \"standard\"})\n```\n\n**When to use detail=\"full\"**:\n- Debugging complex configuration issues\n- Need complete property schema with all nested options\n- Exploring advanced features\n\n**Better alternatives**:\n1. `get_node({detail: \"standard\"})` - for operations list (default)\n2. `get_node({mode: \"docs\"})` - for readable documentation\n3. `get_node({mode: \"search_properties\", propertyQuery: \"auth\"})` - for specific property\n\n### Mistake 3: Not Using Validation Profiles\n\n**Problem**: Too many false positives OR missing real errors\n\n**Profiles**:\n- `minimal` - Only required fields (fast, permissive)\n- `runtime` - Values + types (recommended for pre-deployment)\n- `ai-friendly` - Reduce false positives (for AI configuration)\n- `strict` - Maximum validation (for production)\n\n```javascript\n\u002F\u002F WRONG - Uses default profile\nvalidate_node({nodeType, config})\n\n\u002F\u002F CORRECT - Explicit profile\nvalidate_node({nodeType, config, profile: \"runtime\"})\n```\n\n### Mistake 4: Ignoring Auto-Sanitization\n\n**What happens**: ALL nodes sanitized on ANY workflow update\n\n**Auto-fixes**:\n- Binary operators (equals, contains) → removes singleValue\n- Unary operators (isEmpty, isNotEmpty) → adds singleValue: true\n- IF\u002FSwitch nodes → adds missing metadata\n\n**Cannot fix**:\n- Broken connections\n- Branch count mismatches\n- Paradoxical corrupt states\n\n```javascript\n\u002F\u002F After ANY update, auto-sanitization runs on ALL nodes\nn8n_update_partial_workflow({id, operations: [...]})\n\u002F\u002F → Automatically fixes operator structures\n```\n\n### Mistake 5: Not Using Smart Parameters\n\n**Problem**: Complex sourceIndex calculations for multi-output nodes\n\n**Old way** (manual):\n```javascript\n\u002F\u002F IF node connection\n{\n  type: \"addConnection\",\n  source: \"IF\",\n  target: \"Handler\",\n  sourceIndex: 0  \u002F\u002F Which output? Hard to remember!\n}\n```\n\n**New way** (smart parameters):\n```javascript\n\u002F\u002F IF node - semantic branch names\n{\n  type: \"addConnection\",\n  source: \"IF\",\n  target: \"True Handler\",\n  branch: \"true\"  \u002F\u002F Clear and readable!\n}\n\n{\n  type: \"addConnection\",\n  source: \"IF\",\n  target: \"False Handler\",\n  branch: \"false\"\n}\n\n\u002F\u002F Switch node - semantic case numbers\n{\n  type: \"addConnection\",\n  source: \"Switch\",\n  target: \"Handler A\",\n  case: 0\n}\n```\n\n### Mistake 7: Wrong Parameter Name for updateNode\n\n**Problem**: Using `parameters` instead of `updates`\n\n```javascript\n\u002F\u002F WRONG\nn8n_update_partial_workflow({\n  id: \"wf-123\",\n  operations: [{\n    type: \"updateNode\",\n    nodeName: \"HTTP Request\",\n    parameters: {url: \"...\"}  \u002F\u002F ❌ Wrong key\n  }]\n})\n\n\u002F\u002F CORRECT\nn8n_update_partial_workflow({\n  id: \"wf-123\",\n  operations: [{\n    type: \"updateNode\",\n    nodeName: \"HTTP Request\",\n    updates: {url: \"...\"}  \u002F\u002F ✅ Correct key\n  }]\n})\n```\n\n### Mistake 8: Wrong Credential Attachment Format\n\n**Problem**: Credentials not attaching to nodes\n\n```javascript\n\u002F\u002F WRONG - credentials as flat object\nupdates: {credentials: \"myApiKey\"}\n\n\u002F\u002F CORRECT - credentials nested by type with id and name\nupdates: {\n  credentials: {\n    httpHeaderAuth: {\n      id: \"abc123\",\n      name: \"My API Key\"\n    }\n  }\n}\n```\n\n### Mistake 6: Not Using intent Parameter\n\n**Problem**: Less helpful tool responses\n\n```javascript\n\u002F\u002F WRONG - No context for response\nn8n_update_partial_workflow({\n  id: \"abc\",\n  operations: [{type: \"addNode\", node: {...}}]\n})\n\n\u002F\u002F CORRECT - Better AI responses\nn8n_update_partial_workflow({\n  id: \"abc\",\n  intent: \"Add error handling for API failures\",\n  operations: [{type: \"addNode\", node: {...}}]\n})\n```\n\n---\n\n## Tool Usage Patterns\n\n### Pattern 1: Node Discovery (Most Common)\n\n**Common workflow**: 18s average between steps\n\n```javascript\n\u002F\u002F Step 1: Search (fast!)\nconst results = await search_nodes({\n  query: \"slack\",\n  mode: \"OR\",  \u002F\u002F Default: any word matches\n  limit: 20\n});\n\u002F\u002F → Returns: nodes-base.slack, nodes-base.slackTrigger\n\n\u002F\u002F Step 2: Get details (~18s later, user reviewing results)\nconst details = await get_node({\n  nodeType: \"nodes-base.slack\",\n  includeExamples: true  \u002F\u002F Get real template configs\n});\n\u002F\u002F → Returns: operations, properties, metadata\n```\n\n### Pattern 2: Validation Loop\n\n**Typical cycle**: 23s thinking, 58s fixing\n\n```javascript\n\u002F\u002F Step 1: Validate\nconst result = await validate_node({\n  nodeType: \"nodes-base.slack\",\n  config: {\n    resource: \"channel\",\n    operation: \"create\"\n  },\n  profile: \"runtime\"\n});\n\n\u002F\u002F Step 2: Check errors (~23s thinking)\nif (!result.valid) {\n  console.log(result.errors);  \u002F\u002F \"Missing required field: name\"\n}\n\n\u002F\u002F Step 3: Fix config (~58s fixing)\nconfig.name = \"general\";\n\n\u002F\u002F Step 4: Validate again\nawait validate_node({...});  \u002F\u002F Repeat until clean\n```\n\n### Pattern 3: Workflow Editing\n\n**Most used update tool**: 99.0% success rate, 56s average between edits\n\n```javascript\n\u002F\u002F Iterative workflow building (NOT one-shot!)\n\u002F\u002F Edit 1\nawait n8n_update_partial_workflow({\n  id: \"workflow-id\",\n  intent: \"Add webhook trigger\",\n  operations: [{type: \"addNode\", node: {...}}]\n});\n\n\u002F\u002F ~56s later...\n\n\u002F\u002F Edit 2\nawait n8n_update_partial_workflow({\n  id: \"workflow-id\",\n  intent: \"Connect webhook to processor\",\n  operations: [{type: \"addConnection\", source: \"...\", target: \"...\"}]\n});\n\n\u002F\u002F ~56s later...\n\n\u002F\u002F Edit 3 (validation)\nawait n8n_validate_workflow({id: \"workflow-id\"});\n\n\u002F\u002F Ready? Activate!\nawait n8n_update_partial_workflow({\n  id: \"workflow-id\",\n  intent: \"Activate workflow for production\",\n  operations: [{type: \"activateWorkflow\"}]\n});\n```\n\n---\n\n## Detailed Guides\n\n### Node Discovery Tools\nSee [SEARCH_GUIDE.md](SEARCH_GUIDE.md) for:\n- search_nodes\n- get_node with detail levels (minimal, standard, full)\n- get_node modes (info, docs, search_properties, versions)\n\n### Validation Tools\nSee [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md) for:\n- Validation profiles explained\n- validate_node with modes (minimal, full)\n- validate_workflow complete structure\n- Auto-sanitization system\n- Handling validation errors\n\n### Workflow Management\nSee [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md) for:\n- n8n_create_workflow\n- n8n_update_partial_workflow (19 operation types including patchNodeField!)\n- Smart parameters (branch, case)\n- AI connection types (8 types)\n- Workflow activation (activateWorkflow\u002FdeactivateWorkflow)\n- n8n_deploy_template\n- n8n_workflow_versions\n- n8n_manage_credentials (credential CRUD + schema discovery)\n- n8n_audit_instance (security auditing)\n\n---\n\n## Template Usage\n\n### Search Templates\n\n```javascript\n\u002F\u002F Search by keyword (default mode)\nsearch_templates({\n  query: \"webhook slack\",\n  limit: 20\n});\n\n\u002F\u002F Search by node types\nsearch_templates({\n  searchMode: \"by_nodes\",\n  nodeTypes: [\"n8n-nodes-base.httpRequest\", \"n8n-nodes-base.slack\"]\n});\n\n\u002F\u002F Search by task type\nsearch_templates({\n  searchMode: \"by_task\",\n  task: \"webhook_processing\"\n});\n\n\u002F\u002F Search by metadata (complexity, setup time)\nsearch_templates({\n  searchMode: \"by_metadata\",\n  complexity: \"simple\",\n  maxSetupMinutes: 15\n});\n```\n\n### Get Template Details\n\n```javascript\nget_template({\n  templateId: 2947,\n  mode: \"structure\"  \u002F\u002F nodes+connections only\n});\n\nget_template({\n  templateId: 2947,\n  mode: \"full\"  \u002F\u002F complete workflow JSON\n});\n```\n\n### Deploy Template Directly\n\n```javascript\n\u002F\u002F Deploy template to your n8n instance\nn8n_deploy_template({\n  templateId: 2947,\n  name: \"My Weather to Slack\",  \u002F\u002F Custom name (optional)\n  autoFix: true,  \u002F\u002F Auto-fix common issues (default)\n  autoUpgradeVersions: true  \u002F\u002F Upgrade node versions (default)\n});\n\u002F\u002F Returns: workflow ID, required credentials, fixes applied\n```\n\n---\n\n## Data Table Management\n\n### n8n_manage_datatable\n\nUnified tool for managing n8n data tables and rows. Supports CRUD operations on tables and rows with filtering, pagination, and dry-run support.\n\n**Table Actions**: `createTable`, `listTables`, `getTable`, `updateTable`, `deleteTable`\n**Row Actions**: `getRows`, `insertRows`, `updateRows`, `upsertRows`, `deleteRows`\n\n```javascript\n\u002F\u002F Create a data table\nn8n_manage_datatable({\n  action: \"createTable\",\n  name: \"Contacts\",\n  columns: [\n    {name: \"email\", type: \"string\"},\n    {name: \"score\", type: \"number\"}\n  ]\n})\n\n\u002F\u002F Get rows with filter\nn8n_manage_datatable({\n  action: \"getRows\",\n  tableId: \"dt-123\",\n  filter: {\n    filters: [{columnName: \"status\", condition: \"eq\", value: \"active\"}]\n  },\n  limit: 50\n})\n\n\u002F\u002F Insert rows\nn8n_manage_datatable({\n  action: \"insertRows\",\n  tableId: \"dt-123\",\n  data: [{email: \"\u003Cemail>\", score: 10}],\n  returnType: \"all\"\n})\n\n\u002F\u002F Update with dry run (preview changes)\nn8n_manage_datatable({\n  action: \"updateRows\",\n  tableId: \"dt-123\",\n  filter: {filters: [{columnName: \"score\", condition: \"lt\", value: 5}]},\n  data: {status: \"inactive\"},\n  dryRun: true\n})\n\n\u002F\u002F Upsert (update or insert)\nn8n_manage_datatable({\n  action: \"upsertRows\",\n  tableId: \"dt-123\",\n  filter: {filters: [{columnName: \"email\", condition: \"eq\", value: \"\u003Cemail>\"}]},\n  data: {score: 15},\n  returnData: true\n})\n```\n\n**Filter conditions**: `eq`, `neq`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`\n\n**Best practices**:\n- Use `dryRun: true` before bulk updates\u002Fdeletes to verify filter correctness\n- Define column types upfront (`string`, `number`, `boolean`, `date`)\n- Use `returnType: \"count\"` (default) for insertRows to minimize response size\n- `deleteRows` requires a filter - cannot delete all rows without one\n\n---\n\n## Credential Management\n\n### n8n_manage_credentials\n\nUnified tool for managing n8n credentials. Supports full CRUD operations and schema discovery.\n\n**Actions**: `list`, `get`, `create`, `update`, `delete`, `getSchema`\n\n```javascript\n\u002F\u002F List all credentials\nn8n_manage_credentials({action: \"list\"})\n\u002F\u002F → Returns: id, name, type, createdAt, updatedAt (never exposes secrets)\n\n\u002F\u002F Get credential by ID\nn8n_manage_credentials({action: \"get\", id: \"123\"})\n\u002F\u002F → Returns: credential metadata (data field stripped for security)\n\n\u002F\u002F Discover required fields for a credential type\nn8n_manage_credentials({action: \"getSchema\", credentialType: \"httpHeaderAuth\"})\n\u002F\u002F → Returns: required fields, types, descriptions\n\n\u002F\u002F Create credential\nn8n_manage_credentials({\n  action: \"create\",\n  name: \"My Slack Token\",\n  type: \"slackApi\",\n  data: {accessToken: \"xoxb-...\"}\n})\n\n\u002F\u002F Update credential\nn8n_manage_credentials({\n  action: \"update\",\n  id: \"123\",\n  name: \"Updated Name\",\n  data: {accessToken: \"xoxb-new-...\"},\n  type: \"slackApi\"  \u002F\u002F Optional, needed by some n8n versions\n})\n\n\u002F\u002F Delete credential\nn8n_manage_credentials({action: \"delete\", id: \"123\"})\n```\n\n**Security**:\n- `get`, `create`, and `update` responses strip the `data` field (defense-in-depth)\n- `get` action falls back to list+filter if direct GET returns 403\u002F405 (not all n8n versions expose this endpoint)\n- Credential request bodies are redacted from debug logs\n\n**Best practices**:\n- Use `getSchema` before `create` to discover required fields for a credential type\n- The `data` field contains the actual secret values — provide it only on create\u002Fupdate\n- Always verify credential creation by listing afterward\n\n---\n\n## Security & Audit\n\n### n8n_audit_instance\n\nSecurity audit tool that combines n8n's built-in audit with custom deep scanning of all workflows.\n\n```javascript\n\u002F\u002F Full audit (default — runs both built-in + custom scan)\nn8n_audit_instance()\n\n\u002F\u002F Built-in audit only (specific categories)\nn8n_audit_instance({\n  categories: [\"credentials\", \"nodes\"],\n  includeCustomScan: false\n})\n\n\u002F\u002F Custom scan only (specific checks)\nn8n_audit_instance({\n  customChecks: [\"hardcoded_secrets\", \"unauthenticated_webhooks\"]\n})\n```\n\n**Built-in audit categories**: `credentials`, `database`, `nodes`, `instance`, `filesystem`\n\n**Custom deep scan checks**:\n- `hardcoded_secrets` — Detects 50+ patterns for API keys, tokens, passwords (OpenAI, AWS, Stripe, GitHub, Slack, etc.) plus PII (email, phone, credit card). Secrets are masked in output (first 6 + last 4 chars).\n- `unauthenticated_webhooks` — Flags webhook\u002Fform triggers without authentication\n- `error_handling` — Flags workflows with 3+ nodes and no error handling\n- `data_retention` — Flags workflows saving all execution data (success + failure)\n\n**Parameters** (all optional):\n- `categories` — Array of built-in audit categories\n- `includeCustomScan` — Boolean (default: `true`)\n- `customChecks` — Array subset of the 4 custom checks\n- `daysAbandonedWorkflow` — Days threshold for abandoned workflow detection\n\n**Output**: Actionable markdown report with:\n- Summary table (critical\u002Fhigh\u002Fmedium\u002Flow finding counts)\n- Findings grouped by workflow\n- Remediation Playbook with three sections:\n  - **Auto-fixable** — Items you can fix with tool chains (e.g., add auth to webhooks)\n  - **Requires review** — Items needing human judgment (e.g., PII detection)\n  - **Requires user action** — Items needing manual intervention (e.g., rotate exposed keys)\n\n---\n\n## Self-Help Tools\n\n### Get Tool Documentation\n\n```javascript\n\u002F\u002F Overview of all tools\ntools_documentation()\n\n\u002F\u002F Specific tool details\ntools_documentation({\n  topic: \"search_nodes\",\n  depth: \"full\"\n})\n\n\u002F\u002F Code node guides\ntools_documentation({topic: \"javascript_code_node_guide\", depth: \"full\"})\ntools_documentation({topic: \"python_code_node_guide\", depth: \"full\"})\n```\n\n### AI Agent Guide\n\n```javascript\n\u002F\u002F Comprehensive AI workflow guide\nai_agents_guide()\n\u002F\u002F Returns: Architecture, connections, tools, validation, best practices\n\n\u002F\u002F Or via tools_documentation\ntools_documentation({topic: \"ai_agents_guide\", depth: \"full\"})\n```\n\n### Health Check\n\n```javascript\n\u002F\u002F Quick health check\nn8n_health_check()\n\n\u002F\u002F Detailed diagnostics\nn8n_health_check({mode: \"diagnostic\"})\n\u002F\u002F → Returns: status, env vars, tool status, API connectivity\n```\n\n---\n\n## Tool Availability\n\n**Always Available** (no n8n API needed):\n- search_nodes, get_node\n- validate_node, validate_workflow\n- search_templates, get_template\n- tools_documentation, ai_agents_guide\n\n**Requires n8n API** (N8N_API_URL + N8N_API_KEY):\n- n8n_create_workflow\n- n8n_update_partial_workflow, n8n_update_full_workflow\n- n8n_validate_workflow (by ID)\n- n8n_list_workflows, n8n_get_workflow, n8n_delete_workflow\n- n8n_test_workflow\n- n8n_executions\n- n8n_deploy_template\n- n8n_workflow_versions\n- n8n_autofix_workflow\n- n8n_manage_datatable\n- n8n_manage_credentials\n- n8n_audit_instance\n\nIf API tools unavailable, use templates and validation-only workflows.\n\n---\n\n## Unified Tool Reference\n\n### get_node (Unified Node Information)\n\n**Detail Levels** (mode=\"info\", default):\n- `minimal` (~200 tokens) - Basic metadata only\n- `standard` (~1-2K tokens) - Essential properties + operations (RECOMMENDED)\n- `full` (~3-8K tokens) - Complete schema (use sparingly)\n\n**Operation Modes**:\n- `info` (default) - Node schema with detail level\n- `docs` - Readable markdown documentation\n- `search_properties` - Find specific properties (use with propertyQuery)\n- `versions` - List all versions with breaking changes\n- `compare` - Compare two versions\n- `breaking` - Show only breaking changes\n- `migrations` - Show auto-migratable changes\n\n```javascript\n\u002F\u002F Standard (recommended)\nget_node({nodeType: \"nodes-base.httpRequest\"})\n\n\u002F\u002F Get documentation\nget_node({nodeType: \"nodes-base.webhook\", mode: \"docs\"})\n\n\u002F\u002F Search for properties\nget_node({nodeType: \"nodes-base.httpRequest\", mode: \"search_properties\", propertyQuery: \"auth\"})\n\n\u002F\u002F Check versions\nget_node({nodeType: \"nodes-base.executeWorkflow\", mode: \"versions\"})\n```\n\n### validate_node (Unified Validation)\n\n**Modes**:\n- `full` (default) - Comprehensive validation with errors\u002Fwarnings\u002Fsuggestions\n- `minimal` - Quick required fields check only\n\n**Profiles** (for mode=\"full\"):\n- `minimal` - Very lenient\n- `runtime` - Standard (default, recommended)\n- `ai-friendly` - Balanced for AI workflows\n- `strict` - Most thorough (production)\n\n```javascript\n\u002F\u002F Full validation with runtime profile\nvalidate_node({nodeType: \"nodes-base.slack\", config: {...}, profile: \"runtime\"})\n\n\u002F\u002F Quick required fields check\nvalidate_node({nodeType: \"nodes-base.webhook\", config: {}, mode: \"minimal\"})\n```\n\n---\n\n## Performance Characteristics\n\n| Tool | Response Time | Payload Size |\n|------|---------------|--------------|\n| search_nodes | \u003C20ms | Small |\n| get_node (standard) | \u003C10ms | ~1-2KB |\n| get_node (full) | \u003C100ms | 3-8KB |\n| validate_node (minimal) | \u003C50ms | Small |\n| validate_node (full) | \u003C100ms | Medium |\n| validate_workflow | 100-500ms | Medium |\n| n8n_manage_credentials | 50-500ms | Small-Medium |\n| n8n_audit_instance | 500-5000ms | Large |\n| n8n_create_workflow | 100-500ms | Medium |\n| n8n_update_partial_workflow | 50-200ms | Small |\n| n8n_deploy_template | 200-500ms | Medium |\n\n---\n\n## Best Practices\n\n### Do\n- For simple workflows (\u003C=5 nodes), use MCP tools directly — don't over-engineer the investigation\n- Use `patchNodeField` for surgical edits to Code node content instead of replacing the entire node\n- Use `get_node({detail: \"standard\"})` for most use cases\n- Specify validation profile explicitly (`profile: \"runtime\"`)\n- Use smart parameters (`branch`, `case`) for clarity\n- Include `intent` parameter in workflow updates\n- Follow search → get_node → validate workflow\n- Iterate workflows (avg 56s between edits)\n- Validate after every significant change\n- Use `includeExamples: true` for real configs\n- Use `n8n_deploy_template` for quick starts\n\n### Don't\n- Use `detail: \"full\"` unless necessary (wastes tokens)\n- Forget nodeType prefix (`nodes-base.*`)\n- Skip validation profiles\n- Try to build workflows in one shot (iterate!)\n- Ignore auto-sanitization behavior\n- Use full prefix (`n8n-nodes-base.*`) with search\u002Fvalidate tools\n- Forget to activate workflows after building\n\n---\n\n## Summary\n\n**Most Important**:\n1. Use **get_node** with `detail: \"standard\"` (default) - covers 95% of use cases\n2. nodeType formats differ: `nodes-base.*` (search\u002Fvalidate) vs `n8n-nodes-base.*` (workflows)\n3. Specify **validation profiles** (`runtime` recommended)\n4. Use **smart parameters** (`branch=\"true\"`, `case=0`)\n5. Include **intent parameter** in workflow updates\n6. **Auto-sanitization** runs on ALL nodes during updates\n7. Workflows can be **activated via API** (`activateWorkflow` operation)\n8. Workflows are built **iteratively** (56s avg between edits)\n9. **Data tables** managed with `n8n_manage_datatable` (CRUD + filtering)\n10. **Credentials** managed with `n8n_manage_credentials` (CRUD + schema discovery)\n11. **Security audits** via `n8n_audit_instance` (built-in + custom deep scan)\n12. **AI agent guide** available via `ai_agents_guide()` tool\n\n**Common Workflow**:\n1. search_nodes → find node\n2. get_node → understand config\n3. validate_node → check config\n4. n8n_create_workflow → build\n5. n8n_validate_workflow → verify\n6. n8n_update_partial_workflow → iterate\n7. activateWorkflow → go live!\n\nFor details, see:\n- [SEARCH_GUIDE.md](SEARCH_GUIDE.md) - Node discovery\n- [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md) - Configuration validation\n- [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md) - Workflow management\n\n---\n\n**Related Skills**:\n- n8n Expression Syntax - Write expressions in workflow fields\n- n8n Workflow Patterns - Architectural patterns from templates\n- n8n Validation Expert - Interpret validation errors\n- n8n Node Configuration - Operation-specific requirements\n- n8n Code JavaScript - Write JavaScript in Code nodes\n- n8n Code Python - Write Python in Code nodes\n","# n8n MCP Tools Expert\n\nMaster guide for using n8n-mcp MCP server tools to build workflows.\n\n---\n\n## Tool Categories\n\nn8n-mcp provides tools organized into categories:\n\n1. **Node Discovery** → [SEARCH_GUIDE.md](SEARCH_GUIDE.md)\n2. **Configuration Validation** → [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md)\n3. **Workflow Management** → [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md)\n4. **Template Library** - Search and deploy 2,700+ real workflows\n5. **Data Tables** - Manage n8n data tables and rows (`n8n_manage_datatable`)\n6. **Credential Management** - Full credential CRUD + schema discovery (`n8n_manage_credentials`)\n7. **Security & Audit** - Instance security auditing with custom deep scan (`n8n_audit_instance`)\n8. **Documentation & Guides** - Tool docs, AI agent guide, Code node guides\n\n---\n\n## Quick Reference\n\n### Most Used Tools (by success rate)\n\n| Tool | Use When | Speed |\n|------|----------|-------|\n| `search_nodes` | Finding nodes by keyword | \u003C20ms |\n| `get_node` | Understanding node operations (detail=\"standard\") | \u003C10ms |\n| `validate_node` | Checking configurations (mode=\"full\") | \u003C100ms |\n| `n8n_create_workflow` | Creating workflows | 100-500ms |\n| `n8n_update_partial_workflow` | Editing workflows (MOST USED!) | 50-200ms |\n| `validate_workflow` | Checking complete workflow | 100-500ms |\n| `n8n_deploy_template` | Deploy template to n8n instance | 200-500ms |\n| `n8n_manage_datatable` | Managing data tables and rows | 50-500ms |\n| `n8n_manage_credentials` | Credential CRUD + schema discovery | 50-500ms |\n| `n8n_audit_instance` | Security audit (built-in + custom scan) | 500-5000ms |\n| `n8n_autofix_workflow` | Auto-fix validation errors | 200-1500ms |\n\n---\n\n## Tool Selection Guide\n\n### Finding the Right Node\n\n**Workflow**:\n```\n1. search_nodes({query: \"keyword\"})\n2. get_node({nodeType: \"nodes-base.name\"})\n3. [Optional] get_node({nodeType: \"nodes-base.name\", mode: \"docs\"})\n```\n\n**Example**:\n```javascript\n\u002F\u002F Step 1: Search\nsearch_nodes({query: \"slack\"})\n\u002F\u002F Returns: nodes-base.slack\n\n\u002F\u002F Step 2: Get details\nget_node({nodeType: \"nodes-base.slack\"})\n\u002F\u002F Returns: operations, properties, examples (standard detail)\n\n\u002F\u002F Step 3: Get readable documentation\nget_node({nodeType: \"nodes-base.slack\", mode: \"docs\"})\n\u002F\u002F Returns: markdown documentation\n```\n\n**Common pattern**: search → get_node (18s average)\n\n### Validating Configuration\n\n**Workflow**:\n```\n1. validate_node({nodeType, config: {}, mode: \"minimal\"}) - Check required fields\n2. validate_node({nodeType, config, profile: \"runtime\"}) - Full validation\n3. [Repeat] Fix errors, validate again\n```\n\n**Common pattern**: validate → fix → validate (23s thinking, 58s fixing per cycle)\n\n### Managing Workflows\n\n**Workflow**:\n```\n1. n8n_create_workflow({name, nodes, connections})\n2. n8n_validate_workflow({id})\n3. n8n_update_partial_workflow({id, operations: [...]})\n4. n8n_validate_workflow({id}) again\n5. n8n_update_partial_workflow({id, operations: [{type: \"activateWorkflow\"}]})\n```\n\n**Common pattern**: iterative updates (56s average between edits)\n\n---\n\n## Critical: nodeType Formats\n\n**Two different formats** for different tools!\n\n### Format 1: Search\u002FValidate Tools\n```javascript\n\u002F\u002F Use SHORT prefix\n\"nodes-base.slack\"\n\"nodes-base.httpRequest\"\n\"nodes-base.webhook\"\n\"nodes-langchain.agent\"\n```\n\n**Tools that use this**:\n- search_nodes (returns this format)\n- get_node\n- validate_node\n- validate_workflow\n\n### Format 2: Workflow Tools\n```javascript\n\u002F\u002F Use FULL prefix\n\"n8n-nodes-base.slack\"\n\"n8n-nodes-base.httpRequest\"\n\"n8n-nodes-base.webhook\"\n\"@n8n\u002Fn8n-nodes-langchain.agent\"\n```\n\n**Tools that use this**:\n- n8n_create_workflow\n- n8n_update_partial_workflow\n\n### Conversion\n\n```javascript\n\u002F\u002F search_nodes returns BOTH formats\n{\n  \"nodeType\": \"nodes-base.slack\",          \u002F\u002F For search\u002Fvalidate tools\n  \"workflowNodeType\": \"n8n-nodes-base.slack\"  \u002F\u002F For workflow tools\n}\n```\n\n---\n\n## Common Mistakes\n\n### Mistake 1: Wrong nodeType Format\n\n**Problem**: \"Node not found\" error\n\n```javascript\n\u002F\u002F WRONG\nget_node({nodeType: \"slack\"})  \u002F\u002F Missing prefix\nget_node({nodeType: \"n8n-nodes-base.slack\"})  \u002F\u002F Wrong prefix\n\n\u002F\u002F CORRECT\nget_node({nodeType: \"nodes-base.slack\"})\n```\n\n### Mistake 2: Using detail=\"full\" by Default\n\n**Problem**: Huge payload, slower response, token waste\n\n```javascript\n\u002F\u002F WRONG - Returns 3-8K tokens, use sparingly\nget_node({nodeType: \"nodes-base.slack\", detail: \"full\"})\n\n\u002F\u002F CORRECT - Returns 1-2K tokens, covers 95% of use cases\nget_node({nodeType: \"nodes-base.slack\"})  \u002F\u002F detail=\"standard\" is default\nget_node({nodeType: \"nodes-base.slack\", detail: \"standard\"})\n```\n\n**When to use detail=\"full\"**:\n- Debugging complex configuration issues\n- Need complete property schema with all nested options\n- Exploring advanced features\n\n**Better alternatives**:\n1. `get_node({detail: \"standard\"})` - for operations list (default)\n2. `get_node({mode: \"docs\"})` - for readable documentation\n3. `get_node({mode: \"search_properties\", propertyQuery: \"auth\"})` - for specific property\n\n### Mistake 3: Not Using Validation Profiles\n\n**Problem**: Too many false positives OR missing real errors\n\n**Profiles**:\n- `minimal` - Only required fields (fast, permissive)\n- `runtime` - Values + types (recommended for pre-deployment)\n- `ai-friendly` - Reduce false positives (for AI configuration)\n- `strict` - Maximum validation (for production)\n\n```javascript\n\u002F\u002F WRONG - Uses default profile\nvalidate_node({nodeType, config})\n\n\u002F\u002F CORRECT - Explicit profile\nvalidate_node({nodeType, config, profile: \"runtime\"})\n```\n\n### Mistake 4: Ignoring Auto-Sanitization\n\n**What happens**: ALL nodes sanitized on ANY workflow update\n\n**Auto-fixes**:\n- Binary operators (equals, contains) → removes singleValue\n- Unary operators (isEmpty, isNotEmpty) → adds singleValue: true\n- IF\u002FSwitch nodes → adds missing metadata\n\n**Cannot fix**:\n- Broken connections\n- Branch count mismatches\n- Paradoxical corrupt states\n\n```javascript\n\u002F\u002F After ANY update, auto-sanitization runs on ALL nodes\nn8n_update_partial_workflow({id, operations: [...]})\n\u002F\u002F → Automatically fixes operator structures\n```\n\n### Mistake 5: Not Using Smart Parameters\n\n**Problem**: Complex sourceIndex calculations for multi-output nodes\n\n**Old way** (manual):\n```javascript\n\u002F\u002F IF node connection\n{\n  type: \"addConnection\",\n  source: \"IF\",\n  target: \"Handler\",\n  sourceIndex: 0  \u002F\u002F Which output? Hard to remember!\n}\n```\n\n**New way** (smart parameters):\n```javascript\n\u002F\u002F IF node - semantic branch names\n{\n  type: \"addConnection\",\n  source: \"IF\",\n  target: \"True Handler\",\n  branch: \"true\"  \u002F\u002F Clear and readable!\n}\n\n{\n  type: \"addConnection\",\n  source: \"IF\",\n  target: \"False Handler\",\n  branch: \"false\"\n}\n\n\u002F\u002F Switch node - semantic case numbers\n{\n  type: \"addConnection\",\n  source: \"Switch\",\n  target: \"Handler A\",\n  case: 0\n}\n```\n\n### Mistake 7: Wrong Parameter Name for updateNode\n\n**Problem**: Using `parameters` instead of `updates`\n\n```javascript\n\u002F\u002F WRONG\nn8n_update_partial_workflow({\n  id: \"wf-123\",\n  operations: [{\n    type: \"updateNode\",\n    nodeName: \"HTTP Request\",\n    parameters: {url: \"...\"}  \u002F\u002F ❌ Wrong key\n  }]\n})\n\n\u002F\u002F CORRECT\nn8n_update_partial_workflow({\n  id: \"wf-123\",\n  operations: [{\n    type: \"updateNode\",\n    nodeName: \"HTTP Request\",\n    updates: {url: \"...\"}  \u002F\u002F ✅ Correct key\n  }]\n})\n```\n\n### Mistake 8: Wrong Credential Attachment Format\n\n**Problem**: Credentials not attaching to nodes\n\n```javascript\n\u002F\u002F WRONG - credentials as flat object\nupdates: {credentials: \"myApiKey\"}\n\n\u002F\u002F CORRECT - credentials nested by type with id and name\nupdates: {\n  credentials: {\n    httpHeaderAuth: {\n      id: \"abc123\",\n      name: \"My API Key\"\n    }\n  }\n}\n```\n\n### Mistake 6: Not Using intent Parameter\n\n**Problem**: Less helpful tool responses\n\n```javascript\n\u002F\u002F WRONG - No context for response\nn8n_update_partial_workflow({\n  id: \"abc\",\n  operations: [{type: \"addNode\", node: {...}}]\n})\n\n\u002F\u002F CORRECT - Better AI responses\nn8n_update_partial_workflow({\n  id: \"abc\",\n  intent: \"Add error handling for API failures\",\n  operations: [{type: \"addNode\", node: {...}}]\n})\n```\n\n---\n\n## Tool Usage Patterns\n\n### Pattern 1: Node Discovery (Most Common)\n\n**Common workflow**: 18s average between steps\n\n```javascript\n\u002F\u002F Step 1: Search (fast!)\nconst results = await search_nodes({\n  query: \"slack\",\n  mode: \"OR\",  \u002F\u002F Default: any word matches\n  limit: 20\n});\n\u002F\u002F → Returns: nodes-base.slack, nodes-base.slackTrigger\n\n\u002F\u002F Step 2: Get details (~18s later, user reviewing results)\nconst details = await get_node({\n  nodeType: \"nodes-base.slack\",\n  includeExamples: true  \u002F\u002F Get real template configs\n});\n\u002F\u002F → Returns: operations, properties, metadata\n```\n\n### Pattern 2: Validation Loop\n\n**Typical cycle**: 23s thinking, 58s fixing\n\n```javascript\n\u002F\u002F Step 1: Validate\nconst result = await validate_node({\n  nodeType: \"nodes-base.slack\",\n  config: {\n    resource: \"channel\",\n    operation: \"create\"\n  },\n  profile: \"runtime\"\n});\n\n\u002F\u002F Step 2: Check errors (~23s thinking)\nif (!result.valid) {\n  console.log(result.errors);  \u002F\u002F \"Missing required field: name\"\n}\n\n\u002F\u002F Step 3: Fix config (~58s fixing)\nconfig.name = \"general\";\n\n\u002F\u002F Step 4: Validate again\nawait validate_node({...});  \u002F\u002F Repeat until clean\n```\n\n### Pattern 3: Workflow Editing\n\n**Most used update tool**: 99.0% success rate, 56s average between edits\n\n```javascript\n\u002F\u002F Iterative workflow building (NOT one-shot!)\n\u002F\u002F Edit 1\nawait n8n_update_partial_workflow({\n  id: \"workflow-id\",\n  intent: \"Add webhook trigger\",\n  operations: [{type: \"addNode\", node: {...}}]\n});\n\n\u002F\u002F ~56s later...\n\n\u002F\u002F Edit 2\nawait n8n_update_partial_workflow({\n  id: \"workflow-id\",\n  intent: \"Connect webhook to processor\",\n  operations: [{type: \"addConnection\", source: \"...\", target: \"...\"}]\n});\n\n\u002F\u002F ~56s later...\n\n\u002F\u002F Edit 3 (validation)\nawait n8n_validate_workflow({id: \"workflow-id\"});\n\n\u002F\u002F Ready? Activate!\nawait n8n_update_partial_workflow({\n  id: \"workflow-id\",\n  intent: \"Activate workflow for production\",\n  operations: [{type: \"activateWorkflow\"}]\n});\n```\n\n---\n\n## Detailed Guides\n\n### Node Discovery Tools\nSee [SEARCH_GUIDE.md](SEARCH_GUIDE.md) for:\n- search_nodes\n- get_node with detail levels (minimal, standard, full)\n- get_node modes (info, docs, search_properties, versions)\n\n### Validation Tools\nSee [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md) for:\n- Validation profiles explained\n- validate_node with modes (minimal, full)\n- validate_workflow complete structure\n- Auto-sanitization system\n- Handling validation errors\n\n### Workflow Management\nSee [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md) for:\n- n8n_create_workflow\n- n8n_update_partial_workflow (19 operation types including patchNodeField!)\n- Smart parameters (branch, case)\n- AI connection types (8 types)\n- Workflow activation (activateWorkflow\u002FdeactivateWorkflow)\n- n8n_deploy_template\n- n8n_workflow_versions\n- n8n_manage_credentials (credential CRUD + schema discovery)\n- n8n_audit_instance (security auditing)\n\n---\n\n## Template Usage\n\n### Search Templates\n\n```javascript\n\u002F\u002F Search by keyword (default mode)\nsearch_templates({\n  query: \"webhook slack\",\n  limit: 20\n});\n\n\u002F\u002F Search by node types\nsearch_templates({\n  searchMode: \"by_nodes\",\n  nodeTypes: [\"n8n-nodes-base.httpRequest\", \"n8n-nodes-base.slack\"]\n});\n\n\u002F\u002F Search by task type\nsearch_templates({\n  searchMode: \"by_task\",\n  task: \"webhook_processing\"\n});\n\n\u002F\u002F Search by metadata (complexity, setup time)\nsearch_templates({\n  searchMode: \"by_metadata\",\n  complexity: \"simple\",\n  maxSetupMinutes: 15\n});\n```\n\n### Get Template Details\n\n```javascript\nget_template({\n  templateId: 2947,\n  mode: \"structure\"  \u002F\u002F nodes+connections only\n});\n\nget_template({\n  templateId: 2947,\n  mode: \"full\"  \u002F\u002F complete workflow JSON\n});\n```\n\n### Deploy Template Directly\n\n```javascript\n\u002F\u002F Deploy template to your n8n instance\nn8n_deploy_template({\n  templateId: 2947,\n  name: \"My Weather to Slack\",  \u002F\u002F Custom name (optional)\n  autoFix: true,  \u002F\u002F Auto-fix common issues (default)\n  autoUpgradeVersions: true  \u002F\u002F Upgrade node versions (default)\n});\n\u002F\u002F Returns: workflow ID, required credentials, fixes applied\n```\n\n---\n\n## Data Table Management\n\n### n8n_manage_datatable\n\nUnified tool for managing n8n data tables and rows. Supports CRUD operations on tables and rows with filtering, pagination, and dry-run support.\n\n**Table Actions**: `createTable`, `listTables`, `getTable`, `updateTable`, `deleteTable`\n**Row Actions**: `getRows`, `insertRows`, `updateRows`, `upsertRows`, `deleteRows`\n\n```javascript\n\u002F\u002F Create a data table\nn8n_manage_datatable({\n  action: \"createTable\",\n  name: \"Contacts\",\n  columns: [\n    {name: \"email\", type: \"string\"},\n    {name: \"score\", type: \"number\"}\n  ]\n})\n\n\u002F\u002F Get rows with filter\nn8n_manage_datatable({\n  action: \"getRows\",\n  tableId: \"dt-123\",\n  filter: {\n    filters: [{columnName: \"status\", condition: \"eq\", value: \"active\"}]\n  },\n  limit: 50\n})\n\n\u002F\u002F Insert rows\nn8n_manage_datatable({\n  action: \"insertRows\",\n  tableId: \"dt-123\",\n  data: [{email: \"\u003Cemail>\", score: 10}],\n  returnType: \"all\"\n})\n\n\u002F\u002F Update with dry run (preview changes)\nn8n_manage_datatable({\n  action: \"updateRows\",\n  tableId: \"dt-123\",\n  filter: {filters: [{columnName: \"score\", condition: \"lt\", value: 5}]},\n  data: {status: \"inactive\"},\n  dryRun: true\n})\n\n\u002F\u002F Upsert (update or insert)\nn8n_manage_datatable({\n  action: \"upsertRows\",\n  tableId: \"dt-123\",\n  filter: {filters: [{columnName: \"email\", condition: \"eq\", value: \"\u003Cemail>\"}]},\n  data: {score: 15},\n  returnData: true\n})\n```\n\n**Filter conditions**: `eq`, `neq`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`\n\n**Best practices**:\n- Use `dryRun: true` before bulk updates\u002Fdeletes to verify filter correctness\n- Define column types upfront (`string`, `number`, `boolean`, `date`)\n- Use `returnType: \"count\"` (default) for insertRows to minimize response size\n- `deleteRows` requires a filter - cannot delete all rows without one\n\n---\n\n## Credential Management\n\n### n8n_manage_credentials\n\nUnified tool for managing n8n credentials. Supports full CRUD operations and schema discovery.\n\n**Actions**: `list`, `get`, `create`, `update`, `delete`, `getSchema`\n\n```javascript\n\u002F\u002F List all credentials\nn8n_manage_credentials({action: \"list\"})\n\u002F\u002F → Returns: id, name, type, createdAt, updatedAt (never exposes secrets)\n\n\u002F\u002F Get credential by ID\nn8n_manage_credentials({action: \"get\", id: \"123\"})\n\u002F\u002F → Returns: credential metadata (data field stripped for security)\n\n\u002F\u002F Discover required fields for a credential type\nn8n_manage_credentials({action: \"getSchema\", credentialType: \"httpHeaderAuth\"})\n\u002F\u002F → Returns: required fields, types, descriptions\n\n\u002F\u002F Create credential\nn8n_manage_credentials({\n  action: \"create\",\n  name: \"My Slack Token\",\n  type: \"slackApi\",\n  data: {accessToken: \"xoxb-...\"}\n})\n\n\u002F\u002F Update credential\nn8n_manage_credentials({\n  action: \"update\",\n  id: \"123\",\n  name: \"Updated Name\",\n  data: {accessToken: \"xoxb-new-...\"},\n  type: \"slackApi\"  \u002F\u002F Optional, needed by some n8n versions\n})\n\n\u002F\u002F Delete credential\nn8n_manage_credentials({action: \"delete\", id: \"123\"})\n```\n\n**Security**:\n- `get`, `create`, and `update` responses strip the `data` field (defense-in-depth)\n- `get` action falls back to list+filter if direct GET returns 403\u002F405 (not all n8n versions expose this endpoint)\n- Credential request bodies are redacted from debug logs\n\n**Best practices**:\n- Use `getSchema` before `create` to discover required fields for a credential type\n- The `data` field contains the actual secret values — provide it only on create\u002Fupdate\n- Always verify credential creation by listing afterward\n\n---\n\n## Security & Audit\n\n### n8n_audit_instance\n\nSecurity audit tool that combines n8n's built-in audit with custom deep scanning of all workflows.\n\n```javascript\n\u002F\u002F Full audit (default — runs both built-in + custom scan)\nn8n_audit_instance()\n\n\u002F\u002F Built-in audit only (specific categories)\nn8n_audit_instance({\n  categories: [\"credentials\", \"nodes\"],\n  includeCustomScan: false\n})\n\n\u002F\u002F Custom scan only (specific checks)\nn8n_audit_instance({\n  customChecks: [\"hardcoded_secrets\", \"unauthenticated_webhooks\"]\n})\n```\n\n**Built-in audit categories**: `credentials`, `database`, `nodes`, `instance`, `filesystem`\n\n**Custom deep scan checks**:\n- `hardcoded_secrets` — Detects 50+ patterns for API keys, tokens, passwords (OpenAI, AWS, Stripe, GitHub, Slack, etc.) plus PII (email, phone, credit card). Secrets are masked in output (first 6 + last 4 chars).\n- `unauthenticated_webhooks` — Flags webhook\u002Fform triggers without authentication\n- `error_handling` — Flags workflows with 3+ nodes and no error handling\n- `data_retention` — Flags workflows saving all execution data (success + failure)\n\n**Parameters** (all optional):\n- `categories` — Array of built-in audit categories\n- `includeCustomScan` — Boolean (default: `true`)\n- `customChecks` — Array subset of the 4 custom checks\n- `daysAbandonedWorkflow` — Days threshold for abandoned workflow detection\n\n**Output**: Actionable markdown report with:\n- Summary table (critical\u002Fhigh\u002Fmedium\u002Flow finding counts)\n- Findings grouped by workflow\n- Remediation Playbook with three sections:\n  - **Auto-fixable** — Items you can fix with tool chains (e.g., add auth to webhooks)\n  - **Requires review** — Items needing human judgment (e.g., PII detection)\n  - **Requires user action** — Items needing manual intervention (e.g., rotate exposed keys)\n\n---\n\n## Self-Help Tools\n\n### Get Tool Documentation\n\n```javascript\n\u002F\u002F Overview of all tools\ntools_documentation()\n\n\u002F\u002F Specific tool details\ntools_documentation({\n  topic: \"search_nodes\",\n  depth: \"full\"\n})\n\n\u002F\u002F Code node guides\ntools_documentation({topic: \"javascript_code_node_guide\", depth: \"full\"})\ntools_documentation({topic: \"python_code_node_guide\", depth: \"full\"})\n```\n\n### AI Agent Guide\n\n```javascript\n\u002F\u002F Comprehensive AI workflow guide\nai_agents_guide()\n\u002F\u002F Returns: Architecture, connections, tools, validation, best practices\n\n\u002F\u002F Or via tools_documentation\ntools_documentation({topic: \"ai_agents_guide\", depth: \"full\"})\n```\n\n### Health Check\n\n```javascript\n\u002F\u002F Quick health check\nn8n_health_check()\n\n\u002F\u002F Detailed diagnostics\nn8n_health_check({mode: \"diagnostic\"})\n\u002F\u002F → Returns: status, env vars, tool status, API connectivity\n```\n\n---\n\n## Tool Availability\n\n**Always Available** (no n8n API needed):\n- search_nodes, get_node\n- validate_node, validate_workflow\n- search_templates, get_template\n- tools_documentation, ai_agents_guide\n\n**Requires n8n API** (N8N_API_URL + N8N_API_KEY):\n- n8n_create_workflow\n- n8n_update_partial_workflow, n8n_update_full_workflow\n- n8n_validate_workflow (by ID)\n- n8n_list_workflows, n8n_get_workflow, n8n_delete_workflow\n- n8n_test_workflow\n- n8n_executions\n- n8n_deploy_template\n- n8n_workflow_versions\n- n8n_autofix_workflow\n- n8n_manage_datatable\n- n8n_manage_credentials\n- n8n_audit_instance\n\nIf API tools unavailable, use templates and validation-only workflows.\n\n---\n\n## Unified Tool Reference\n\n### get_node (Unified Node Information)\n\n**Detail Levels** (mode=\"info\", default):\n- `minimal` (~200 tokens) - Basic metadata only\n- `standard` (~1-2K tokens) - Essential properties + operations (RECOMMENDED)\n- `full` (~3-8K tokens) - Complete schema (use sparingly)\n\n**Operation Modes**:\n- `info` (default) - Node schema with detail level\n- `docs` - Readable markdown documentation\n- `search_properties` - Find specific properties (use with propertyQuery)\n- `versions` - List all versions with breaking changes\n- `compare` - Compare two versions\n- `breaking` - Show only breaking changes\n- `migrations` - Show auto-migratable changes\n\n```javascript\n\u002F\u002F Standard (recommended)\nget_node({nodeType: \"nodes-base.httpRequest\"})\n\n\u002F\u002F Get documentation\nget_node({nodeType: \"nodes-base.webhook\", mode: \"docs\"})\n\n\u002F\u002F Search for properties\nget_node({nodeType: \"nodes-base.httpRequest\", mode: \"search_properties\", propertyQuery: \"auth\"})\n\n\u002F\u002F Check versions\nget_node({nodeType: \"nodes-base.executeWorkflow\", mode: \"versions\"})\n```\n\n### validate_node (Unified Validation)\n\n**Modes**:\n- `full` (default) - Comprehensive validation with errors\u002Fwarnings\u002Fsuggestions\n- `minimal` - Quick required fields check only\n\n**Profiles** (for mode=\"full\"):\n- `minimal` - Very lenient\n- `runtime` - Standard (default, recommended)\n- `ai-friendly` - Balanced for AI workflows\n- `strict` - Most thorough (production)\n\n```javascript\n\u002F\u002F Full validation with runtime profile\nvalidate_node({nodeType: \"nodes-base.slack\", config: {...}, profile: \"runtime\"})\n\n\u002F\u002F Quick required fields check\nvalidate_node({nodeType: \"nodes-base.webhook\", config: {}, mode: \"minimal\"})\n```\n\n---\n\n## Performance Characteristics\n\n| Tool | Response Time | Payload Size |\n|------|---------------|--------------|\n| search_nodes | \u003C20ms | Small |\n| get_node (standard) | \u003C10ms | ~1-2KB |\n| get_node (full) | \u003C100ms | 3-8KB |\n| validate_node (minimal) | \u003C50ms | Small |\n| validate_node (full) | \u003C100ms | Medium |\n| validate_workflow | 100-500ms | Medium |\n| n8n_manage_credentials | 50-500ms | Small-Medium |\n| n8n_audit_instance | 500-5000ms | Large |\n| n8n_create_workflow | 100-500ms | Medium |\n| n8n_update_partial_workflow | 50-200ms | Small |\n| n8n_deploy_template | 200-500ms | Medium |\n\n---\n\n## Best Practices\n\n### Do\n- For simple workflows (\u003C=5 nodes), use MCP tools directly — don't over-engineer the investigation\n- Use `patchNodeField` for surgical edits to Code node content instead of replacing the entire node\n- Use `get_node({detail: \"standard\"})` for most use cases\n- Specify validation profile explicitly (`profile: \"runtime\"`)\n- Use smart parameters (`branch`, `case`) for clarity\n- Include `intent` parameter in workflow updates\n- Follow search → get_node → validate workflow\n- Iterate workflows (avg 56s between edits)\n- Validate after every significant change\n- Use `includeExamples: true` for real configs\n- Use `n8n_deploy_template` for quick starts\n\n### Don't\n- Use `detail: \"full\"` unless necessary (wastes tokens)\n- Forget nodeType prefix (`nodes-base.*`)\n- Skip validation profiles\n- Try to build workflows in one shot (iterate!)\n- Ignore auto-sanitization behavior\n- Use full prefix (`n8n-nodes-base.*`) with search\u002Fvalidate tools\n- Forget to activate workflows after building\n\n---\n\n## Summary\n\n**Most Important**:\n1. Use **get_node** with `detail: \"standard\"` (default) - covers 95% of use cases\n2. nodeType formats differ: `nodes-base.*` (search\u002Fvalidate) vs `n8n-nodes-base.*` (workflows)\n3. Specify **validation profiles** (`runtime` recommended)\n4. Use **smart parameters** (`branch=\"true\"`, `case=0`)\n5. Include **intent parameter** in workflow updates\n6. **Auto-sanitization** runs on ALL nodes during updates\n7. Workflows can be **activated via API** (`activateWorkflow` operation)\n8. Workflows are built **iteratively** (56s avg between edits)\n9. **Data tables** managed with `n8n_manage_datatable` (CRUD + filtering)\n10. **Credentials** managed with `n8n_manage_credentials` (CRUD + schema discovery)\n11. **Security audits** via `n8n_audit_instance` (built-in + custom deep scan)\n12. **AI agent guide** available via `ai_agents_guide()` tool\n\n**Common Workflow**:\n1. search_nodes → find node\n2. get_node → understand config\n3. validate_node → check config\n4. n8n_create_workflow → build\n5. n8n_validate_workflow → verify\n6. n8n_update_partial_workflow → iterate\n7. activateWorkflow → go live!\n\nFor details, see:\n- [SEARCH_GUIDE.md](SEARCH_GUIDE.md) - Node discovery\n- [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md) - Configuration validation\n- [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md) - Workflow management\n\n---\n\n**Related Skills**:\n- n8n Expression Syntax - Write expressions in workflow fields\n- n8n Workflow Patterns - Architectural patterns from templates\n- n8n Validation Expert - Interpret validation errors\n- n8n Node Configuration - Operation-specific requirements\n- n8n Code JavaScript - Write JavaScript in Code nodes\n- n8n Code Python - Write Python in Code nodes\n",{"name":5,"description":7},"master","8ec37df6d71fb664ea19d32c079e7d3ff931a8e0","skills\u002Fintegrations\u002Fn8n-workflows\u002Fn8n-mcp-tools-expert",3,"https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit","https:\u002F\u002Fweblyfe.ai","https:\u002F\u002Fgithub.com\u002FS3YED","2026-08-27 01:54:02",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add S3YED\u002Fappie-kit --skill n8n-mcp-tools-expert",{"tool":62,"command":63},"bunx","bunx skills add S3YED\u002Fappie-kit --skill n8n-mcp-tools-expert",{"tool":65,"command":66},"pnpm","pnpm dlx skills add S3YED\u002Fappie-kit --skill n8n-mcp-tools-expert","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fn8n-workflows\u002Fn8n-mcp-tools-expert\u002FSKILL.md",true,[70,76,80,84],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"README.md","REFERENCE","参考文档",2793,"https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fn8n-workflows\u002Fn8n-mcp-tools-expert\u002FREADME.md",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"SEARCH_GUIDE.md",8192,"https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fn8n-workflows\u002Fn8n-mcp-tools-expert\u002FSEARCH_GUIDE.md",{"path":81,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":82,"sourceHtmlUrl":83},"VALIDATION_GUIDE.md",10091,"https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fn8n-workflows\u002Fn8n-mcp-tools-expert\u002FVALIDATION_GUIDE.md",{"path":85,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":86,"sourceHtmlUrl":87},"WORKFLOW_GUIDE.md",21236,"https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fn8n-workflows\u002Fn8n-mcp-tools-expert\u002FWORKFLOW_GUIDE.md",[89,120,155,180,211,234],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":102,"publishedAt":43},"01M6JFD4M6N4DSGC7TXEJ5R3J2","ai-music","AI music generation and audio tools: HeartMuLa lyrics-to-music generation, songwriting craft (+ Suno prompts), and audio spectrogram\u002Ffeature visualization.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fwethlete\u002Fai-music\u002FSKILL.md",[95,98,101],{"categoryNo":96,"categoryName":97,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":99,"categoryName":100,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[103,104,105,106,24,107,108,109,110,111,112,113,114,115,116,117,118,119],"music","ai music","humanizer","visualization","Audio","hermes","hermes agent","songwriting","suno","lyrics","prompts","heartmula","craft","generation","feature","ai music generation","music generation",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":134,"publishedAt":43},"01M6JFCZE4XNFQFMNZDHKHT5V5","agentic-webdesign-design-system-ingestion","Use v0 Design Systems 2.0, Bolt Design System Agents, or Lovable to generate production UI from a client's real design system components — not generic Tailwind. Use when building a client website where brand consistency matters.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fweb-design\u002Fagentic-webdesign-design-system-ingestion\u002FSKILL.md",[126,129],{"categoryNo":127,"categoryName":128,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],"design","agentic","design system","system","ingestion","webdesign","agentic webdesign design system ingestion","components","generate","design systems","website","ui","Tailwind","bolt","lovable","v0","design-system","wed","design system components","appie",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":163,"publishedAt":43},"01M6JFCVPX3913CFAS6QQJ33ZB","agentic-webdesign-agent-elements","Use 21st.dev Agent Elements — 25 shadcn\u002Fui components purpose-built for AI agent UIs. Tool cards (Bash, Edit, Search, Plan, Subagent, MCP), chat, input, streaming. Open source, shadcn-registry install, no runtime lock-in.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fweb-design\u002Fagentic-webdesign-agent-elements\u002FSKILL.md",[161,162],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},[136,164,140,165,26,166,142,167,168,169,170,171,172,173,174,175,176,177,178,179],"elements","agentic webdesign agent elements","ai agent","registry","search","streaming","open source","open","Bash","plan","subagent","edit","install","input","lock","source",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":190,"publishedAt":43},"01M6JFCQC7H65M9QJ6TRE71BS1","vercel-deployment","Deploy static sites and frontends to Vercel — handles both CLI and REST API paths, including the CLI token sanitization workaround.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Fvercel-deployment\u002FSKILL.md",[186,189],{"categoryNo":187,"categoryName":188,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210],"deployment","vercel deployment","vercel","macos","cli","linux","windows","deploy","vercel deploy","REST","api","site","deploy to vercel","token","rest api","host","sites","paths","sanitization","static site",{"skillNo":212,"name":213,"nameZh":6,"description":214,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":215,"categories":216,"keywords":218,"publishedAt":43},"01M6JFCM4SMTXBM5A01BK2YQG1","software-quality-workflows","Umbrella workflow for TDD, debugging, code simplification, spikes, pre-commit review, and debugger-assisted investigation.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Fsoftware-quality-workflows\u002FSKILL.md",[217],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[41,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,30],"quality","software","software quality workflows","review","tdd","workflow","commit","debugging","code","debugger","pre-commit","investigation","code simplification","user","simplification",{"skillNo":235,"name":236,"nameZh":6,"description":237,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":238,"categories":239,"keywords":247,"publishedAt":43},"01M6JFCGD0M6CEATY01W7YN6DB","react-component-refactoring","Safely refactor large React components into smaller, maintainable pieces using proven patterns","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Freact-component-refactoring\u002FSKILL.md",[240,243,246],{"categoryNo":241,"categoryName":242,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":244,"categoryName":245,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[248,249,250,251,252,253,254,255,194,256,257,142,258,197,259,227,260,261,35,262],"react","component","refactoring","component refactoring","react component","react component refactoring","frontend","writing","safe","typescript","react components","modular","refactor","simplify","test-driven-development"]