{ "id": "8n0VYmvJgISwezyz", "meta": { "instanceId": "workflow-6908337f", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:44.226760", "updatedAt": "2025-09-29T07:07:44.226768", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "Build your first AI MCP Server", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "f734e72b-1954-44e8-8633-47b6fa69bfc7", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "position": [ -440, -160 ], "parameters": { "options": { "systemMessage": "=You are a helpful assistant.\nCurrent datetime is {{ $now.toString() }}" } }, "typeVersion": 1.8, "notes": "This agent node performs automated tasks as part of the workflow." }, { "id": "02c66e36-63e6-48f5-a26a-2c7b1eaf2400", "name": "SearchEvent", "type": "n8n-nodes-base.googleCalendarTool", "position": [ 1180, 200 ], "parameters": { "limit": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Limit', ``, 'number') }}", "options": {}, "timeMax": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Before', ``, 'string') }}", "timeMin": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('After', ``, 'string') }}", "calendar": { "__rl": true, "mode": "list", "value": "gmsalomao2@gmail.com", "cachedResultName": "gmsalomao2@gmail.com" }, "operation": "getAll" }, "credentials": { "googleCalendarOAuth2Api": { "id": "imp2lyvMg9IpuCwC", "name": "Google Calendar account" } }, "typeVersion": 1.3, "notes": "This googleCalendarTool node performs automated tasks as part of the workflow." }, { "id": "5956abba-4458-480c-997f-416126dc8c10", "name": "CreateEvent", "type": "n8n-nodes-base.googleCalendarTool", "position": [ 1300, 200 ], "parameters": { "end": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End', ``, 'string') }}", "start": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start', ``, 'string') }}", "calendar": { "__rl": true, "mode": "list", "value": "gmsalomao2@gmail.com", "cachedResultName": "gmsalomao2@gmail.com" }, "additionalFields": { "summary": "={{ $fromAI(\"event_title\", \"The event title\", \"string\") }}", "description": "={{ $fromAI(\"event_description\", \"The event description\", \"string\") }}" } }, "credentials": { "googleCalendarOAuth2Api": { "id": "imp2lyvMg9IpuCwC", "name": "Google Calendar account" } }, "typeVersion": 1.3, "notes": "This googleCalendarTool node performs automated tasks as part of the workflow." }, { "id": "f12fd8d6-1600-4516-bbb0-a0a893e2ff25", "name": "UpdateEvent", "type": "n8n-nodes-base.googleCalendarTool", "position": [ 1420, 200 ], "parameters": { "eventId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Event_ID', ``, 'string') }}", "calendar": { "__rl": true, "mode": "list", "value": "gmsalomao2@gmail.com", "cachedResultName": "gmsalomao2@gmail.com" }, "operation": "update", "updateFields": { "end": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End', ``, 'string') }}", "start": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start', ``, 'string') }}", "summary": "={{ $fromAI(\"event_title\", \"The event title\", \"string\") }}", "description": "={{ $fromAI(\"event_description\", \"The event description\", \"string\") }}" } }, "credentials": { "googleCalendarOAuth2Api": { "id": "imp2lyvMg9IpuCwC", "name": "Google Calendar account" } }, "typeVersion": 1.3, "notes": "This googleCalendarTool node performs automated tasks as part of the workflow." }, { "id": "b9c6d019-cf0a-4192-b063-e94322f12dae", "name": "DeleteEvent", "type": "n8n-nodes-base.googleCalendarTool", "position": [ 1540, 200 ], "parameters": { "eventId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Event_ID', ``, 'string') }}", "options": {}, "calendar": { "__rl": true, "mode": "list", "value": "gmsalomao2@gmail.com", "cachedResultName": "gmsalomao2@gmail.com" }, "operation": "delete" }, "credentials": { "googleCalendarOAuth2Api": { "id": "imp2lyvMg9IpuCwC", "name": "Google Calendar account" } }, "typeVersion": 1.3, "notes": "This googleCalendarTool node performs automated tasks as part of the workflow." }, { "id": "48e028c3-392f-429c-9e71-a3cbdb342a99", "name": "Google Calendar MCP", "type": "n8n-nodes-base.noOp", "position": [ 1180, 0 ], "webhookId": "f9d9d5ea-6f83-42c8-ae50-ee6c71789bca", "parameters": { "path": "my-calendar" }, "typeVersion": 1, "notes": "This mcpTrigger node performs automated tasks as part of the workflow." }, { "id": "fede10f5-e75b-4851-834f-f248f07a5559", "name": "When Executed by Another Workflow", "type": "n8n-nodes-base.executeWorkflowTrigger", "position": [ 560, 900 ], "parameters": { "workflowInputs": { "values": [ { "name": "function_name" }, { "name": "payload", "type": "object" } ] } }, "typeVersion": 1.1, "notes": "This executeWorkflowTrigger node performs automated tasks as part of the workflow." }, { "id": "bc77345e-e6e0-4529-97f0-872eb96d1631", "name": "Switch", "type": "n8n-nodes-base.switch", "position": [ 780, 880 ], "parameters": { "rules": { "values": [ { "outputKey": "YOUR_CREDENTIAL_HERE", "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "ab18304c-4f73-430f-b9fa-2ce4d098e1fa", "operator": { "type": "string", "operation": "equals" }, "leftValue": "={{ $json.function_name }}", "rightValue": "uppercase" } ] }, "renameOutput": true }, { "outputKey": "YOUR_CREDENTIAL_HERE", "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "606bda79-f401-4de2-be9d-51368c794479", "operator": { "name": "filter.operator.equals", "type": "string", "operation": "equals" }, "leftValue": "={{ $json.function_name }}", "rightValue": "lowercase" } ] }, "renameOutput": true }, { "outputKey": "YOUR_CREDENTIAL_HERE", "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "4b22e689-e652-47d2-b737-7be00da9f185", "operator": { "name": "filter.operator.equals", "type": "string", "operation": "equals" }, "leftValue": "={{ $json.function_name }}", "rightValue": "random_user_data" } ] }, "renameOutput": true }, { "outputKey": "YOUR_CREDENTIAL_HERE", "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "27a75a2c-8058-4a7c-85c1-898cabeac4a1", "operator": { "name": "filter.operator.equals", "type": "string", "operation": "equals" }, "leftValue": "={{ $json.function_name }}", "rightValue": "joke" } ] }, "renameOutput": true } ] }, "options": {} }, "typeVersion": 3.2, "notes": "This switch node performs automated tasks as part of the workflow." }, { "id": "abc580fa-3293-443d-a3a3-5d12c0655be2", "name": "Convert Text to Upper Case", "type": "n8n-nodes-base.set", "position": [ 1120, 540 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "42333f26-8e14-438a-9965-eec31bf4b6a3", "name": "converted_text", "type": "string", "value": "={{ $json.payload.text.toUpperCase() }}" } ] } }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "37d2337c-3ccf-4c34-8284-5acc6cbb89fe", "name": "Convert Text to Lower Case", "type": "n8n-nodes-base.set", "position": [ 1120, 740 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "42333f26-8e14-438a-9965-eec31bf4b6a3", "name": "converted_text", "type": "string", "value": "={{ $json.payload.text.toLowerCase() }}" } ] } }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "138d2f10-deca-41c7-bec0-8a7727993d44", "name": "Convert Text", "type": "n8n-nodes-base.noOp", "position": [ 560, 200 ], "parameters": { "name": "convert_text_case", "workflowId": { "__rl": true, "mode": "id", "value": "={{ $workflow.id }}" }, "description": "Call this tool to convert text to lower case or upper case.", "workflowInputs": { "value": { "payload": "={\n \"text\": \"{{ $fromAI(\"text_to_convert\", \"The text to convert\", \"string\") }}\"\n}\n", "function_name": "={{ $fromAI(\"function_name\", \"Either lowercase or uppercase\", \"string\") }}" }, "schema": [ { "id": "function_name", "type": "string", "display": true, "removed": false, "required": false, "displayName": "function_name", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "payload", "type": "object", "display": true, "removed": false, "required": false, "displayName": "payload", "defaultMatch": false, "canBeUsedToMatch": true } ], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false } }, "typeVersion": 2.1, "notes": "This toolWorkflow node performs automated tasks as part of the workflow." }, { "id": "bf198087-b571-4de3-a174-c53b769c1326", "name": "When chat message received", "type": "n8n-nodes-base.noOp", "position": [ -640, -160 ], "webhookId": "7b02318f-1c6b-4f2a-9a4f-b17fa69ea680", "parameters": { "options": {} }, "typeVersion": 1.1, "notes": "This chatTrigger node performs automated tasks as part of the workflow." }, { "id": "df4435ad-0512-4a50-9eaf-2aef566c5fdb", "name": "Simple Memory", "type": "n8n-nodes-base.noOp", "position": [ -340, 60 ], "parameters": {}, "typeVersion": 1.3, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow." }, { "id": "60745d31-1892-45c1-82b2-bb67386f4384", "name": "Calendar MCP", "type": "n8n-nodes-base.noOp", "position": [ 200, 80 ], "parameters": { "sseEndpoint": "{{ $env.WEBHOOK_URL }}" }, "typeVersion": 1, "notes": "This mcpClientTool node performs automated tasks as part of the workflow." }, { "id": "17bef416-fd54-47da-87c7-afd7e6fa5345", "name": "My Functions", "type": "n8n-nodes-base.noOp", "position": [ 40, 80 ], "parameters": { "sseEndpoint": "{{ $env.WEBHOOK_URL }}" }, "typeVersion": 1, "notes": "This mcpClientTool node performs automated tasks as part of the workflow." }, { "id": "d883db20-c3d9-47bf-b19b-85098067054a", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ 440, -160 ], "parameters": { "color": 3, "width": 620, "height": 520, "content": "## Activate the workflow to make the MCP Trigger work\nIn order to make the MCP server available, you need to activate the workflow.\n\nThen copy the Production URL of the MCP Trigger and paste it in the corresponding MCP Client tool." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "83b21003-eced-444c-ae5c-2fe77ed31fa9", "name": "My Functions Server", "type": "n8n-nodes-base.noOp", "position": [ 560, 0 ], "webhookId": "83f72547-18b7-4f02-846b-27bf39d1efff", "parameters": { "path": "my-functions" }, "typeVersion": 1, "notes": "This mcpTrigger node performs automated tasks as part of the workflow." }, { "id": "4bc297bc-8ded-4e6e-aa2d-de2f41659864", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [ -60, -160 ], "parameters": { "color": 7, "width": 440, "height": 520, "content": "## MCP Clients\nFor every tool here you need to obtain he corresponding Production URL from the MCP Triggers on the right 👉" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "2ad20ab6-b8a6-4427-af03-fbc512f0aa3c", "name": "Random user data", "type": "n8n-nodes-base.debugHelper", "position": [ 1120, 1040 ], "parameters": { "category": "randomData", "randomDataCount": "={{ $json.payload.number }}" }, "typeVersion": 1, "notes": "This debugHelper node performs automated tasks as part of the workflow." }, { "id": "84435164-94c8-4093-8578-81d5a870bef5", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [ -1360, -160 ], "parameters": { "color": 7, "width": 620, "height": 640, "content": "# Try these example requests with the AI Agent\n\n### My Functions MCP\n1. Use your tools to convert this text to lower case: `EXAMPLE TeXt`\n\n2. Use your tools to convert this text to upper case: `example TeXt`\n\n3. Generate 5 random user data, please.\n\n4. Please obtain 3 jokes.\n\n\n\n\n### Calendar MCP\n5. What is my schedule for next week?\n\n6. I have a meeting with John tomorrow at 2pm. Please add it to my Calendar.\n\n7. Adjust the time of my meeting with John tomorrow from 2pm to 4pm, please.\n\n8. Cancel my meeting with John, tomorrow." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "d678dc07-1c44-4bdb-9707-dc544cd813b2", "name": "Generate random user data", "type": "n8n-nodes-base.noOp", "position": [ 720, 200 ], "parameters": { "name": "random_user_data", "workflowId": { "__rl": true, "mode": "id", "value": "={{ $workflow.id }}" }, "description": "Generate random user data", "workflowInputs": { "value": { "payload": "={\n \"number\": {{ $fromAI(\"amount\", \"The amount of user data to generate in integer format\", \"number\") }}\n}", "function_name": "random_user_data" }, "schema": [ { "id": "function_name", "type": "string", "display": true, "removed": false, "required": false, "displayName": "function_name", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "payload", "type": "object", "display": true, "removed": false, "required": false, "displayName": "payload", "defaultMatch": false, "canBeUsedToMatch": true } ], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false } }, "typeVersion": 2.1, "notes": "This toolWorkflow node performs automated tasks as part of the workflow." }, { "id": "38f22f69-c6e0-49d8-837c-64e72743ffbf", "name": "Return only some fields", "type": "n8n-nodes-base.set", "position": [ 1340, 1040 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "b4548cbe-f3fc-4911-901a-d73182d710a9", "name": "First name", "type": "string", "value": "={{ $json.firstname }}" }, { "id": "6e573a27-ef03-4254-8f9b-2c471e1540c2", "name": "Last name", "type": "string", "value": "={{ $json.lastname }}" }, { "id": "ac5b5806-bf8e-4e1a-a47d-e7180d31e98a", "name": "Email", "type": "string", "value": "={{ $json.email }}" } ] } }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "a66e8f27-ebf5-460b-898f-b91017d37883", "name": "Joke Request", "type": "n8n-nodes-base.httpRequest", "position": [ 1120, 1240 ], "parameters": { "url": "{{ $env.BASE_URL }}", "options": {} }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "98205665-4b35-4850-9f37-df1688edde85", "name": "Random Jokes", "type": "n8n-nodes-base.noOp", "position": [ 880, 200 ], "parameters": { "name": "obtain_jokes", "workflowId": { "__rl": true, "mode": "id", "value": "={{ $workflow.id }}" }, "description": "Call this tool to obtain random jokes", "workflowInputs": { "value": { "payload": "={\n \"number\": {{ $fromAI(\"amount\", \"The amount of jokes to request\", \"number\") }}\n}", "function_name": "joke" }, "schema": [ { "id": "function_name", "type": "string", "display": true, "removed": false, "required": false, "displayName": "function_name", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "payload", "type": "object", "display": true, "removed": false, "required": false, "displayName": "payload", "defaultMatch": false, "canBeUsedToMatch": true } ], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false } }, "typeVersion": 2.1, "notes": "This toolWorkflow node performs automated tasks as part of the workflow." }, { "id": "643221de-4ec5-45c2-818d-e754e2b76377", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [ 440, 380 ], "parameters": { "color": 7, "width": 1260, "height": 1060, "content": "## The My Functions MCP calls this sub-workflow every time.\nA subworkflow is a separate workflow that can be called by other workflows and is able to receive parameters.\nLearn more about sub-workflows **[here]({{ $env.WEBHOOK_URL }}" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "ff5dafdc-02f2-4a40-a803-044e18f6d680", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [ 1080, -160 ], "parameters": { "color": 5, "width": 620, "height": 520, "content": "## Google Calendar tools require credentials\nIf you don't have your Google Credentials set up in n8n yet, watch [this]({{ $env.WEBHOOK_URL }} video to learn how to do it.\n\nIf you are using n8n Cloud plans, it's very intuitive to setup and you may not even need the tutorial." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "cb113628-48c3-4be7-8306-c60e92bbd295", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [ -1360, 500 ], "parameters": { "color": 7, "width": 620, "height": 580, "content": "# Author\n![Solomon]({{ $env.WEBHOOK_URL }}\n### Solomon\nFreelance consultant from Brazil, specializing in automations and data analysis. I work with select clients, addressing their toughest projects.\n\nCurrently running the [Scrapes community]({{ $env.WEBHOOK_URL }} with Simon 💪\n\nFor business inquiries, email me at automations.solomon@gmail.com\nOr message me on [Telegram]({{ $env.WEBHOOK_URL }} for a faster response.\n\n## Check out my other templates\n### 👉 {{ $env.WEBHOOK_URL }}\n" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "83f39d92-73a8-480f-bf66-0996a54c39b9", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [ -1360, 1100 ], "parameters": { "width": 620, "height": 180, "content": "# Need help?\nFor getting help with this workflow, please create a topic on the community forums here:\n{{ $env.WEBHOOK_URL }}" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "d6dfab2b-3c55-40b1-ac84-2a30650089f2", "name": "OpenAI 4o", "type": "n8n-nodes-base.noOp", "position": [ -480, 60 ], "parameters": { "model": { "__rl": true, "mode": "list", "value": "gpt-4o", "cachedResultName": "gpt-4o" }, "options": {} }, "credentials": { "openAiApi": { "id": "1OcDEFHmAarBeW0G", "name": "n8n-testing2" } }, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow." }, { "id": "7452095e-d893-40c0-a099-302572dcc513", "name": "Sticky Note7", "type": "n8n-nodes-base.stickyNote", "position": [ -640, 180 ], "parameters": { "color": 7, "height": 240, "content": "## Why model 4o? 👆\nAfter testing 4o-mini it had some difficulties handling the calendar requests, while the 4o model handled it with ease.\n\nDepending on your prompt and tools, 4o-mini might be able to work well too, but it requires further testing." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "33687586-79d7-4a59-bec0-09fd09bc0a7d", "name": "Sticky Note8", "type": "n8n-nodes-base.stickyNote", "position": [ -1360, -320 ], "parameters": { "color": 4, "width": 3060, "height": 140, "content": "" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "02d2a399-36ca-4580-8442-59a7752e3808", "name": "Sticky Note9", "type": "n8n-nodes-base.stickyNote", "position": [ -240, -280 ], "parameters": { "color": 4, "width": 800, "height": 80, "content": "# Learn How to Build an MCP Server and Client" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." } ], "active": false, "pinData": { "When Executed by Another Workflow": [ { "json": { "payload": { "number": 5 }, "function_name": "joke" } } ] }, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "versionId": "1da3b8d6-0a3e-472d-84f3-06771229901f", "connections": { "a66e8f27-ebf5-460b-898f-b91017d37883": { "main": [ [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883", "type": "main", "index": 0 } ], [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883-5675245b", "type": "main", "index": 0 } ], [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883-545b4ade", "type": "main", "index": 0 } ], [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883-1b99ee13", "type": "main", "index": 0 } ], [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883-ecf349a9", "type": "main", "index": 0 } ], [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883-79b40322", "type": "main", "index": 0 } ], [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883-a7aedc14", "type": "main", "index": 0 } ], [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883-3b775d8b", "type": "main", "index": 0 } ], [ { "node": "error-handler-a66e8f27-ebf5-460b-898f-b91017d37883-45a69994", "type": "main", "index": 0 } ] ] }, "02c66e36-63e6-48f5-a26a-2c7b1eaf2400": { "main": [ [ { "node": "error-handler-02c66e36-63e6-48f5-a26a-2c7b1eaf2400-c0638054", "type": "main", "index": 0 } ] ] }, "5956abba-4458-480c-997f-416126dc8c10": { "main": [ [ { "node": "error-handler-5956abba-4458-480c-997f-416126dc8c10-e3126cb8", "type": "main", "index": 0 } ] ] }, "f12fd8d6-1600-4516-bbb0-a0a893e2ff25": { "main": [ [ { "node": "error-handler-f12fd8d6-1600-4516-bbb0-a0a893e2ff25-8c12b38d", "type": "main", "index": 0 } ] ] }, "b9c6d019-cf0a-4192-b063-e94322f12dae": { "main": [ [ { "node": "error-handler-b9c6d019-cf0a-4192-b063-e94322f12dae-fe7c45d3", "type": "main", "index": 0 } ] ] }, "d6dfab2b-3c55-40b1-ac84-2a30650089f2": { "main": [ [ { "node": "error-handler-d6dfab2b-3c55-40b1-ac84-2a30650089f2-92239945", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: Build your first AI MCP Server. This workflow integrates 15 different services: stickyNote, httpRequest, agent, mcpClientTool, switch. It contains 39 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Build your first AI MCP Server. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }