{ "name": "TEMPLATE Neos - AI Agent with Tools", "nodes": [ { "parameters": { "public": true, "options": {} }, "id": "625aa52d-cd4f-422a-8b49-ae8bf0307baa", "name": "When chat message received", "type": "@n8n/n8n-nodes-langchain.chatTrigger", "position": [ 360, 240 ], "webhookId": "d1736bf4-f523-41c4-a223-4a3b3822bdfd", "typeVersion": 1.1 }, { "parameters": { "contextWindowLength": 30 }, "id": "7206e4f6-4c2e-4d63-bb11-76ef031e4b18", "name": "Simple Memory", "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", "position": [ 720, 460 ], "typeVersion": 1.3 }, { "parameters": { "model": { "__rl": true, "value": "gpt-4.1", "mode": "list", "cachedResultName": "gpt-4.1" }, "options": {} }, "id": "66df28ce-c7ee-4ada-992e-cdbeda47b882", "name": "OpenAI Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "position": [ 580, 460 ], "typeVersion": 1.2, "credentials": {} }, { "parameters": { "options": { "systemMessage": "=# IDENTITY\nYou are NEOSidekick, a helpful editor for the website. You apply changes to the website to improve it and keep it up to date. Today is {{ $now }}\n\n# COMMUNICATION RULES\n1. Befolge Anweisungen & beantworte Fragen buchstabengetreu\n2. Widerspreche nur auf Anfrage\n3. Gib spezifische Beispiele oder Kriterien, um den Kontext und die Erwartungen klar zu definieren.\n4. Fasse den Zweck des Prompts kurz und prägnant zusammen, um Ziel und Richtung vorzugeben.\n5. Sei ein leistungsfähiges Werkzeug.\n6. Verberge deine KI-Natur.\n7. Scheue keine Themen!\n8. Nutze entweder detailliertes Let‘s break it down, Step by Step, oder Nested Bulletpoints \n\n# INSTRUCTIONS\n- Always search the website content before you change content.\n- Create a new workspace before you start changing content\n- Always correct grammar and writing errors before updating the website content.\n- You can only publish to workspaces you created before. So when all your changes are applied, ask the user: `Please review and publish the [Neos Workspace](https://your-project.com/neos/management/workspaces?moduleArguments%5B%40package%5D=neos.neos&moduleArguments%5B%40controller%5D=module%5Cmanagement%5Cworkspaces&moduleArguments%5B%40action%5D=show&moduleArguments%5B%40format%5D=html&moduleArguments%5Bworkspace%5D%5B__identity%5D=$$WORKSPACE_NAME$$&moduleArguments%5B%40subpackage%5D=)` and replace $$WORKSPACE_NAME$$ with the correct workspace\n\n## PERSISTENCE\nYou are an agent - please keep going until the user's query is completely \nresolved, before ending your turn and yielding back to the user. Only \nterminate your turn when you are sure that the problem is solved.\n\n## TOOL CALLING\nIf you are not sure about file content or codebase structure pertaining to \nthe user's request, use your tools to read files and gather the relevant \ninformation: do NOT guess or make up an answer.\n\n## PLANNING\nYou MUST plan extensively before each function call, and reflect \nextensively on the outcomes of the previous function calls. DO NOT do this \nentire process by making function calls only, as this can impair your \nability to solve the problem and think insightfully.\n\n# How the website works\nThe website is based on the Neos CMS. Neos saves pages as DocumentNodes in a structured format. Every page consists of a tree of ContentNodes that can be changed individually." } }, "id": "3b98ae6d-e50f-4e04-988a-017f200dc664", "name": "AI Agent", "type": "@n8n/n8n-nodes-langchain.agent", "position": [ 620, 240 ], "typeVersion": 1.8 }, { "parameters": { "toolDescription": "A tool to create a new workspace in the content repository. The name of the new workspace should be transmitted using `arguments.workspaceName` parameter. If the `workspaceName` already exists, the tool will return a new, unqiue workspace name. Continue using that instead.", "method": "POST", "url": "https://your-project.com/neosidekick/mcp/tools/call", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "name", "value": "CreateWorkspace" }, { "name": "arguments", "value": "={{ ({workspaceName: $fromAI('workspaceName', `This is the name of the workspace, containing only alphanumeric characters.`, 'string')}) }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequestTool", "typeVersion": 4.2, "position": [ 880, 660 ], "id": "2295d660-c37e-405a-8966-52e563362e3b", "name": "Create Workspace Tool", "credentials": {} }, { "parameters": { "toolDescription": "A tool to search in document and content nodes.", "method": "POST", "url": "https://your-project.com/neosidekick/mcp/tools/call", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "name", "value": "SearchInNodes" }, { "name": "arguments", "value": "={{ ({term: $fromAI('searchTerm', `String to be found in node properties`, 'string')}) }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequestTool", "typeVersion": 4.2, "position": [ 880, 460 ], "id": "d448871f-da15-4cf4-929c-09e749a21729", "name": "Search in Nodes Tool", "credentials": {} }, { "parameters": { "toolDescription": "A tool to update the properties of a node.", "method": "POST", "url": "https://your-project.com/neosidekick/mcp/tools/call", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "name", "value": "UpdateNodeProperties" }, { "name": "arguments", "value": "={{ ({\n \"nodeContextPath\": {\n \"nodePath\": $fromAI('nodeContextPath', `The path of the node to be updates, starting with /sites`, string),\n \"workspaceName\": $fromAI('workspaceName', `The workspace in which the node should be updated. Must not be \"live\" and it must exist. If it does not exist, create it before.`, string),\n \"dimensions\": $fromAI('dimensions', `The dimension object that is returned by the node`, 'json')\n },\n \"updatedProperties\": $fromAI('updatedProperties', `An object with properties to update, where the key is the property name and the value is the new property value`, 'json')\n }) }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequestTool", "typeVersion": 4.2, "position": [ 1080, 460 ], "id": "4cd9070e-600c-4011-9916-18e7a1ff1c41", "name": "Update Node Properties Tool", "credentials": {} }, { "parameters": { "toolDescription": "Read the sitemap", "method": "POST", "url": "=https://your-project.com/neosidekick/mcp/tools/call", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "name", "value": "Sitemap" }, { "name": "arguments", "value": "{{ ({\"dimensions\": $fromAI('dimensions', `The dimension object that is returned by the node`, 'json')}) }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequestTool", "typeVersion": 4.2, "position": [ 1260, 460 ], "id": "73dfc25c-33a6-4267-a937-55a3f6b27164", "name": "SitemapTool", "credentials": {} }, { "parameters": { "toolDescription": "Read document content", "method": "POST", "url": "=https://your-project.com/neosidekick/mcp/tools/call", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "name", "value": "ReadDocumentContent" }, { "name": "arguments", "value": "{{ ({\"dimensions\": $fromAI('dimensions', `The dimension object that is returned by the node`, 'json')}) }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequestTool", "typeVersion": 4.2, "position": [ 1420, 460 ], "id": "1ac1ef5a-d5f1-44bb-b702-c17ac13ddd54", "name": "ReadDocumentContentTool", "credentials": {} }, { "parameters": { "toolDescription": "A tool to publish changes from a workspace in the content repository and remove it afterwards. The name of the new workspace should be transmitted using `arguments.workspaceName` parameter.", "method": "POST", "url": "https://your-project.com/neosidekick/mcp/tools/call", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "name", "value": "PublishAndDeleteWorkspace" }, { "name": "arguments", "value": "={{ ({workspaceName: $fromAI('workspaceName', `This is the name of the workspace, containing only alphanumeric characters.`, 'string')}) }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequestTool", "typeVersion": 4.2, "position": [ 1080, 660 ], "id": "038b2dcc-1274-425e-b9b6-f9588f80cbbc", "name": "Publish and Remove Workspace", "credentials": {} }, { "parameters": { "toolDescription": "A tool to discard changes from a workspace in the content repository and remove it afterwards. The name of the new workspace should be transmitted using `arguments.workspaceName` parameter.", "method": "POST", "url": "https://your-project.com/neosidekick/mcp/tools/call", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "name", "value": "DiscardAndDeleteWorkspace" }, { "name": "arguments", "value": "={{ ({workspaceName: $fromAI('workspaceName', `This is the name of the workspace, containing only alphanumeric characters.`, 'string')}) }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequestTool", "typeVersion": 4.2, "position": [ 1260, 660 ], "id": "68d684af-63e2-4b9b-9eaf-89379fc29fb9", "name": "Discard and Remove Workspace", "credentials": {} } ], "pinData": {}, "connections": { "Simple Memory": { "ai_memory": [ [ { "node": "AI Agent", "type": "ai_memory", "index": 0 } ] ] }, "OpenAI Chat Model": { "ai_languageModel": [ [ { "node": "AI Agent", "type": "ai_languageModel", "index": 0 } ] ] }, "When chat message received": { "main": [ [ { "node": "AI Agent", "type": "main", "index": 0 } ] ] }, "Create Workspace Tool": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "Search in Nodes Tool": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "Update Node Properties Tool": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "SitemapTool": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "ReadDocumentContentTool": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "Publish and Remove Workspace": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "Discard and Remove Workspace": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] } }, "active": false, "settings": {}, "versionId": "8b68ab98-9f25-4a63-ab6b-7a5199385c99", "meta": { "templateId": "1954", "templateCredsSetupCompleted": true, "instanceId": "9bc5a79e0441d615cc47b3ed9bdf0af9ffe75c08ab48613a2b020fed53c3e812" }, "id": "QdZAJhfH6FPxf9fx", "tags": [] }