AutomationFlowsAI & RAG › Monitor Asset Health and Predict Maintenance with Anthropic Claude and Slack

Monitor Asset Health and Predict Maintenance with Anthropic Claude and Slack

ByCheng Siong Chin @cschin on n8n.io

This workflow automates industrial asset health monitoring and predictive maintenance using Anthropic Claude across coordinated specialist agents. It targets facility managers, maintenance engineers, and operations teams in manufacturing, energy, and infrastructure sectors where…

Cron / scheduled trigger★★★★☆ complexityAI-powered27 nodesAgentAgent ToolAnthropic ChatOutput Parser StructuredMcp Client ToolSlackEmail Send
AI & RAG Trigger: Cron / scheduled Nodes: 27 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #13595 — we link there as the canonical source.

This workflow follows the Agent → Agenttool recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "p8Mp9iB7OnJ76V1DU5XNl",
  "name": "AI-powered asset health monitoring and predictive maintenance",
  "tags": [],
  "nodes": [
    {
      "id": "04be9a11-7606-4bbe-bef9-a928c2af6b74",
      "name": "Schedule Asset Health Check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        192
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "67036210-72a9-4819-9091-dcc15ce998c0",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        192
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "criticalThreshold",
              "type": "number",
              "value": 85
            },
            {
              "id": "id-2",
              "name": "highThreshold",
              "type": "number",
              "value": 70
            },
            {
              "id": "id-3",
              "name": "slackChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Slack channel ID for critical alerts__>"
            },
            {
              "id": "id-4",
              "name": "escalationEmail",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Email address for escalation reports__>"
            },
            {
              "id": "id-5",
              "name": "mcpEndpoint",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__MCP server endpoint URL__>"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "8ccbc050-f338-4847-860f-54717866f028",
      "name": "Generate Asset Health Data",
      "type": "n8n-nodes-base.code",
      "position": [
        448,
        192
      ],
      "parameters": {
        "jsCode": "// Generate simulated asset health data\nconst assets = [\n  { id: 'PUMP-001', name: 'Primary Coolant Pump', type: 'Pump' },\n  { id: 'MOTOR-045', name: 'Conveyor Motor A', type: 'Motor' },\n  { id: 'VALVE-112', name: 'Pressure Relief Valve', type: 'Valve' },\n  { id: 'COMP-023', name: 'Air Compressor Unit', type: 'Compressor' },\n  { id: 'TURB-008', name: 'Steam Turbine Generator', type: 'Turbine' }\n];\n\nconst healthStatuses = ['Excellent', 'Good', 'Fair', 'Poor', 'Critical'];\n\nconst items = assets.map(asset => {\n  // Generate random but realistic values\n  const degradationScore = Math.random() * 100;\n  const temperature = 20 + Math.random() * 80; // 20-100\u00b0C\n  const vibration = Math.random() * 10; // 0-10 mm/s\n  const pressure = 1 + Math.random() * 9; // 1-10 bar\n  const operatingHours = Math.floor(Math.random() * 50000);\n  \n  // Last maintenance date (random within last 365 days)\n  const daysAgo = Math.floor(Math.random() * 365);\n  const lastMaintenanceDate = new Date();\n  lastMaintenanceDate.setDate(lastMaintenanceDate.getDate() - daysAgo);\n  \n  // Determine health status based on degradation score\n  let healthStatus;\n  if (degradationScore < 20) healthStatus = 'Excellent';\n  else if (degradationScore < 40) healthStatus = 'Good';\n  else if (degradationScore < 60) healthStatus = 'Fair';\n  else if (degradationScore < 80) healthStatus = 'Poor';\n  else healthStatus = 'Critical';\n  \n  return {\n    json: {\n      assetId: asset.id,\n      assetName: asset.name,\n      assetType: asset.type,\n      temperature: Math.round(temperature * 100) / 100,\n      vibration: Math.round(vibration * 100) / 100,\n      pressure: Math.round(pressure * 100) / 100,\n      operatingHours: operatingHours,\n      lastMaintenanceDate: lastMaintenanceDate.toISOString().split('T')[0],\n      degradationScore: Math.round(degradationScore * 100) / 100,\n      healthStatus: healthStatus,\n      timestamp: new Date().toISOString()\n    }\n  };\n});\n\nreturn items;"
      },
      "typeVersion": 2
    },
    {
      "id": "7108ce2d-7b98-4c7b-9426-403486bab00e",
      "name": "Performance Evaluation Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1120,
        192
      ],
      "parameters": {
        "text": "={{ $json }}",
        "options": {
          "systemMessage": "You are a Performance Evaluation Agent specialized in analyzing asset health and degradation signals.\n\nYour task is to:\n1. Analyze the provided asset health data including temperature, vibration, pressure, operating hours, and degradation scores\n2. Evaluate overall asset health status and identify critical degradation patterns\n3. Calculate risk level (CRITICAL, HIGH, MEDIUM, LOW) based on multiple signal correlations\n4. When risk is HIGH or CRITICAL, call the Maintenance Scheduling Agent Tool to coordinate maintenance\n5. Call the Parts Readiness Agent Tool to verify parts availability for identified maintenance needs\n6. Call the Lifecycle Reporting Agent Tool to generate comprehensive lifecycle reports\n7. Use the MCP External Data Tool to fetch additional contextual data when needed\n8. If uncertainty exists in your analysis, escalate with detailed reasoning\n\nProvide structured analysis with risk assessment, recommended actions, and confidence scores."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3.1
    },
    {
      "id": "6a5b2f37-7c09-4c0a-a775-b088779c8dff",
      "name": "Maintenance Scheduling Agent Tool",
      "type": "@n8n/n8n-nodes-langchain.agentTool",
      "position": [
        800,
        416
      ],
      "parameters": {
        "text": "={{ $fromAI(\"assetData\", \"Asset health data and performance analysis results\", \"json\") }}",
        "options": {
          "systemMessage": "You are a Maintenance Scheduling Agent responsible for coordinating maintenance activities.\n\nYour task is to:\n1. Analyze asset health data and performance evaluation results\n2. Determine optimal maintenance windows based on asset criticality and operational schedules\n3. Calculate estimated maintenance duration and resource requirements\n4. Identify scheduling conflicts and propose alternatives\n5. Prioritize maintenance tasks based on risk level and business impact\n6. Return structured scheduling recommendations with timelines and resource allocations\n\nConsider operational constraints, resource availability, and minimize downtime."
        },
        "hasOutputParser": true,
        "toolDescription": "Coordinates maintenance scheduling based on asset health analysis, determines optimal maintenance windows, and allocates resources"
      },
      "typeVersion": 3
    },
    {
      "id": "3875a7e1-7a1a-4fbc-9a90-d0e5d613a744",
      "name": "Parts Readiness Agent Tool",
      "type": "@n8n/n8n-nodes-langchain.agentTool",
      "position": [
        1088,
        416
      ],
      "parameters": {
        "text": "={{ $fromAI(\"maintenanceRequirements\", \"Maintenance requirements and parts needed\", \"json\") }}",
        "options": {
          "systemMessage": "You are a Parts Readiness Agent responsible for ensuring parts availability for maintenance operations.\n\nYour task is to:\n1. Analyze maintenance requirements and identify required parts and components\n2. Check parts inventory levels and availability\n3. Calculate lead times for parts procurement\n4. Identify critical parts shortages that could delay maintenance\n5. Recommend alternative parts or suppliers when primary options are unavailable\n6. Return structured parts readiness assessment with availability status and procurement timelines\n\nEscalate when critical parts are unavailable or lead times exceed maintenance urgency."
        },
        "hasOutputParser": true,
        "toolDescription": "Verifies parts availability, checks inventory levels, and provides procurement timelines for maintenance operations"
      },
      "typeVersion": 3
    },
    {
      "id": "aeda6694-361b-4549-b1a6-fa55d0b07673",
      "name": "Lifecycle Reporting Agent Tool",
      "type": "@n8n/n8n-nodes-langchain.agentTool",
      "position": [
        1376,
        416
      ],
      "parameters": {
        "text": "={{ $fromAI(\"assetLifecycleData\", \"Asset lifecycle data and maintenance history\", \"json\") }}",
        "options": {
          "systemMessage": "You are a Lifecycle Reporting Agent responsible for generating comprehensive asset lifecycle reports.\n\nYour task is to:\n1. Analyze asset lifecycle data including maintenance history, operating hours, and performance trends\n2. Calculate total cost of ownership and maintenance costs over time\n3. Identify lifecycle patterns and predict remaining useful life\n4. Generate reports on asset utilization, efficiency, and reliability metrics\n5. Provide recommendations for lifecycle optimization and replacement planning\n6. Return structured lifecycle reports with historical trends and future projections\n\nInclude data-driven insights and actionable recommendations for asset management."
        },
        "hasOutputParser": true,
        "toolDescription": "Generates comprehensive lifecycle reports including maintenance history, cost analysis, and remaining useful life predictions"
      },
      "typeVersion": 3
    },
    {
      "id": "764f5598-1d78-4e7e-a915-0ee4a97f9938",
      "name": "Anthropic Model - Performance Agent",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        672,
        416
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-5-20250929",
          "cachedResultName": "Claude Sonnet 4.5"
        },
        "options": {
          "temperature": 0.2,
          "maxTokensToSample": 4096
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "e36f7513-e024-4988-ae42-efda982bd553",
      "name": "Anthropic Model - Maintenance Tool",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        704,
        624
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-5-20250929",
          "cachedResultName": "Claude Sonnet 4.5"
        },
        "options": {
          "temperature": 0.2,
          "maxTokensToSample": 2048
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "9054bded-0a78-455c-822d-9f51f559d823",
      "name": "Anthropic Model - Parts Tool",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        1088,
        624
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-5-20250929",
          "cachedResultName": "Claude Sonnet 4.5"
        },
        "options": {
          "temperature": 0.2,
          "maxTokensToSample": 2048
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "b680aabf-fbaa-4f81-b829-38617eb63c76",
      "name": "Anthropic Model - Lifecycle Tool",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        1440,
        624
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-5-20250929",
          "cachedResultName": "Claude Sonnet 4.5"
        },
        "options": {
          "temperature": 0.2,
          "maxTokensToSample": 2048
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "22942b56-6dec-4343-9c92-8e15e2010f00",
      "name": "Performance Analysis Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1792,
        416
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"assetId\": \"string\",\n  \"assetName\": \"string\",\n  \"riskLevel\": \"CRITICAL | HIGH | MEDIUM | LOW\",\n  \"overallHealthScore\": 0,\n  \"degradationAnalysis\": \"string\",\n  \"criticalSignals\": [\"string\"],\n  \"recommendedActions\": [\"string\"],\n  \"maintenanceUrgency\": \"IMMEDIATE | URGENT | SCHEDULED | ROUTINE\",\n  \"confidenceScore\": 0,\n  \"uncertaintyFactors\": [\"string\"],\n  \"escalationRequired\": false,\n  \"escalationReason\": \"string\",\n  \"agentsCalled\": [\"string\"],\n  \"timestamp\": \"string\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "c5f6611c-13ea-4acf-baea-7c898ad66d53",
      "name": "Maintenance Scheduling Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        880,
        624
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"scheduledMaintenanceWindow\": \"string\",\n  \"estimatedDuration\": \"string\",\n  \"resourcesRequired\": [\"string\"],\n  \"maintenancePriority\": \"string\",\n  \"schedulingConflicts\": [\"string\"],\n  \"alternativeWindows\": [\"string\"],\n  \"downtimeImpact\": \"string\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "7195d277-60ee-456f-a3ed-71d1dc15cd7a",
      "name": "Parts Readiness Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1248,
        624
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"requiredParts\": [{\"partId\": \"string\", \"partName\": \"string\", \"quantity\": 0, \"available\": false, \"leadTime\": \"string\"}],\n  \"inventoryStatus\": \"READY | PARTIAL | UNAVAILABLE\",\n  \"criticalShortages\": [\"string\"],\n  \"procurementTimeline\": \"string\",\n  \"alternativeOptions\": [\"string\"],\n  \"estimatedCost\": 0\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "1ce73ca9-6630-4109-9992-0fdceeb5372c",
      "name": "Lifecycle Reporting Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1648,
        640
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"totalOperatingHours\": 0,\n  \"maintenanceHistory\": [{\"date\": \"string\", \"type\": \"string\", \"cost\": 0}],\n  \"totalMaintenanceCost\": 0,\n  \"averageDowntime\": \"string\",\n  \"reliabilityScore\": 0,\n  \"remainingUsefulLife\": \"string\",\n  \"replacementRecommendation\": \"string\",\n  \"lifecycleOptimizationTips\": [\"string\"]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "658dc2ae-f2a1-450a-9b2c-4643ace646b8",
      "name": "MCP External Data Tool",
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "position": [
        1664,
        416
      ],
      "parameters": {
        "options": {},
        "endpointUrl": "={{ $('Workflow Configuration').first().json.mcpEndpoint }}",
        "authentication": "headerAuth"
      },
      "typeVersion": 1.2
    },
    {
      "id": "4fa5df44-26b4-4b3a-a05d-bdf434333c96",
      "name": "Route by Risk Level",
      "type": "n8n-nodes-base.switch",
      "position": [
        2160,
        272
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Critical",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.riskLevel }}",
                    "rightValue": "CRITICAL"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "High",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.riskLevel }}",
                    "rightValue": "HIGH"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra",
          "renameFallbackOutput": "Routine"
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6c53a458-9a11-4e18-8f34-9cd9ef856281",
      "name": "Notify Critical Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        2384,
        240
      ],
      "parameters": {
        "text": "=\ud83d\udea8 *CRITICAL ASSET ALERT*\n\n*Asset:* {{ $json.output.assetName }} ({{ $json.output.assetId }})\n*Risk Level:* {{ $json.output.riskLevel }}\n*Health Score:* {{ $json.output.overallHealthScore }}/100\n*Maintenance Urgency:* {{ $json.output.maintenanceUrgency }}\n\n*Degradation Analysis:*\n{{ $json.output.degradationAnalysis }}\n\n*Critical Signals:*\n{{ $json.output.criticalSignals.join(\", \") }}\n\n*Recommended Actions:*\n{{ $json.output.recommendedActions.map((a, i) => `${i+1}. ${a}`).join(\"\\n\") }}\n\n*Confidence:* {{ $json.output.confidenceScore }}%\n{{ $json.output.escalationRequired ? \"\u26a0\ufe0f *ESCALATION REQUIRED:* \" + $json.output.escalationReason : \"\" }}\n\n_Detected at {{ $json.output.timestamp }}_",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.slackChannel }}"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "65cef488-15ec-41f5-b733-8b5399a3f7be",
      "name": "Email Escalation Report",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2400,
        448
      ],
      "parameters": {
        "html": "=<html>\n<body style=\"font-family: Arial, sans-serif; line-height: 1.6; color: #333;\">\n<div style=\"background-color: {{ $json.output.riskLevel === \"CRITICAL\" ? \"#dc3545\" : \"#fd7e14\" }}; color: white; padding: 20px; border-radius: 5px;\">\n<h2>{{ $json.output.riskLevel === \"CRITICAL\" ? \"\ud83d\udea8\" : \"\u26a0\ufe0f\" }} Asset Maintenance Escalation</h2>\n</div>\n\n<div style=\"padding: 20px;\">\n<h3>Asset Details</h3>\n<table style=\"width: 100%; border-collapse: collapse;\">\n<tr><td style=\"padding: 8px; border: 1px solid #ddd; font-weight: bold;\">Asset ID:</td><td style=\"padding: 8px; border: 1px solid #ddd;\">{{ $json.output.assetId }}</td></tr>\n<tr><td style=\"padding: 8px; border: 1px solid #ddd; font-weight: bold;\">Asset Name:</td><td style=\"padding: 8px; border: 1px solid #ddd;\">{{ $json.output.assetName }}</td></tr>\n<tr><td style=\"padding: 8px; border: 1px solid #ddd; font-weight: bold;\">Risk Level:</td><td style=\"padding: 8px; border: 1px solid #ddd;\">{{ $json.output.riskLevel }}</td></tr>\n<tr><td style=\"padding: 8px; border: 1px solid #ddd; font-weight: bold;\">Health Score:</td><td style=\"padding: 8px; border: 1px solid #ddd;\">{{ $json.output.overallHealthScore }}/100</td></tr>\n<tr><td style=\"padding: 8px; border: 1px solid #ddd; font-weight: bold;\">Maintenance Urgency:</td><td style=\"padding: 8px; border: 1px solid #ddd;\">{{ $json.output.maintenanceUrgency }}</td></tr>\n</table>\n\n<h3>Degradation Analysis</h3>\n<p style=\"background-color: #f8f9fa; padding: 15px; border-left: 4px solid {{ $json.output.riskLevel === \"CRITICAL\" ? \"#dc3545\" : \"#fd7e14\" }};\">{{ $json.output.degradationAnalysis }}</p>\n\n<h3>Critical Signals Detected</h3>\n<ul>\n{{ $json.output.criticalSignals.map(signal => `<li>${signal}</li>`).join(\"\") }}\n</ul>\n\n<h3>Recommended Actions</h3>\n<ol>\n{{ $json.output.recommendedActions.map(action => `<li>${action}</li>`).join(\"\") }}\n</ol>\n\n<h3>AI Agent Analysis</h3>\n<p><strong>Confidence Score:</strong> {{ $json.output.confidenceScore }}%</p>\n<p><strong>Agents Called:</strong> {{ $json.output.agentsCalled.join(\", \") }}</p>\n{{ $json.output.uncertaintyFactors.length > 0 ? `<p><strong>Uncertainty Factors:</strong> ${$json.output.uncertaintyFactors.join(\", \")}</p>` : \"\" }}\n\n{{ $json.output.escalationRequired ? `<div style=\"margin-top: 30px; padding: 15px; background-color: #fff3cd; border-left: 4px solid #ffc107;\">\n<strong>\u26a0\ufe0f ESCALATION REQUIRED</strong><br>\n${$json.output.escalationReason}\n</div>` : \"\" }}\n\n<p style=\"color: #666; font-size: 12px; margin-top: 30px;\">Generated: {{ $json.output.timestamp }}</p>\n</div>\n</body>\n</html>",
        "options": {},
        "subject": "={{ $json.output.riskLevel }} Risk Alert: {{ $json.output.assetName }} - Maintenance Required",
        "toEmail": "={{ $('Workflow Configuration').first().json.escalationEmail }}",
        "fromEmail": "<__PLACEHOLDER_VALUE__Sender email address__>"
      },
      "typeVersion": 2.1
    },
    {
      "id": "f299b607-773a-4b1d-bb99-57a5e7680c3c",
      "name": "Log Routine Maintenance",
      "type": "n8n-nodes-base.set",
      "position": [
        2400,
        624
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "logType",
              "type": "string",
              "value": "routine_maintenance"
            },
            {
              "id": "id-2",
              "name": "assetId",
              "type": "string",
              "value": "={{ $json.output.assetId }}"
            },
            {
              "id": "id-3",
              "name": "assetName",
              "type": "string",
              "value": "={{ $json.output.assetName }}"
            },
            {
              "id": "id-4",
              "name": "riskLevel",
              "type": "string",
              "value": "={{ $json.output.riskLevel }}"
            },
            {
              "id": "id-5",
              "name": "healthScore",
              "type": "number",
              "value": "={{ $json.output.overallHealthScore }}"
            },
            {
              "id": "id-6",
              "name": "maintenanceUrgency",
              "type": "string",
              "value": "={{ $json.output.maintenanceUrgency }}"
            },
            {
              "id": "id-7",
              "name": "recommendedActions",
              "type": "string",
              "value": "={{ $json.output.recommendedActions }}"
            },
            {
              "id": "id-8",
              "name": "timestamp",
              "type": "string",
              "value": "={{ $json.output.timestamp }}"
            },
            {
              "id": "id-9",
              "name": "status",
              "type": "string",
              "value": "logged"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "738dceac-208a-4c4b-adaf-b520c8cd7751",
      "name": "Merge All Paths",
      "type": "n8n-nodes-base.merge",
      "position": [
        2608,
        272
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "947d6007-fd9f-4dae-abad-b0af4b616ca6",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1072,
        -384
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 368,
        "content": "## Prerequisites\nn8n (cloud or self-hosted), Anthropic API key (Claude), Slack workspace with bot token \n## Use Cases\nFacility managers automating condition-based maintenance scheduling across multiple assets\n## Customization\nReplace Anthropic Claude with OpenAI GPT-4 or NVIDIA NIM in any agent node\n## Benefits\nShifts maintenance from reactive to predictive, reducing unplanned downtime significantly"
      },
      "typeVersion": 1
    },
    {
      "id": "2098ce6a-e5d8-4614-b55d-602b4b9ab2b3",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        -352
      ],
      "parameters": {
        "width": 400,
        "height": 320,
        "content": "## Setup Steps\n1. Import workflow JSON into your n8n instance.\n2. Add Anthropic API credentials.\n3. Set Schedule Trigger frequency aligned to your asset monitoring cycle.\n4. Update Workflow Configuration node with asset thresholds.\n5. Configure MCP External Data Tool with your external data source endpoint and authentication.\n6. Add Slack credentials and set the target channel in the Notify Critical Alert node.\n7. Set Gmail/SMTP credentials for the Email Escalation Report node."
      },
      "typeVersion": 1
    },
    {
      "id": "47e8eeca-d573-43b6-b256-f9aef29d323b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -304
      ],
      "parameters": {
        "width": 592,
        "height": 288,
        "content": "## How It Works\nThis workflow automates industrial asset health monitoring and predictive maintenance using Anthropic Claude across coordinated specialist agents. It targets facility managers, maintenance engineers, and operations teams in manufacturing, energy, and infrastructure sectors where reactive maintenance leads to costly unplanned downtime and asset failures. On schedule, the system ingests asset health data and routes it through a Performance Evaluation Agent that coordinates three specialist agents: Maintenance Scheduling, Parts Readiness, and Lifecycle Reporting. An MCP External Data Tool enriches analysis with real-time contextual data. Results are risk-routed\u2014Critical assets trigger immediate Slack alerts, High-risk assets escalate via email reports, and Routine cases are logged for scheduled maintenance. All paths merge into a unified maintenance log, giving operations teams proactive, audit-ready asset intelligence before failures occur."
      },
      "typeVersion": 1
    },
    {
      "id": "07018006-2a4a-4f48-a229-a4b97520583a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        32
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 832,
        "content": "## Risk Routing & Notification\n**What:** Critical alerts fire via Slack, High-risk cases escalate by email, Routine cases are logged.\n**Why:** Ensures the right stakeholders act immediately on the most urgent asset conditions."
      },
      "typeVersion": 1
    },
    {
      "id": "496d98b1-2b93-45ec-af03-4fefd9d59836",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        32
      ],
      "parameters": {
        "color": 7,
        "width": 1424,
        "height": 816,
        "content": "## Performance Evaluation Agent\n**What:** Anthropic Claude assesses overall asset condition and delegates to specialist agents.\n**Why:** Centralises intelligence, ensuring consistent evaluation before action is taken.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "63b3e921-d60e-4f61-8046-c28ddbaed5cb",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        32
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 736,
        "content": "## Generate Asset Health Data\n**What:** Loads or simulates sensor and performance metrics per asset.\n**Why:** Provides structured operational data for downstream AI evaluation."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "8acb5026-a3b2-4f92-9cfb-8e94155e9291",
  "connections": {
    "Route by Risk Level": {
      "main": [
        [
          {
            "node": "Notify Critical Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Email Escalation Report",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Routine Maintenance",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Critical Alert": {
      "main": [
        [
          {
            "node": "Merge All Paths",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MCP External Data Tool": {
      "ai_tool": [
        [
          {
            "node": "Performance Evaluation Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Generate Asset Health Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email Escalation Report": {
      "main": [
        [
          {
            "node": "Merge All Paths",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Log Routine Maintenance": {
      "main": [
        [
          {
            "node": "Merge All Paths",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Generate Asset Health Data": {
      "main": [
        [
          {
            "node": "Performance Evaluation Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parts Readiness Agent Tool": {
      "ai_tool": [
        [
          {
            "node": "Performance Evaluation Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Asset Health Check": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Model - Parts Tool": {
      "ai_languageModel": [
        [
          {
            "node": "Parts Readiness Agent Tool",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Performance Evaluation Agent": {
      "main": [
        [
          {
            "node": "Route by Risk Level",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parts Readiness Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Parts Readiness Agent Tool",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Lifecycle Reporting Agent Tool": {
      "ai_tool": [
        [
          {
            "node": "Performance Evaluation Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Model - Lifecycle Tool": {
      "ai_languageModel": [
        [
          {
            "node": "Lifecycle Reporting Agent Tool",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Lifecycle Reporting Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Lifecycle Reporting Agent Tool",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Maintenance Scheduling Agent Tool": {
      "ai_tool": [
        [
          {
            "node": "Performance Evaluation Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Model - Maintenance Tool": {
      "ai_languageModel": [
        [
          {
            "node": "Maintenance Scheduling Agent Tool",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Performance Analysis Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Performance Evaluation Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Model - Performance Agent": {
      "ai_languageModel": [
        [
          {
            "node": "Performance Evaluation Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Maintenance Scheduling Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Maintenance Scheduling Agent Tool",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automates industrial asset health monitoring and predictive maintenance using Anthropic Claude across coordinated specialist agents. It targets facility managers, maintenance engineers, and operations teams in manufacturing, energy, and infrastructure sectors where…

Source: https://n8n.io/workflows/13595/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow automates enterprise budget monitoring and cost optimization using Anthropic Claude as the core AI engine across multiple specialist agents. It targets finance teams, operations managers

Agent, Anthropic Chat, Output Parser Structured +5
AI & RAG

This n8n workflow automatically prepares comprehensive sales research briefs every morning for your upcoming meetings by analyzing both the companies you're meeting with and the individual attendees.

Google Calendar, @Exploriumai/N8N Nodes Explorium Ai, Anthropic Chat +4
AI & RAG

This workflow automates end-to-end carbon emissions monitoring, strategy optimisation, and ESG reporting using a multi-agent AI supervisor architecture in n8n. Designed for sustainability managers, ES

Agent, OpenAI Chat, Output Parser Structured +10
AI & RAG

This workflow automates end-to-end carbon emissions monitoring, strategy optimisation, and ESG reporting using a multi-agent AI supervisor architecture in n8n. Designed for sustainability managers, ES

Agent, OpenAI Chat, Output Parser Structured +10
AI & RAG

This workflow automates end-to-end carbon emissions monitoring, strategy optimisation, and ESG reporting using a multi-agent AI supervisor architecture in n8n. Designed for sustainability managers, ES

Agent, OpenAI Chat, Output Parser Structured +10