# templates

name: Tech News_Curator - Analyze Daily News using AI_Agents with Mistral
author_name: Hybroht
author_username: hybroht
categories: []
created_at: 2025-06-25T23:28:14.690Z
updated_at: 2025-06-25T23:28:14.690Z
url: https://n8n.io/workflows/5339
scraped_at: 2025-07-06 21:16:30
description:
  Using Mistral API, you can use this n8n workflow to automate the process of: collecting, filtering, analyzing, and summarizing news articles from multiple sources. The sources come from pre-built RSS feeds and a custom DuckDuckGo node, which you can change if you need.
  It will deliver the most relevant news of the day in a concise manner.


  ++How It Works++**

  The workflow begins each weekday at noon.

  The news are gathered from RSS feeds and a custom DuckDuckGo node, using HTTPS GET when needed.

  News not from today or containing unwanted keywords are filtered out.

  The first AI Agent will select the top news from their titles alone and generate a general title & summary.

  The next AI Agent will summarize the full content of the selected top news articles.

  The general summary and title will be combined with the top 10 news summaries into a final output.


  ++Requirements++

  An active n8n instance (self-hosted or cloud).

  Install the custom DuckDuckGo node: n8n-nodes-duckduckgo-search

  A Mistral API key

  Configure the Sub-Workflow for the content which requires HTTP GET requests. It is provided in the template itself.



  ++Fair Notice++

  This is an older version of the template. There is a superior updated version which isn't restricted to tech news, with enhanced capabilities such as communication through different channels (email, social media) and advanced keyword filtering. It will be published at a later date, but if you are interested or would like to discuss specific needs, then feel free to contact us.

nodes_used:
  ["n8n-nodes-base.httpRequest","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.outputParserStructured","@n8n/n8n-nodes-langchain.lmChatMistralCloud"]

workflow_json:
  {"id":"DLNC1zlbMqO7vCep","meta":{"instanceId":"c8661626eeda758e004fa6cdc30e89de83810c1ff0923b0bb91a200abd0100f3","templateCredsSetupCompleted":true},"name":"Tech News Curator - Analyze Daily News using AI Agents and Generate Highlights using Mistral V0","tags":[{"id":"QryMJD23lbek4XwO","name":"News Curator","createdAt":"2025-06-20T18:01:44.652Z","updatedAt":"2025-06-20T18:01:44.652Z"},{"id":"nEQ2nHALSQN4jgJ0","name":"Free","createdAt":"2025-06-25T21:55:38.353Z","updatedAt":"2025-06-25T21:55:38.353Z"}],"nodes":[{"id":"12a3d51d-0fb1-4663-ae91-6f7da54f1744","name":"Merge","type":"n8n-nodes-base.merge","position":[-360,700],"parameters":{"numberInputs":9},"typeVersion":3.1},{"id":"49d86034-6aa4-4e59-ac71-36939145022e","name":"Aggregate","type":"n8n-nodes-base.aggregate","position":[800,980],"parameters":{"include":"specifiedFields","options":{},"aggregate":"aggregateAllItemData","fieldsToInclude":"title, pubDate, link"},"typeVersion":1},{"id":"0b7370c2-acba-410b-9f01-f9bbc0228776","name":"ScienceDaily Feed","type":"n8n-nodes-base.rssFeedRead","onError":"continueRegularOutput","position":[-1240,540],"parameters":{"url":"https://www.sciencedaily.com/rss/all.xml","options":{"ignoreSSL":false}},"typeVersion":1.1,"alwaysOutputData":true},{"id":"77e79dc6-1a96-4ac8-843d-fe02c848a15b","name":"AlternativeTo Feed","type":"n8n-nodes-base.rssFeedRead","onError":"continueRegularOutput","position":[-1240,900],"parameters":{"url":"https://feed.alternativeto.net/news/all/","options":{"ignoreSSL":false}},"typeVersion":1.1,"alwaysOutputData":true},{"id":"de23bf0b-e6e9-4654-a603-bd8de610f38d","name":"MIT Technology Review Feed","type":"n8n-nodes-base.rssFeedRead","onError":"continueRegularOutput","position":[-1240,1080],"parameters":{"url":"https://www.technologyreview.com/topic/artificial-intelligence/feed/","options":{"ignoreSSL":false}},"typeVersion":1.1,"alwaysOutputData":true},{"id":"51006112-1569-4e57-a887-b4e70c0feb5a","name":"lobste.rs Feed","type":"n8n-nodes-base.rssFeedRead","onError":"continueRegularOutput","position":[-1240,180],"parameters":{"url":"https://lobste.rs/rss","options":{"ignoreSSL":false}},"typeVersion":1.1,"alwaysOutputData":true},{"id":"03cd83c3-d785-40cd-b20e-9227ce57834d","name":"Filter by Datetime","type":"n8n-nodes-base.filter","position":[20,820],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"30d4f694-9378-42b4-b1d5-cbc38fb3e7fe","operator":{"type":"dateTime","operation":"after"},"leftValue":"={{ $json.pubDate }}","rightValue":"={{ $today.minus({ days: 0 }) }}"}]}},"typeVersion":2.2},{"id":"da651706-a19a-479f-a955-e1fe603ec0ed","name":"Mistral Cloud Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatMistralCloud","position":[1940,1840],"parameters":{"model":"mistral-small-latest","options":{}},"credentials":{"mistralCloudApi":{"id":"N1af3CxGY2AUEsVg","name":"Mistral Cloud account"}},"typeVersion":1},{"id":"a1a3beac-4b21-4feb-8a4e-3fc7f8b91df5","name":"News Analyzer","type":"@n8n/n8n-nodes-langchain.agent","onError":"continueErrorOutput","maxTries":2,"position":[1020,1120],"parameters":{"text":"=Analyze artitcle titles from the following list:\n[{{ $json.data.map(item => `Title: ${item.title}: Link: ${item.link}`).join(' ; ') }}]","options":{"systemMessage":"You are a professional analyst of current news. Our goal is to get a quick overview of what's most relevant in current news.\nYou must analyze article titles, providing a concise summary of today's news based on the titles.\nFirst, give a fitting title encompassing today's news.\nNext, give a summary of today's news.\nNext, you MUST list the top 10 news of today's titles alongside the links for each of them.\nTo determine the best and most relevant news:\n- Give priority to news which are from the fields: Technological Solutions, Scientific Research, Applied Math and Data Science.\n- Give priority to news which appear often in the list.\n- Ignore news which don't appear to be actual new information.\n- Remove news with problematic headlines\n- Ignore news with petty themes like gossip about actors, hollywood stars and similar.\n- MOST IMPORTANT: DO NOT RETURN TWO OR MORE NEWS FROM THE SAME NEWS WEBSITE. ONLY ONE NEWS PER WEBSITE IN THE TOP 10 when it is possible."},"promptType":"define","hasOutputParser":true},"retryOnFail":true,"typeVersion":1.6},{"id":"423e8ad7-867a-494e-933f-5613e4dbcc57","name":"Split Out News Data","type":"n8n-nodes-base.splitOut","position":[1460,920],"parameters":{"options":{},"fieldToSplitOut":"output.data[0].top_10_news"},"typeVersion":1},{"id":"d1e1aeb6-f42e-4fd8-a351-b4c8229246a7","name":"Remove Certain Content","type":"n8n-nodes-base.filter","position":[360,820],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"30d4f694-9378-42b4-b1d5-cbc38fb3e7fe","operator":{"type":"string","operation":"notRegex"},"leftValue":"={{ $json.link }}","rightValue":"opinion|rumour|layoff|porn|marijuana"},{"id":"fdddd55b-19d5-4e87-9586-01653750e807","operator":{"type":"string","operation":"notRegex"},"leftValue":"={{ $json.title }}","rightValue":"Opinion|Rumour|layoff|porn|marijuana"},{"id":"12e44449-d6bb-4243-abb7-cfa03a9327c5","operator":{"type":"string","operation":"notRegex"},"leftValue":"={{ $json.content }}","rightValue":"layoff|porn|marijuana"},{"id":"2df9ef75-ea55-4e5b-a78d-e37de85fe8ca","operator":{"type":"string","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.content }}","rightValue":""}]}},"typeVersion":2.2},{"id":"29888373-da05-4ee0-971d-1dd508823fd2","name":"Silicone Republic Technology Feed","type":"n8n-nodes-base.rssFeedRead","onError":"continueRegularOutput","position":[-1240,1260],"parameters":{"url":"https://www.siliconrepublic.com/category/technology/feed/","options":{"ignoreSSL":false}},"typeVersion":1.1,"alwaysOutputData":true},{"id":"45c3877c-e6d8-4c12-a0b1-2156b0b4dbc4","name":"Silicone Republic Science Feed","type":"n8n-nodes-base.rssFeedRead","onError":"continueRegularOutput","disabled":true,"position":[-1240,1440],"parameters":{"url":"https://www.siliconrepublic.com/category/science/feed/","options":{"ignoreSSL":false}},"typeVersion":1.1,"alwaysOutputData":true},{"id":"d803f64b-24d2-4828-adaa-b55d67112e9e","name":"Schedule","type":"n8n-nodes-base.scheduleTrigger","position":[-1920,880],"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[5,4,2,3,1],"triggerAtHour":12}]}},"typeVersion":1.2},{"id":"692c7592-9834-48fe-84ab-74216943233a","name":"HTTP Request","type":"n8n-nodes-base.httpRequest","notes":"It is a necessary node because lobste.rs will not give the actual content of the links.","onError":"continueErrorOutput","position":[-840,180],"parameters":{"url":"={{ $json.link }}","options":{"timeout":10000}},"typeVersion":4.2},{"id":"758cbfc6-559a-4ebe-8955-49604bd2d924","name":"Rejoin Data","type":"n8n-nodes-base.set","onError":"continueRegularOutput","position":[-640,360],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $('Filter Fields').item.json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $('Filter Fields').item.json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $('Filter Fields').item.json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"93d0ab4e-f3aa-4712-a7ec-95884f396ce8","name":"Join Outputs","type":"n8n-nodes-base.merge","position":[1620,840],"parameters":{"mode":"combine","options":{},"advanced":true,"mergeByFields":{"values":[{"field1":"link","field2":"website"}]}},"typeVersion":3.2},{"id":"69fbc0ca-bd09-40cb-affe-c1955cd990b4","name":"Final Aggregate","type":"n8n-nodes-base.aggregate","position":[2320,820],"parameters":{"include":"specifiedFields","options":{},"aggregate":"aggregateAllItemData","fieldsToInclude":"output"},"typeVersion":1},{"id":"5674a7e0-1aa3-4085-acef-c41d22530140","name":"Website Summarizer","type":"@n8n/n8n-nodes-langchain.agent","onError":"continueErrorOutput","maxTries":2,"position":[1920,840],"parameters":{"text":"=Summarize the content from this website in a sometimes informal, sometimes formal, sometimes complicated, sometimes everyman speech, maybe cheeky, maybe serious, maybe eyecatchy but always concise and short one sentence: {{ $json.website }} - Content: {{ $json.content }}\nFollow the provided JSON schema for your response.","options":{"systemMessage":"=Todays date is {{ $now }}. You are an automated web analyzer tasked with analyzing information from a webpage. You have access to the text content from the page. Your objective is only to return a single JSON output containing the extracted data summarized."},"promptType":"define","hasOutputParser":true},"retryOnFail":true,"typeVersion":1.6},{"id":"7fa67db0-c75a-42ae-9de0-c90a81feb406","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-200,560],"parameters":{"color":3,"width":880,"height":480,"content":"## Filtering Step\n**Filter by Datetime** only allows daily news.\n**Remove Certain Content** to remove unwanted news through use of keywords.\n\nObservation: you can add or remove your own desired keywords as needed."},"typeVersion":1},{"id":"7b943173-28d8-4a1d-86b9-06837e1c38a6","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[740,560],"parameters":{"color":5,"width":640,"height":900,"content":"## News Selection\n**Aggregate** will prep the news for the AI Agent. It will encapsulate the list of news into a singular data.\n**News Analyzer** is the Agent which will use the Chat Model to make an appropriate title and summary of today's news. The AI will make a list of the top news. Mind you, it will decide the best news to read just like the average person would: through the titles.\n**Mistral Cloud Chat Model** is used instead of OpenAI because it is Dev friendly. Mistral allows you to test their API for free. Recommended for hobbyist. \n**Json Output Parser** forces the AI Agent to structure the output in its defined Json format. This is important to make the AI output both consistent and usable. Otherwise, you might end up with one of the following problems: incomplete answers, nonconforming answers or straight up gibberish. "},"typeVersion":1},{"id":"a1d89fc5-4f6d-4e15-be60-a22ff049ccbb","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1420,560],"parameters":{"color":5,"width":1060,"height":580,"content":"## News Summarizer\n**Split Out News Data** will prep the top news selected by the News Analyzer. The Top News have their website content in a former step of this workflow, so they must be joined again in an inner manner.\n**Join Output** will join the selected top news with their respective textual content.\n**Website Summarizer** will take the textual content of each news and summarize it, using **Mistral Cloud Chat Model** and **Json Output Parser** to produce the appropriate output.\n**Final Aggregate** will prep the summaries of the news for the final step of the Workflow. It will encapsulate the list of summaries into a singular data.\n\n* Observation: Website Summarizer will discard any output which it fails to properly structure as configured by the Json Output Parser."},"typeVersion":1},{"id":"d1942504-dc3d-4ae7-b342-28d26827945b","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1760,-240],"parameters":{"color":4,"width":1520,"height":2060,"content":"# Tech News Gathering\n**Schedule** will start the workflow according to its configuration. In this workflow, it is configured to start every weekday after 12:00 PM.\n**Feed Nodes** will get the RSS feed of their respective sources.\n**Field Prep** will ensure the RSS outputs are structured in the same manner for the merge.\n**Merge** will unite the outputs into one big list with news from each of them.\n\n"},"typeVersion":1},{"id":"6fdcf852-4638-4081-8621-b4f4cc6e03d6","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-1080,-80],"parameters":{"color":3,"width":660,"height":1880,"content":"## Field Prep\n- Standardize RSS outputs\n- Remove Fields\n- Add Info as Needed\n\n*Obs: set the Sub-Workflow \"Get Webage Content\". ([Guide](https://docs.n8n.io/workflows/subworkflow-conversion/))"},"typeVersion":1},{"id":"ca60f20b-cc2f-4172-92bd-d993d8bdefd3","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-1680,-80],"parameters":{"color":6,"width":600,"height":1880,"content":"## Feed Nodes\nEach node will get a list of news from a RSS feed or a search engine (in our case, DuckDuckGo).\n\n*Observation: \nThe DuckDuckGo custom node is called: n8n-nodes-duckduckgo-search\nYou will need to install it."},"typeVersion":1},{"id":"a7b40eed-b05a-4892-b7ec-fc3f4c328b6b","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[-200,320],"parameters":{"width":540,"height":220,"content":"In the end of the **News Gathering step**, the output of merge should contain a list of news with the following properties: title, pubDate, link and content.\n\n*Observation: you could try to avoid RSS feeds, but it would still require you to structure the data.\n**Advice: Do not seek to avoid structuring the data**. It is not recommended when dealing with AI Agents.\n\n*About the Merge: if you connect more than one output in a Merge node input, then you risk the Merge node continuing the Workflow before all the news sources returned their output."},"typeVersion":1},{"id":"30ec121c-d5ed-405d-8c6b-7d31daea4f19","name":"TheHackersNews* Feed","type":"n8n-nodes-base.rssFeedRead","notes":"*Not to be confused with \"Hacker News\" from ycombinator.","onError":"continueRegularOutput","position":[-1240,720],"parameters":{"url":"https://feeds.feedburner.com/TheHackersNews","options":{"ignoreSSL":false}},"typeVersion":1.1,"alwaysOutputData":true},{"id":"0be003b9-f7d7-44f4-ab6a-7812060e8344","name":"Filter Fields","type":"n8n-nodes-base.set","position":[-1020,180],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.content }}"}]}},"typeVersion":3.4},{"id":"40374b49-29b7-4965-abc6-6be211f27821","name":"Filter Fields 2","type":"n8n-nodes-base.set","disabled":true,"position":[-1020,340],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"f43db298-a42f-4391-83b9-c49c5d8c03ae","name":"pubDate","type":"string","value":"={{ $json.date }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.content }}"}]}},"typeVersion":3.4},{"id":"47c2f29d-f56b-451f-b2c8-3c4c7d19f94f","name":"Filter Fields 3","type":"n8n-nodes-base.set","position":[-1020,540],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.content }}"}]}},"typeVersion":3.4},{"id":"9ab7119a-12f7-4366-861f-2ef35738409c","name":"Filter Fields 4","type":"n8n-nodes-base.set","position":[-1020,720],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.content }}"}]}},"typeVersion":3.4},{"id":"3899b74c-3785-4ec6-83a2-0c92bf0e8405","name":"Filter Fields 5","type":"n8n-nodes-base.set","position":[-1020,900],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.content }}"}]}},"typeVersion":3.4},{"id":"7dc32f30-6d77-4987-ae43-90214d990992","name":"Filter Fields 6","type":"n8n-nodes-base.set","position":[-1020,1080],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.content }}"}]}},"typeVersion":3.4},{"id":"5bcfdca4-925f-426a-bde8-fc89ffc00631","name":"Filter Fields 7","type":"n8n-nodes-base.set","position":[-1020,1260],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.content }}"}]}},"typeVersion":3.4},{"id":"285cd92f-a9bc-4758-8de5-b07a3013f504","name":"Filter Fields 8","type":"n8n-nodes-base.set","disabled":true,"position":[-1020,1440],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.content }}"}]}},"typeVersion":3.4},{"id":"0ec39c32-4f44-4ace-8ecf-7632f5697136","name":"Markdown Conversion","type":"n8n-nodes-base.markdown","onError":"continueRegularOutput","position":[-600,160],"parameters":{"html":"={{ $json.data }}","options":{}},"typeVersion":1},{"id":"04ba0b02-da75-4c9f-b8fd-8b4aaa28cc93","name":"JSON Output Parser 2","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[2080,1000],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"data\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"The title describing the news article.\"\n          },\n          \"author\": {\n\t\t\t\"type\": \"string\",\n            \"description\": \"The author of the news article.\"\n          },\n          \"link\": {\n\t\t\t\"type\": \"string\",\n            \"description\": \"The link of the news article.\"\n          },\n          \"summary\": {\n\t\t\t\"type\": \"string\",\n            \"description\": \"The resume of the news article.\"\n          }\n        },\n        \"required\": [\"title\", \"author\", \"link\", \"summary\"],\n        \"additionalProperties\": false\n      }\n    }\n  },\n  \"required\": [\"data\"],\n  \"additionalProperties\": false\n}"},"typeVersion":1.2},{"id":"11ee267f-6429-48dd-aa01-3e1e0cd49a50","name":"JSON Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1260,1280],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"data\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"The name describing the overall news.\"\n          },\n          \"summary\": {\n\t\t\t\"type\": \"string\",\n            \"description\": \"The resume of today's news.\"\n          },\n          \"top_10_news\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t  \"type\": \"object\",\n\t\t\t  \"properties\": {\n\t\t\t\t\"title\": {\n\t\t\t\t  \"type\": \"string\",\n\t\t\t\t  \"description\": \"The title to the news article.\"\n\t\t\t\t},\n\t\t\t\t\"website\": {\n\t\t\t\t  \"type\": \"string\",\n\t\t\t\t  \"description\": \"The website to the news article.\"\n\t\t\t\t},\n                \"required\": [\"title\", \"website\"],\n                \"additionalProperties\": false\n\t\t\t  }\n\t\t\t}\n          }\n        },\n        \"required\": [\"title\", \"summary\", \"top_10_news\"],\n        \"additionalProperties\": false\n      }\n    }\n  },\n  \"required\": [\"data\"],\n  \"additionalProperties\": false\n  }\n"},"typeVersion":1.2},{"id":"f841eedd-91b2-4ef8-ba49-d46999f05802","name":"DuckDuckGo","type":"n8n-nodes-duckduckgo-search.duckDuckGo","position":[-1240,1620],"parameters":{"newsQuery":"technology","operation":"searchNews","cacheSettings":{"cacheTTL":300,"enableCache":true},"proxySettings":{},"newsSearchOptions":{"region":"wt-wt","maxResults":100,"safeSearch":0}},"typeVersion":1},{"id":"9dc00e4e-15c4-4fce-acc4-b67c3de99bcb","name":"Filter Fields 9","type":"n8n-nodes-base.set","position":[-1040,1620],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $json.date }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $json.url }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"="}]}},"typeVersion":3.4},{"id":"92732b78-71a2-4d4e-91f3-41231153046b","name":"Call Get Webpage Content to Data","type":"n8n-nodes-base.executeWorkflow","position":[-860,1620],"parameters":{"options":{},"workflowId":{"__rl":true,"mode":"id","value":"MqafS0zommXM7soB"},"workflowInputs":{"value":{"link":"={{ $json.link }}","title":"={{ $json.title }}","pubDate":"={{ $json.pubDate }}"},"schema":[{"id":"title","display":true,"removed":false,"required":false,"displayName":"title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"pubDate","display":true,"removed":false,"required":false,"displayName":"pubDate","defaultMatch":false,"canBeUsedToMatch":true},{"id":"link","display":true,"removed":false,"required":false,"displayName":"link","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["title","pubDate","link"],"attemptToConvertTypes":false,"convertFieldsToString":true}},"typeVersion":1.2},{"id":"1ba68823-f76e-4277-a9d1-90d549ad080b","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[-200,1060],"parameters":{"color":2,"width":680,"height":540,"content":"## Sub-Workflow : Get Webpage Content to Data\nThis Sub-Workflow will deal with cases where the content of the link is not immediately given by Source Node."},"typeVersion":1},{"id":"dc42e913-8d41-41c5-bd40-7ba006b1d361","name":"Remove Elements with Empty Content","type":"n8n-nodes-base.filter","position":[-660,1320],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"30d4f694-9378-42b4-b1d5-cbc38fb3e7fe","operator":{"type":"string","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.content }}","rightValue":"={{ $today.minus({ days: 0 }) }}"}]}},"typeVersion":2.2},{"id":"d5053c20-a8af-4d9e-b2b6-02c51044ecdd","name":"HTTP Request Example","type":"n8n-nodes-base.httpRequest","notes":"It is a necessary node because lobste.rs will not give the actual content of the links.","onError":"continueErrorOutput","position":[-40,1220],"parameters":{"url":"={{ $json.link }}","options":{"timeout":3000}},"typeVersion":4.2},{"id":"2461638a-9de6-4a67-b287-0e0102e32764","name":"Rejoin Data Example","type":"n8n-nodes-base.set","onError":"continueRegularOutput","position":[20,1440],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e2ffe594-180d-4e1d-b869-8056ac67015d","name":"title","type":"string","value":"={{ $('Filter Fields').item.json.title }}"},{"id":"87c5a171-9ab9-4043-a72a-32aec218fe63","name":"pubDate","type":"string","value":"={{ $('Filter Fields').item.json.pubDate }}"},{"id":"978b05c9-6e6b-4a18-bc06-4de785b19413","name":"link","type":"string","value":"={{ $('Filter Fields').item.json.link }}"},{"id":"199a5920-72a3-470e-9adf-8252f6ebb37a","name":"content","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"b7d64a46-2656-45a8-8053-3c6fa6df6e4f","name":"Markdown Conversion Example","type":"n8n-nodes-base.markdown","onError":"continueRegularOutput","position":[200,1200],"parameters":{"html":"={{ $json.data }}","options":{}},"typeVersion":1},{"id":"bd46c6d8-f235-4bad-9866-e0c1a72bc6e3","name":"Final Join Outputs","type":"n8n-nodes-base.merge","position":[2680,1080],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.2},{"id":"4894d04d-7e11-4af0-9370-c6eefdad1371","name":"Test Feed","type":"n8n-nodes-base.rssFeedRead","onError":"continueRegularOutput","disabled":true,"position":[-1240,340],"parameters":{"options":{}},"typeVersion":1.1,"alwaysOutputData":true}],"active":false,"settings":{"executionOrder":"v1"},"versionId":"ac25536e-1d15-4254-b8cd-0efadf052a5f","connections":{"Merge":{"main":[[{"node":"Filter by Datetime","type":"main","index":0}]]},"Schedule":{"main":[[{"node":"lobste.rs Feed","type":"main","index":0},{"node":"Test Feed","type":"main","index":0},{"node":"ScienceDaily Feed","type":"main","index":0},{"node":"TheHackersNews* Feed","type":"main","index":0},{"node":"AlternativeTo Feed","type":"main","index":0},{"node":"MIT Technology Review Feed","type":"main","index":0},{"node":"Silicone Republic Technology Feed","type":"main","index":0},{"node":"Silicone Republic Science Feed","type":"main","index":0},{"node":"DuckDuckGo","type":"main","index":0}]]},"Aggregate":{"main":[[{"node":"News Analyzer","type":"main","index":0}]]},"Test Feed":{"main":[[{"node":"Filter Fields 2","type":"main","index":0}]]},"DuckDuckGo":{"main":[[{"node":"Filter Fields 9","type":"main","index":0}]]},"Rejoin Data":{"main":[[{"node":"Merge","type":"main","index":0}]]},"HTTP Request":{"main":[[{"node":"Markdown Conversion","type":"main","index":0}]]},"Join Outputs":{"main":[[{"node":"Website Summarizer","type":"main","index":0}]]},"Filter Fields":{"main":[[{"node":"HTTP Request","type":"main","index":0}]]},"News Analyzer":{"main":[[{"node":"Split Out News Data","type":"main","index":0},{"node":"Final Join Outputs","type":"main","index":1}]]},"lobste.rs Feed":{"main":[[{"node":"Filter Fields","type":"main","index":0}]]},"Filter Fields 2":{"main":[[{"node":"Merge","type":"main","index":1}]]},"Filter Fields 3":{"main":[[{"node":"Merge","type":"main","index":2}]]},"Filter Fields 4":{"main":[[{"node":"Merge","type":"main","index":3}]]},"Filter Fields 5":{"main":[[{"node":"Merge","type":"main","index":4}]]},"Filter Fields 6":{"main":[[{"node":"Merge","type":"main","index":5}]]},"Filter Fields 7":{"main":[[{"node":"Merge","type":"main","index":6}]]},"Filter Fields 8":{"main":[[{"node":"Merge","type":"main","index":7}]]},"Filter Fields 9":{"main":[[{"node":"Call Get Webpage Content to Data","type":"main","index":0}]]},"Final Aggregate":{"main":[[{"node":"Final Join Outputs","type":"main","index":0}]]},"ScienceDaily Feed":{"main":[[{"node":"Filter Fields 3","type":"main","index":0}]]},"AlternativeTo Feed":{"main":[[{"node":"Filter Fields 5","type":"main","index":0}]]},"Filter by Datetime":{"main":[[{"node":"Remove Certain Content","type":"main","index":0}]]},"Final Join Outputs":{"main":[[]]},"JSON Output Parser":{"ai_outputParser":[[{"node":"News Analyzer","type":"ai_outputParser","index":0}]]},"Website Summarizer":{"main":[[{"node":"Final Aggregate","type":"main","index":0}]]},"Markdown Conversion":{"main":[[{"node":"Rejoin Data","type":"main","index":0}]]},"Split Out News Data":{"main":[[{"node":"Join Outputs","type":"main","index":1}]]},"HTTP Request Example":{"main":[[{"node":"Markdown Conversion Example","type":"main","index":0}]]},"JSON Output Parser 2":{"ai_outputParser":[[{"node":"Website Summarizer","type":"ai_outputParser","index":0}]]},"TheHackersNews* Feed":{"main":[[{"node":"Filter Fields 4","type":"main","index":0}]]},"Remove Certain Content":{"main":[[{"node":"Aggregate","type":"main","index":0},{"node":"Join Outputs","type":"main","index":0}]]},"Mistral Cloud Chat Model":{"ai_languageModel":[[{"node":"News Analyzer","type":"ai_languageModel","index":0},{"node":"Website Summarizer","type":"ai_languageModel","index":0}]]},"MIT Technology Review Feed":{"main":[[{"node":"Filter Fields 6","type":"main","index":0}]]},"Markdown Conversion Example":{"main":[[{"node":"Rejoin Data Example","type":"main","index":0}]]},"Silicone Republic Science Feed":{"main":[[{"node":"Filter Fields 8","type":"main","index":0}]]},"Call Get Webpage Content to Data":{"main":[[{"node":"Remove Elements with Empty Content","type":"main","index":0}]]},"Silicone Republic Technology Feed":{"main":[[{"node":"Filter Fields 7","type":"main","index":0}]]},"Remove Elements with Empty Content":{"main":[[{"node":"Merge","type":"main","index":8}]]}}}


name: 🛠️ PagerDuty Tool MCP Server 💪 all 9 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T02:56:34.295Z
updated_at: 2025-06-26T02:56:34.295Z
url: https://n8n.io/workflows/5343
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ PagerDuty Tool MCP Server

  Complete MCP server exposing all PagerDuty Tool operations to AI agents. Zero configuration needed - all 9 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every PagerDuty Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n PagerDuty Tool tool with full error handling

  📋 Available Operations (9 total)

  Every possible PagerDuty Tool operation is included:

  🔧 Incident (4 operations)

  • Create an incident
  • Get an incident
  • Get many incidents
  • Update an incident

  🔧 Incidentnote (2 operations)

  • Create an incident note
  • Get many incident notes

  🔧 Logentry (2 operations)

  • Get a log entry
  • Get many log entries

  👤 User (1 operations)

  • Get a user

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native PagerDuty Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every PagerDuty Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"Daa0fHTZUAHEhh3I","meta":null,"name":"PagerDuty Tool MCP Server","tags":[],"nodes":[{"id":"efc35196-0fea-4fdb-bc00-a48bd7d6d51c","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,120],"parameters":{"width":420,"height":840,"content":"## 🛠️ PagerDuty Tool MCP Server\n\n### 📋 Available Operations (9 total)\n\n**Incident**: create, get, get all, update\n**Incidentnote**: create, get all\n**Logentry**: get, get all\n**User**: get\n\n### ⚙️ Setup Instructions\n\n1. **Import Workflow**: Load this workflow into your n8n instance\n\n1. **🔑 Add Credentials**: Configure PagerDuty Tool authentication in one tool node then open and close all others.\n2. **🚀 Activate**: Enable this workflow to start your MCP server\n3. **🔗 Get URL**: Copy webhook URL from MCP trigger (right side)\n4. **🤖 Connect**: Use MCP URL in your AI agent configurations\n\n### ✨ Ready-to-Use Features\n\n• Zero configuration - all 9 operations pre-built\n• AI agents automatically populate parameters via `$fromAI()` expressions\n• Every resource and operation combination available\n• Native n8n error handling and response formatting\n• Modify parameter defaults in any tool node as needed\n\n### 💬 Need Help?\nCheck the [n8n documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolmcp/) or ping me on [discord](https://discord.me/cfomodz) for MCP integration guidance or customizations."},"typeVersion":1},{"id":"d6832592-9cb8-48a0-b4eb-a89e42c2551d","name":"PagerDuty Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-400,-100],"webhookId":"28d5f677-4c8b-4fb4-95c2-e5ce0bd0a78b","parameters":{"path":"pagerduty-tool-mcp"},"typeVersion":1},{"id":"68734679-1eb0-4566-9fd9-79d3059672f2","name":"Create an incident","type":"n8n-nodes-base.pagerDutyTool","position":[-800,140],"parameters":{"email":"={{ $fromAI('Email', ``, 'string') }}","title":"={{ $fromAI('Title', ``, 'string') }}","resource":"incident","operation":"create","serviceId":"={{ $fromAI('Service_Id', ``, 'string') }}","authentication":"apiToken","descriptionType":"auto","additionalFields":{},"conferenceBridgeUi":{}},"typeVersion":1},{"id":"fba20f11-5f83-416a-95e6-4e5b1e21da94","name":"Get an incident","type":"n8n-nodes-base.pagerDutyTool","position":[-580,140],"parameters":{"operation":"get","incidentId":"={{ $fromAI('Incident_Id', ``, 'string') }}"},"typeVersion":1},{"id":"0c40e9c7-9747-42a5-88d4-c312d757738a","name":"Get many incidents","type":"n8n-nodes-base.pagerDutyTool","position":[-360,140],"parameters":{"limit":"={{ $fromAI('Limit', ``, 'number') }}","options":{},"operation":"getAll","returnAll":"={{ $fromAI('Return_All', ``, 'boolean') }}"},"typeVersion":1},{"id":"9f6f4608-0d7b-4773-9e26-07d374c228bd","name":"Update an incident","type":"n8n-nodes-base.pagerDutyTool","position":[-140,140],"parameters":{"email":"={{ $fromAI('Email', ``, 'string') }}","resource":"incident","operation":"update","incidentId":"={{ $fromAI('Incident_Id', ``, 'string') }}","updateFields":{},"authentication":"apiToken","descriptionType":"auto","conferenceBridgeUi":{}},"typeVersion":1},{"id":"2ef3e6bf-1020-41a1-afa4-26bf3ddb68bf","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"color":4,"width":1060,"content":"## Incident"},"typeVersion":1},{"id":"b929a8ad-8ace-4492-a84b-c870df837a86","name":"Create an incident note","type":"n8n-nodes-base.pagerDutyTool","position":[-800,380],"parameters":{"email":"={{ $fromAI('Email', ``, 'string') }}","content":"={{ $fromAI('Content', ``, 'string') }}","resource":"incidentNote","incidentId":"={{ $fromAI('Incident_Id', ``, 'string') }}"},"typeVersion":1},{"id":"3f49bee6-6356-4f1b-97aa-cab01b66ba9d","name":"Get many incident notes","type":"n8n-nodes-base.pagerDutyTool","position":[-580,380],"parameters":{"limit":"={{ $fromAI('Limit', ``, 'number') }}","resource":"incidentNote","operation":"getAll","returnAll":"={{ $fromAI('Return_All', ``, 'boolean') }}","incidentId":"={{ $fromAI('Incident_Id', ``, 'string') }}"},"typeVersion":1},{"id":"9406cb9e-6ff6-4911-a22b-1c42103df584","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"color":5,"width":620,"content":"## Incidentnote"},"typeVersion":1},{"id":"9df3db41-2f6d-4fe8-a57f-ab28770b3d53","name":"Get a log entry","type":"n8n-nodes-base.pagerDutyTool","position":[-800,620],"parameters":{"resource":"logEntry","logEntryId":"={{ $fromAI('Log_Entry_Id', ``, 'string') }}"},"typeVersion":1},{"id":"2ed1b8f3-6e60-427a-a129-87c13585a69c","name":"Get many log entries","type":"n8n-nodes-base.pagerDutyTool","position":[-580,620],"parameters":{"limit":"={{ $fromAI('Limit', ``, 'number') }}","options":{},"resource":"logEntry","operation":"getAll","returnAll":"={{ $fromAI('Return_All', ``, 'boolean') }}"},"typeVersion":1},{"id":"375fc00c-39af-47aa-8073-af7fae24c0a7","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"color":6,"width":620,"content":"## Logentry"},"typeVersion":1},{"id":"ae126468-762a-4588-aa48-aac6de257c06","name":"Get a user","type":"n8n-nodes-base.pagerDutyTool","position":[-800,860],"parameters":{"userId":"={{ $fromAI('User_Id', ``, 'string') }}","resource":"user"},"typeVersion":1},{"id":"b6442def-7516-40c7-b959-1dc130d9cf52","name":"Sticky Note 4","type":"n8n-nodes-base.stickyNote","position":[-1000,840],"parameters":{"color":7,"width":400,"content":"## User"},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-21T09:29:31.003Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-21T09:29:31.003Z","workflowId":"Daa0fHTZUAHEhh3I"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-21T09:29:31.002Z","updatedAt":"2025-06-21T09:30:02.000Z","versionId":"eb7a3399-b11b-4b8b-9e26-1f2a2b284d0e","isArchived":false,"staticData":null,"connections":{"Get a user":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]},"Get a log entry":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]},"Get an incident":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]},"Create an incident":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]},"Get many incidents":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]},"Update an incident":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]},"Get many log entries":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]},"Create an incident note":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]},"Get many incident notes":{"ai_tool":[[{"node":"PagerDuty Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ One Simple API Tool MCP Server 💪 all 10 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T02:57:43.191Z
updated_at: 2025-06-26T02:57:43.191Z
url: https://n8n.io/workflows/5344
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ One Simple API Tool MCP Server

  Complete MCP server exposing all One Simple API Tool operations to AI agents. Zero configuration needed - all 10 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every One Simple API Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n One Simple API Tool tool with full error handling

  📋 Available Operations (10 total)

  Every possible One Simple API Tool operation is included:

  🔧 Information (2 operations)

  • Convert a value between currencies
  • Get image metadata from a URL

  🔧 Socialprofile (2 operations)

  • Get details about an Instagram profile
  • Get details about a Spotify artist

  🔧 Utility (3 operations)

  • Expand a shortened URL
  • Generate a QR code utility
  • Validate an email address

  🔧 Website (3 operations)

  • Generate PDF
  • Get SEO Data
  • Screenshot

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native One Simple API Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every One Simple API Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"kgpCXrXOBSM8SHdp","meta":null,"name":"One Simple API Tool MCP Server","tags":[],"nodes":[{"id":"a4e2c262-9729-4eda-aedb-3035f28cfdee","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,80],"parameters":{"content":""},"typeVersion":1},{"id":"afe25239-5819-44df-9a79-25378c678d01","name":"One Simple API Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-440,-60],"webhookId":"a21c11a0-7ab0-47b0-bcfe-0c0640d4d5da","parameters":{},"typeVersion":1},{"id":"e2331314-4b56-4d29-9910-87d25f1607e1","name":"Convert a value between currencies","type":"n8n-nodes-base.oneSimpleApiTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"8efcfa77-596c-4216-b3dd-164c75f1ac81","name":"Get image metadata from a URL","type":"n8n-nodes-base.oneSimpleApiTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"18dec1b4-478a-47c5-bceb-647ace80b286","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1},{"id":"d33bfd55-5568-4b3a-966e-14040dda07ef","name":"Get details about an Instagram profile","type":"n8n-nodes-base.oneSimpleApiTool","position":[-800,380],"parameters":{},"typeVersion":1},{"id":"70c4fb5c-6056-4243-996c-427c89b4fe7f","name":"Get details about a Spotify artist","type":"n8n-nodes-base.oneSimpleApiTool","position":[-580,380],"parameters":{},"typeVersion":1},{"id":"8777f932-8df1-4aff-bcfb-8fad9e76c926","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"content":""},"typeVersion":1},{"id":"dd105af1-ee47-42be-9e27-44205048ef79","name":"Expand a shortened URL","type":"n8n-nodes-base.oneSimpleApiTool","position":[-800,620],"parameters":{},"typeVersion":1},{"id":"7e1039e6-88ba-430d-aa28-f708bb0ded9e","name":"Generate a QR code utility","type":"n8n-nodes-base.oneSimpleApiTool","position":[-580,620],"parameters":{},"typeVersion":1},{"id":"85277317-96b7-4c52-976b-1d8f60d93697","name":"Validate an email address","type":"n8n-nodes-base.oneSimpleApiTool","position":[-360,620],"parameters":{},"typeVersion":1},{"id":"fc1a9b40-2bd9-444a-afdd-66db3772c252","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"content":""},"typeVersion":1},{"id":"6a5b7aad-df8c-488e-8c8f-53ce78f6bf16","name":"Generate PDF","type":"n8n-nodes-base.oneSimpleApiTool","position":[-800,860],"parameters":{},"typeVersion":1},{"id":"4d7a27cf-5d27-4f8a-b996-fa470e4844b4","name":"Get SEO Data","type":"n8n-nodes-base.oneSimpleApiTool","position":[-580,860],"parameters":{},"typeVersion":1},{"id":"1d113fac-e4f4-48da-b2da-ad6770d36136","name":"Screenshot","type":"n8n-nodes-base.oneSimpleApiTool","position":[-360,860],"parameters":{},"typeVersion":1},{"id":"34ebf022-2809-4ca9-9862-9883ae098270","name":"Sticky Note 4","type":"n8n-nodes-base.stickyNote","position":[-1000,840],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-22T04:42:13.792Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-22T04:42:13.792Z","workflowId":"kgpCXrXOBSM8SHdp"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-22T04:42:13.790Z","updatedAt":"2025-06-26T02:57:08.000Z","versionId":"47edfabf-4c7f-4dc1-8a9e-1cbb01d93fda","isArchived":false,"staticData":null,"connections":{"Screenshot":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Generate PDF":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Get SEO Data":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Expand a shortened URL":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Validate an email address":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Generate a QR code utility":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Get image metadata from a URL":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Convert a value between currencies":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Get details about a Spotify artist":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]},"Get details about an Instagram profile":{"ai_tool":[[{"node":"One Simple API Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ QuickBooks Online Tool MCP Server 💪 all 42 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:06:20.397Z
updated_at: 2025-06-26T03:06:20.397Z
url: https://n8n.io/workflows/5354
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ QuickBooks Online Tool MCP Server

  Complete MCP server exposing all QuickBooks Online Tool operations to AI agents. Zero configuration needed - all 42 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every QuickBooks Online Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n QuickBooks Online Tool tool with full error handling

  📋 Available Operations (42 total)

  Every possible QuickBooks Online Tool operation is included:

  🔧 Bill (5 operations)

  • Create a bill
  • Delete a bill
  • Get a bill
  • Get many bills
  • Update a bill

  🔧 Customer (4 operations)

  • Create a customer
  • Get a customer
  • Get many customers
  • Update a customer

  🔧 Employee (4 operations)

  • Create an employee
  • Get an employee
  • Get many employees
  • Update an employee

  🔧 Estimate (6 operations)

  • Create an estimate
  • Delete an estimate
  • Get an estimate
  • Get many estimates
  • Send an estimate
  • Update an estimate

  🔧 Invoice (7 operations)

  • Create an invoice
  • Delete an invoice
  • Get an invoice
  • Get many invoices
  • Send an invoice
  • Update an invoice
  • Void an invoice

  🔧 Item (2 operations)

  • Get an item
  • Get many items

  🔧 Payment (7 operations)

  • Create a payment
  • Delete a payment
  • Get a payment
  • Get many payments
  • Send a payment
  • Update a payment
  • Void a payment

  🔧 Purchase (2 operations)

  • Get a purchase
  • Get many purchases

  🔧 Transaction (1 operations)

  • Get a report

  🔧 Vendor (4 operations)

  • Create a vendor
  • Get a vendor
  • Get many vendors
  • Update a vendor

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native QuickBooks Online Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every QuickBooks Online Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"t0Hdv0eAusXKQpF7","meta":null,"name":"QuickBooks Online Tool MCP Server","tags":[],"nodes":[{"id":"ede63bb3-acef-4da3-b2f5-f185811c6343","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1480,180],"parameters":{"content":""},"typeVersion":1},{"id":"9c2cfe20-3c75-4fb0-8838-c3cda8dcb00b","name":"QuickBooks Online Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-420,-100],"webhookId":"6787c767-86eb-43fc-8db5-8ecd22eb869f","parameters":{},"typeVersion":1},{"id":"00da18c4-9119-4a91-bde7-0d2013b65feb","name":"Create a bill","type":"n8n-nodes-base.quickbooksTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"a4de0bad-b721-4676-a711-05997edc7275","name":"Delete a bill","type":"n8n-nodes-base.quickbooksTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"20e5dee8-920b-43d5-85f9-a45eb1d8d307","name":"Get a bill","type":"n8n-nodes-base.quickbooksTool","position":[-360,140],"parameters":{},"typeVersion":1},{"id":"0f3fd12e-de38-414b-92c9-feb1cc6d69d3","name":"Get many bills","type":"n8n-nodes-base.quickbooksTool","position":[-140,140],"parameters":{},"typeVersion":1},{"id":"fcc1dc6e-97e0-47b1-9d8a-daaf6b25aa3c","name":"Update a bill","type":"n8n-nodes-base.quickbooksTool","position":[80,140],"parameters":{},"typeVersion":1},{"id":"bb0488db-13c6-4046-899b-368138324cb0","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1},{"id":"b0874bfc-3050-4a32-8089-f3eaa82a75fc","name":"Create a customer","type":"n8n-nodes-base.quickbooksTool","position":[-800,380],"parameters":{},"typeVersion":1},{"id":"e4cc61b2-8e79-4090-8f4d-ecff8fc3d685","name":"Get a customer","type":"n8n-nodes-base.quickbooksTool","position":[-580,380],"parameters":{},"typeVersion":1},{"id":"581b387d-68d9-41d3-8f57-74ec130930af","name":"Get many customers","type":"n8n-nodes-base.quickbooksTool","position":[-360,380],"parameters":{},"typeVersion":1},{"id":"8e7539e0-1064-4362-9d76-11e758fcf718","name":"Update a customer","type":"n8n-nodes-base.quickbooksTool","position":[-140,380],"parameters":{},"typeVersion":1},{"id":"198121b9-d9ae-410f-898d-5fb2acf722c4","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"content":""},"typeVersion":1},{"id":"c8443982-509d-4c19-b8d5-5697012425ff","name":"Create an employee","type":"n8n-nodes-base.quickbooksTool","position":[-800,620],"parameters":{},"typeVersion":1},{"id":"fc30d884-2787-4097-b06b-85fff68adbb2","name":"Get an employee","type":"n8n-nodes-base.quickbooksTool","position":[-580,620],"parameters":{},"typeVersion":1},{"id":"fc132d80-8004-462b-a675-db2c61338d5c","name":"Get many employees","type":"n8n-nodes-base.quickbooksTool","position":[-360,620],"parameters":{},"typeVersion":1},{"id":"e78a34f0-32da-4902-9b3f-781a852444d1","name":"Update an employee","type":"n8n-nodes-base.quickbooksTool","position":[-140,620],"parameters":{},"typeVersion":1},{"id":"773ebb41-f98d-42c5-9759-b8928d9f797c","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"content":""},"typeVersion":1},{"id":"5b916830-2edf-4547-b7cb-05308357c04f","name":"Create an estimate","type":"n8n-nodes-base.quickbooksTool","position":[-800,860],"parameters":{},"typeVersion":1},{"id":"42e2178c-477e-4c42-9c7c-dab06e51965b","name":"Delete an estimate","type":"n8n-nodes-base.quickbooksTool","position":[-580,860],"parameters":{},"typeVersion":1},{"id":"5214500e-b354-4ea8-8c67-8503c47f5f46","name":"Get an estimate","type":"n8n-nodes-base.quickbooksTool","position":[-360,860],"parameters":{},"typeVersion":1},{"id":"3f9d68ba-e586-42a7-8d19-d4e2ee055081","name":"Get many estimates","type":"n8n-nodes-base.quickbooksTool","position":[-140,860],"parameters":{},"typeVersion":1},{"id":"2e73798c-8404-4058-8536-517a672223fd","name":"Send an estimate","type":"n8n-nodes-base.quickbooksTool","position":[80,860],"parameters":{},"typeVersion":1},{"id":"3b2c5979-2f66-412a-97fd-ed28b6f2e125","name":"Update an estimate","type":"n8n-nodes-base.quickbooksTool","position":[300,860],"parameters":{},"typeVersion":1},{"id":"b00e01c3-3a1e-4131-95e7-44ad4e78a4b8","name":"Sticky Note 4","type":"n8n-nodes-base.stickyNote","position":[-1000,840],"parameters":{"content":""},"typeVersion":1},{"id":"d208c4a3-336d-472b-b740-54c225605098","name":"Create an invoice","type":"n8n-nodes-base.quickbooksTool","position":[-800,1100],"parameters":{},"typeVersion":1},{"id":"a5f0d3f3-9bc6-4cb1-b4fe-b53971acfa75","name":"Delete an invoice","type":"n8n-nodes-base.quickbooksTool","position":[-580,1100],"parameters":{},"typeVersion":1},{"id":"3081da7c-ed15-4e96-be29-005193bfc23e","name":"Get an invoice","type":"n8n-nodes-base.quickbooksTool","position":[-360,1100],"parameters":{},"typeVersion":1},{"id":"05935f46-ca2e-4ce4-99e7-cf748b66850f","name":"Get many invoices","type":"n8n-nodes-base.quickbooksTool","position":[-140,1100],"parameters":{},"typeVersion":1},{"id":"edec9327-ac6f-491e-aaed-40184776da02","name":"Send an invoice","type":"n8n-nodes-base.quickbooksTool","position":[80,1100],"parameters":{},"typeVersion":1},{"id":"9b31ffe3-0d14-4bf1-bf4b-b1f488d797e7","name":"Update an invoice","type":"n8n-nodes-base.quickbooksTool","position":[300,1100],"parameters":{},"typeVersion":1},{"id":"7fb69215-5c8d-4d02-b9a4-8067e5bbff43","name":"Void an invoice","type":"n8n-nodes-base.quickbooksTool","position":[520,1100],"parameters":{},"typeVersion":1},{"id":"8e8d6b6d-089a-4fb8-902e-edf6f8ca9ce1","name":"Sticky Note 5","type":"n8n-nodes-base.stickyNote","position":[-1000,1080],"parameters":{"content":""},"typeVersion":1},{"id":"b1e797f1-a950-4c97-bbb7-946fb325e61d","name":"Get an item","type":"n8n-nodes-base.quickbooksTool","position":[-800,1340],"parameters":{},"typeVersion":1},{"id":"e5fbe74d-b688-40c2-8f9c-78300898e77e","name":"Get many items","type":"n8n-nodes-base.quickbooksTool","position":[-580,1340],"parameters":{},"typeVersion":1},{"id":"3d57b80d-249e-4330-a111-7ceb4eb03aa4","name":"Sticky Note 6","type":"n8n-nodes-base.stickyNote","position":[-1000,1320],"parameters":{"content":""},"typeVersion":1},{"id":"e47974e8-f5b1-4e3b-a7e9-feafa44ebb91","name":"Create a payment","type":"n8n-nodes-base.quickbooksTool","position":[-800,1580],"parameters":{},"typeVersion":1},{"id":"54a4f13f-4b77-4ca4-904f-75be00f81675","name":"Delete a payment","type":"n8n-nodes-base.quickbooksTool","position":[-580,1580],"parameters":{},"typeVersion":1},{"id":"2589ef07-3077-4354-8399-61c9be0a6f96","name":"Get a payment","type":"n8n-nodes-base.quickbooksTool","position":[-360,1580],"parameters":{},"typeVersion":1},{"id":"9d919491-55c0-4864-b765-1c7338b0e777","name":"Get many payments","type":"n8n-nodes-base.quickbooksTool","position":[-140,1580],"parameters":{},"typeVersion":1},{"id":"ba9a6e6d-25c9-41c7-ad37-69756d5ab8b0","name":"Send a payment","type":"n8n-nodes-base.quickbooksTool","position":[80,1580],"parameters":{},"typeVersion":1},{"id":"7c7d20ef-ba9b-4541-b8db-5f2996745a77","name":"Update a payment","type":"n8n-nodes-base.quickbooksTool","position":[300,1580],"parameters":{},"typeVersion":1},{"id":"1c3c4965-196b-4231-b495-8065b041f6a2","name":"Void a payment","type":"n8n-nodes-base.quickbooksTool","position":[520,1580],"parameters":{},"typeVersion":1},{"id":"9bd2c8dd-78e4-4176-b51c-543b3012057e","name":"Sticky Note 7","type":"n8n-nodes-base.stickyNote","position":[-1000,1560],"parameters":{"content":""},"typeVersion":1},{"id":"b92777d7-bfc9-44dd-949c-8497fdd49d1e","name":"Get a purchase","type":"n8n-nodes-base.quickbooksTool","position":[-120,1340],"parameters":{},"typeVersion":1},{"id":"6b6dda0a-a157-4e31-8ab8-8b209cb67b0c","name":"Get many purchases","type":"n8n-nodes-base.quickbooksTool","position":[100,1340],"parameters":{},"typeVersion":1},{"id":"9c029b4e-96bc-4b89-95fc-30dd0191387a","name":"Sticky Note 8","type":"n8n-nodes-base.stickyNote","position":[-320,1320],"parameters":{"content":""},"typeVersion":1},{"id":"140f734b-e27d-4373-9093-cdffa8148000","name":"Get a report","type":"n8n-nodes-base.quickbooksTool","position":[-800,1820],"parameters":{},"typeVersion":1},{"id":"08844191-c815-4dd6-bb22-e18e96cbbdae","name":"Sticky Note 9","type":"n8n-nodes-base.stickyNote","position":[-1000,1800],"parameters":{"content":""},"typeVersion":1},{"id":"94bf7e8c-fe92-4d69-9ffb-766121f0f176","name":"Create a vendor","type":"n8n-nodes-base.quickbooksTool","position":[-140,1820],"parameters":{},"typeVersion":1},{"id":"a6410954-2a81-4f6b-8b98-e74978d84803","name":"Get a vendor","type":"n8n-nodes-base.quickbooksTool","position":[80,1820],"parameters":{},"typeVersion":1},{"id":"55730076-21bb-441e-a433-3309c8cb6c8e","name":"Get many vendors","type":"n8n-nodes-base.quickbooksTool","position":[300,1820],"parameters":{},"typeVersion":1},{"id":"64ce41a5-2222-46fd-a13a-b3f951caf59b","name":"Update a vendor","type":"n8n-nodes-base.quickbooksTool","position":[520,1820],"parameters":{},"typeVersion":1},{"id":"ed676eda-3f3a-447a-9404-117b083e4b7b","name":"Sticky Note 10","type":"n8n-nodes-base.stickyNote","position":[-340,1800],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-21T09:09:34.222Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-21T09:09:34.222Z","workflowId":"t0Hdv0eAusXKQpF7"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-21T09:09:34.220Z","updatedAt":"2025-06-21T09:10:55.000Z","versionId":"568ba092-a374-4c11-94de-2d2981823165","isArchived":false,"staticData":null,"connections":{"Get a bill":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get an item":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get a report":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get a vendor":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Create a bill":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a bill":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get a payment":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Update a bill":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get a customer":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get a purchase":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get an invoice":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many bills":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many items":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Send a payment":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Void a payment":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Create a vendor":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get an employee":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get an estimate":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Send an invoice":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Update a vendor":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Void an invoice":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Create a payment":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a payment":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many vendors":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Send an estimate":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Update a payment":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Create a customer":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Create an invoice":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Delete an invoice":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many invoices":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many payments":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Update a customer":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Update an invoice":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Create an employee":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Create an estimate":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Delete an estimate":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many customers":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many employees":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many estimates":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Get many purchases":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Update an employee":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]},"Update an estimate":{"ai_tool":[[{"node":"QuickBooks Online Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ Reddit Tool MCP Server 💪 all 13 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:06:56.294Z
updated_at: 2025-06-26T03:06:56.294Z
url: https://n8n.io/workflows/5355
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Reddit Tool MCP Server

  Complete MCP server exposing all Reddit Tool operations to AI agents. Zero configuration needed - all 13 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Reddit Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Reddit Tool tool with full error handling

  📋 Available Operations (13 total)

  Every possible Reddit Tool operation is included:

  🔧 Post (5 operations)

  • Create a post
  • Delete a post
  • Get a post
  • Get many posts
  • Search for a post

  🔧 Postcomment (4 operations)

  • Create a comment in a post
  • Get many comments in a post
  • Delete a comment from a post
  • Reply to a comment in a post

  🔧 Profile (1 operations)

  • Get a profile

  🔧 Subreddit (2 operations)

  • Get a subreddit
  • Get many subreddits

  👤 User (1 operations)

  • Get a user

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Reddit Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Reddit Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"2QhQh41sGZ5Ergr9","meta":null,"name":"Reddit Tool MCP Server","tags":[],"nodes":[{"id":"4843059b-2421-47f6-b2f3-ef61ccd7046b","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,-80],"parameters":{"content":""},"typeVersion":1},{"id":"0c034a0e-3964-4361-b606-34934fdc4d40","name":"Reddit Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-420,-80],"webhookId":"dce7664e-30f0-4a7f-8b9b-714225a53d17","parameters":{},"typeVersion":1},{"id":"946cde0f-5270-40a9-8811-c8c61702d59f","name":"Create a post","type":"n8n-nodes-base.redditTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"262aac14-4380-49c3-b118-e614af248613","name":"Delete a post","type":"n8n-nodes-base.redditTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"df651c8c-e36e-4086-928f-e9c65731cedd","name":"Get a post","type":"n8n-nodes-base.redditTool","position":[-360,140],"parameters":{},"typeVersion":1},{"id":"517a0e0e-4205-42c4-a954-a630c47cf8f5","name":"Get many posts","type":"n8n-nodes-base.redditTool","position":[-140,140],"parameters":{},"typeVersion":1},{"id":"e2af6961-f0a7-424e-904a-2261fa3e84bf","name":"Search for a post","type":"n8n-nodes-base.redditTool","position":[80,140],"parameters":{},"typeVersion":1},{"id":"81922362-dbc0-4765-a4c5-69c90e7a4d42","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1},{"id":"0c3fa904-a18a-4fa0-8fe9-271ee345888b","name":"Create a comment in a post","type":"n8n-nodes-base.redditTool","position":[-800,380],"parameters":{},"typeVersion":1},{"id":"7b52312d-1e96-4cef-a1de-037510541f48","name":"Get many comments in a post","type":"n8n-nodes-base.redditTool","position":[-580,380],"parameters":{},"typeVersion":1},{"id":"ee3cc090-f43b-4dd7-ada6-aaf2e17f1807","name":"Delete a comment from a post","type":"n8n-nodes-base.redditTool","position":[-360,380],"parameters":{},"typeVersion":1},{"id":"f5213574-1c8b-4eab-8114-aa2f0510b499","name":"Reply to a comment in a post","type":"n8n-nodes-base.redditTool","position":[-140,380],"parameters":{},"typeVersion":1},{"id":"c72c65f8-b6e6-46eb-bc82-f82a25e5fb58","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"content":""},"typeVersion":1},{"id":"bf5a176d-e631-4554-ab08-5d4823ff271a","name":"Get a profile","type":"n8n-nodes-base.redditTool","position":[-140,660],"parameters":{},"typeVersion":1},{"id":"19edca00-a0a2-4955-bef7-2568dc0f1a7c","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[-320,640],"parameters":{"content":""},"typeVersion":1},{"id":"300f23f2-13c9-4069-9d35-4ef0209942b6","name":"Get a subreddit","type":"n8n-nodes-base.redditTool","position":[-800,660],"parameters":{},"typeVersion":1},{"id":"21b4bbcc-c302-4661-bd27-f5a42365dc8c","name":"Get many subreddits","type":"n8n-nodes-base.redditTool","position":[-580,660],"parameters":{},"typeVersion":1},{"id":"15601b73-aeed-4892-8aaa-e832588c1698","name":"Sticky Note 4","type":"n8n-nodes-base.stickyNote","position":[-1000,640],"parameters":{"content":""},"typeVersion":1},{"id":"7714f9e2-66d1-4d2b-bcdc-e4766cb7a91a","name":"Get a user","type":"n8n-nodes-base.redditTool","position":[-820,-80],"parameters":{},"typeVersion":1},{"id":"b47fefcf-b9bb-4852-a554-2d5bf3018511","name":"Sticky Note 5","type":"n8n-nodes-base.stickyNote","position":[-1000,-100],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-21T09:03:53.728Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-21T09:03:53.728Z","workflowId":"2QhQh41sGZ5Ergr9"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-21T09:03:53.727Z","updatedAt":"2025-06-21T09:06:10.000Z","versionId":"20421da6-6c37-4604-80d0-1c0d2f7168fb","isArchived":false,"staticData":null,"connections":{"Get a post":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Get a user":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Create a post":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a post":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Get a profile":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Get many posts":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Get a subreddit":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Search for a post":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Get many subreddits":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Create a comment in a post":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Get many comments in a post":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a comment from a post":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]},"Reply to a comment in a post":{"ai_tool":[[{"node":"Reddit Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ Splunk Tool MCP Server 💪 all 16 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:09:05.208Z
updated_at: 2025-06-26T03:09:05.208Z
url: https://n8n.io/workflows/5359
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Splunk Tool MCP Server

  Complete MCP server exposing all Splunk Tool operations to AI agents. Zero configuration needed - all 16 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Splunk Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Splunk Tool tool with full error handling

  📋 Available Operations (16 total)

  Every possible Splunk Tool operation is included:

  🔧 Alert (2 operations)

  • Get a fired alerts report
  • Get metrics

  🔧 Report (4 operations)

  • Create a search report
  • Delete a search report
  • Get a search report
  • Get many search reports

  🔧 Search (5 operations)

  • Create a search job
  • Delete a search job
  • Get a search job
  • Get many search jobs
  • Get the result of a search job

  👤 User (5 operations)

  • Create a user
  • Delete a user
  • Get a user
  • Get many users
  • Update a user

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Splunk Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Splunk Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"DXYV0tNfFZLlj3kG","meta":null,"name":"Splunk Tool MCP Server","tags":[],"nodes":[{"id":"1986ef2b-4834-42b4-8d94-aa97fc759b89","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,140],"parameters":{"content":""},"typeVersion":1},{"id":"afc4e8d1-712b-4399-a779-5d1959687751","name":"Splunk Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-240,120],"webhookId":"65e143ce-c5c4-4e41-ae08-ddbcffe07761","parameters":{},"typeVersion":1},{"id":"31c37e9d-7aa2-4026-b15d-7093f774b48c","name":"Get a fired alerts report","type":"n8n-nodes-base.splunkTool","position":[-800,140],"parameters":{},"typeVersion":2},{"id":"e6a8726a-3081-4e88-9efe-7ad909ac2799","name":"Get metrics","type":"n8n-nodes-base.splunkTool","position":[-580,140],"parameters":{},"typeVersion":2},{"id":"d089de09-4aab-43bf-9892-2cbbcbdd5102","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1},{"id":"d8bac79b-f58b-4b91-8c18-70bae1de75e2","name":"Create a search report","type":"n8n-nodes-base.splunkTool","position":[-800,380],"parameters":{},"typeVersion":2},{"id":"6926f1ca-a6e3-46c1-809d-93cfa0fd7b57","name":"Delete a search report","type":"n8n-nodes-base.splunkTool","position":[-580,380],"parameters":{},"typeVersion":2},{"id":"908fede3-a0f8-4c29-ab80-ba998ff45f78","name":"Get a search report","type":"n8n-nodes-base.splunkTool","position":[-360,380],"parameters":{},"typeVersion":2},{"id":"52298b0a-135b-4986-9c8f-3e54a1140938","name":"Get many search reports","type":"n8n-nodes-base.splunkTool","position":[-140,380],"parameters":{},"typeVersion":2},{"id":"257fcedd-613b-4f4d-9c10-d3e2a92cd5c7","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"content":""},"typeVersion":1},{"id":"8049f2e9-dd95-41e4-9b88-2eb73d7d7589","name":"Create a search job","type":"n8n-nodes-base.splunkTool","position":[-800,620],"parameters":{},"typeVersion":2},{"id":"eea54cb0-aaaf-48be-9c9e-e46502161d65","name":"Delete a search job","type":"n8n-nodes-base.splunkTool","position":[-580,620],"parameters":{},"typeVersion":2},{"id":"f3b96ef5-fca8-46a7-b1f0-9b6ce4e3d1b1","name":"Get a search job","type":"n8n-nodes-base.splunkTool","position":[-360,620],"parameters":{},"typeVersion":2},{"id":"17671516-3010-452f-97f3-931ec6cb50bf","name":"Get many search jobs","type":"n8n-nodes-base.splunkTool","position":[-140,620],"parameters":{},"typeVersion":2},{"id":"d442b5dd-918c-45ca-91c4-23ce35559be1","name":"Get the result of a search job","type":"n8n-nodes-base.splunkTool","position":[80,620],"parameters":{},"typeVersion":2},{"id":"565a1d71-07dc-4940-96db-1311ad934b67","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"content":""},"typeVersion":1},{"id":"8177ccdc-324e-4777-9fd5-0ac99c4282d8","name":"Create a user","type":"n8n-nodes-base.splunkTool","position":[-800,860],"parameters":{},"typeVersion":2},{"id":"c93cd75b-d997-4f37-a154-19059c71a31f","name":"Delete a user","type":"n8n-nodes-base.splunkTool","position":[-580,860],"parameters":{},"typeVersion":2},{"id":"d43c1f09-d060-4bcc-b881-52a86a211624","name":"Get a user","type":"n8n-nodes-base.splunkTool","position":[-360,860],"parameters":{},"typeVersion":2},{"id":"c8a9d4e5-98a2-49b2-a8bf-af0f455ac6f9","name":"Get many users","type":"n8n-nodes-base.splunkTool","position":[-140,860],"parameters":{},"typeVersion":2},{"id":"f7d472e8-59cc-4deb-999b-39ffc3eb9576","name":"Update a user","type":"n8n-nodes-base.splunkTool","position":[80,860],"parameters":{},"typeVersion":2},{"id":"763a949d-9b60-425a-b83f-b9cd7b61e72b","name":"Sticky Note 4","type":"n8n-nodes-base.stickyNote","position":[-1000,840],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-21T08:46:30.437Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-21T08:46:30.437Z","workflowId":"DXYV0tNfFZLlj3kG"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-21T08:46:30.435Z","updatedAt":"2025-06-21T08:47:42.000Z","versionId":"21a30d70-5e32-49de-9be2-eb631b369828","isArchived":false,"staticData":null,"connections":{"Get a user":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Get metrics":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Create a user":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a user":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Update a user":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Get many users":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Get a search job":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Create a search job":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a search job":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Get a search report":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Get many search jobs":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Create a search report":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a search report":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Get many search reports":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Get a fired alerts report":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]},"Get the result of a search job":{"ai_tool":[[{"node":"Splunk Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ Spotify Tool MCP Server 💪 all 30 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:10:02.426Z
updated_at: 2025-06-26T03:10:02.426Z
url: https://n8n.io/workflows/5360
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Spotify Tool MCP Server

  Complete MCP server exposing all Spotify Tool operations to AI agents. Zero configuration needed - all 30 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Spotify Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Spotify Tool tool with full error handling

  📋 Available Operations (30 total)

  Every possible Spotify Tool operation is included:

  🔧 Album (4 operations)

  • Get an album
  • Get new album releases
  • Get an album's tracks by URI or ID
  • Search albums by keyword

  🔧 Artist (5 operations)

  • Get an artist
  • Get an artist's albums by URI or ID
  • Get an artist's related artists by URI or ID
  • Get an artist's top tracks by URI or ID
  • Search artists by keyword

  🔧 Library (1 operations)

  • Get liked tracks

  🔧 Mydata (1 operations)

  • Get your followed artists

  🔧 Player (9 operations)

  • Add a song to a queue
  • Get the currently playing track
  • Skip to the next track
  • Pause the player
  • Skip to the previous song
  • Get the recently played tracks
  • Resume the player
  • Set volume on the player
  • Start music on the player

  🔧 Playlist (7 operations)

  • Add an Item to a playlist
  • Create a playlist
  • Get a playlist
  • Get a user's playlists
  • Get a playlist's tracks by URI or ID
  • Remove an item from a playlist
  • Search playlists by keyword

  🔧 Track (3 operations)

  • Get a track
  • Get audio features of a track
  • Search tracks by keyword

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Spotify Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Spotify Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"UzMP5cZQvJ38AizO","meta":null,"name":"Spotify Tool MCP Server","tags":[],"nodes":[{"id":"ef9e6e3a-3888-40f0-8bc5-ded13aaf336a","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1480,180],"parameters":{"content":""},"typeVersion":1},{"id":"991bcaf0-2045-457b-9140-5a95a3d072f8","name":"Spotify Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[200,140],"webhookId":"df47ced1-3e97-4b0c-8465-6d05d0b5309b","parameters":{},"typeVersion":1},{"id":"742e8e7e-9b58-461b-8888-ca1c9199b884","name":"Get an album","type":"n8n-nodes-base.spotifyTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"20cfae72-32ee-4446-b378-560ed161a327","name":"Get new album releases","type":"n8n-nodes-base.spotifyTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"b6c600b2-04d5-47d0-ae4d-dbfa4efbf1a3","name":"Get an album's tracks by URI or ID","type":"n8n-nodes-base.spotifyTool","position":[-360,140],"parameters":{},"typeVersion":1},{"id":"5f5ec110-5678-4435-8e5c-c6ea24e2ed44","name":"Search albums by keyword","type":"n8n-nodes-base.spotifyTool","position":[-140,140],"parameters":{},"typeVersion":1},{"id":"58c7a818-ce97-406e-b06a-a8726f380bb0","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1},{"id":"daca2e88-efb6-45b6-9ad9-458a6ad7d110","name":"Get an artist","type":"n8n-nodes-base.spotifyTool","position":[-800,380],"parameters":{},"typeVersion":1},{"id":"9dd35430-48db-44e0-8e4b-79451e95aabc","name":"Get an artist's albums by URI or ID","type":"n8n-nodes-base.spotifyTool","position":[-580,380],"parameters":{},"typeVersion":1},{"id":"09b5adaa-2559-4976-a945-7c4cc5edfaf5","name":"Get an artist's related artists by URI or ID","type":"n8n-nodes-base.spotifyTool","position":[-360,380],"parameters":{},"typeVersion":1},{"id":"df4508a9-0da5-465d-bec3-fb36f1901603","name":"Get an artist's top tracks by URI or ID","type":"n8n-nodes-base.spotifyTool","position":[-140,380],"parameters":{},"typeVersion":1},{"id":"13e1a317-dca1-4cfc-9406-3bbb2be5862b","name":"Search artists by keyword","type":"n8n-nodes-base.spotifyTool","position":[80,380],"parameters":{},"typeVersion":1},{"id":"2bcad20d-c129-4e5b-9157-55b5bb2e5c3f","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"content":""},"typeVersion":1},{"id":"f045e5bc-64d1-4757-ae75-ffcc7e725883","name":"Get liked tracks","type":"n8n-nodes-base.spotifyTool","position":[580,860],"parameters":{},"typeVersion":1},{"id":"5dfcab6c-13cb-4b74-8219-43e32e3fe378","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[380,840],"parameters":{"content":""},"typeVersion":1},{"id":"e26b6b18-fc59-4804-aa39-44f3bc69340a","name":"Get your followed artists","type":"n8n-nodes-base.spotifyTool","position":[100,860],"parameters":{},"typeVersion":1},{"id":"8ff2d495-b391-4f37-94e1-e52dcca7307a","name":"Sticky Note 4","type":"n8n-nodes-base.stickyNote","position":[-100,840],"parameters":{"content":""},"typeVersion":1},{"id":"d4f637f1-2a5d-4b91-af17-05317776c385","name":"Add a song to a queue","type":"n8n-nodes-base.spotifyTool","position":[-800,1100],"parameters":{},"typeVersion":1},{"id":"a0fc2be2-23a0-40b4-9e04-cd0386913138","name":"Get the currently playing track","type":"n8n-nodes-base.spotifyTool","position":[-580,1100],"parameters":{},"typeVersion":1},{"id":"d4e9ce44-4d6b-4282-901a-bdea4a5fec0e","name":"Skip to the next track","type":"n8n-nodes-base.spotifyTool","position":[-360,1100],"parameters":{},"typeVersion":1},{"id":"9362deb3-9792-46e6-afd9-06c3b538f011","name":"Pause the player","type":"n8n-nodes-base.spotifyTool","position":[-140,1100],"parameters":{},"typeVersion":1},{"id":"8252cbfc-da38-4541-b8fd-4c44360507a7","name":"Skip to the previous song","type":"n8n-nodes-base.spotifyTool","position":[80,1100],"parameters":{},"typeVersion":1},{"id":"df94c946-b0a2-4e24-9820-a475a8b21caf","name":"Get the recently played tracks","type":"n8n-nodes-base.spotifyTool","position":[300,1100],"parameters":{},"typeVersion":1},{"id":"670f10fd-eb58-493d-b604-380fb31b7a64","name":"Resume the player","type":"n8n-nodes-base.spotifyTool","position":[520,1100],"parameters":{},"typeVersion":1},{"id":"78c794c8-b878-46b4-8caf-e9ee5a9b99ad","name":"Set volume on the player","type":"n8n-nodes-base.spotifyTool","position":[740,1100],"parameters":{},"typeVersion":1},{"id":"f64824c1-657d-4a6f-85f5-19d76a98628c","name":"Start music on the player","type":"n8n-nodes-base.spotifyTool","position":[960,1100],"parameters":{},"typeVersion":1},{"id":"6c711374-ccac-4c3d-8dd0-c6834f0a2b77","name":"Sticky Note 5","type":"n8n-nodes-base.stickyNote","position":[-1000,1080],"parameters":{"content":""},"typeVersion":1},{"id":"1b338588-7a97-4eeb-b42e-2cf3ba820c2c","name":"Add an Item to a playlist","type":"n8n-nodes-base.spotifyTool","position":[-800,620],"parameters":{},"typeVersion":1},{"id":"3404f142-a9a6-4477-ad44-0e08cda041ee","name":"Create a playlist","type":"n8n-nodes-base.spotifyTool","position":[-580,620],"parameters":{},"typeVersion":1},{"id":"a218bf2c-310f-4ec0-9859-e693e4416b0a","name":"Get a playlist","type":"n8n-nodes-base.spotifyTool","position":[-360,620],"parameters":{},"typeVersion":1},{"id":"0fd91681-94b6-4eab-b44b-e703589793d3","name":"Get a user's playlists","type":"n8n-nodes-base.spotifyTool","position":[-140,620],"parameters":{},"typeVersion":1},{"id":"d9835993-9c27-4df6-91a5-4897c62fbe66","name":"Get a playlist's tracks by URI or ID","type":"n8n-nodes-base.spotifyTool","position":[80,620],"parameters":{},"typeVersion":1},{"id":"28d1327a-9635-45df-8f02-b7c2a8037f34","name":"Remove an item from a playlist","type":"n8n-nodes-base.spotifyTool","position":[300,620],"parameters":{},"typeVersion":1},{"id":"2352aa79-53b3-472a-819e-bef5a43e592b","name":"Search playlists by keyword","type":"n8n-nodes-base.spotifyTool","position":[520,620],"parameters":{},"typeVersion":1},{"id":"2493a96a-7c5e-4a4f-ac33-94a911c831f8","name":"Sticky Note 6","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"content":""},"typeVersion":1},{"id":"f4825618-b578-4fff-899d-3e1d8182bed8","name":"Get a track","type":"n8n-nodes-base.spotifyTool","position":[-800,860],"parameters":{},"typeVersion":1},{"id":"d0f714ed-9c64-44b1-9e67-6e5984758e83","name":"Get audio features of a track","type":"n8n-nodes-base.spotifyTool","position":[-580,860],"parameters":{},"typeVersion":1},{"id":"1f0792b1-ce13-4612-875e-d98b8774f96a","name":"Search tracks by keyword","type":"n8n-nodes-base.spotifyTool","position":[-360,860],"parameters":{},"typeVersion":1},{"id":"7766868c-b809-42dd-80ea-ed3ad8fdef40","name":"Sticky Note 7","type":"n8n-nodes-base.stickyNote","position":[-1000,840],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-21T08:43:22.810Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-21T08:43:22.810Z","workflowId":"UzMP5cZQvJ38AizO"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-21T08:43:22.808Z","updatedAt":"2025-06-26T03:09:43.000Z","versionId":"fd5b62c3-a697-45b4-ac1e-ab4d0482e48d","isArchived":false,"staticData":null,"connections":{"Get a track":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get an album":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get an artist":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get a playlist":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get liked tracks":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Pause the player":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Create a playlist":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Resume the player":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Add a song to a queue":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get a user's playlists":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get new album releases":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Skip to the next track":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Search albums by keyword":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Search tracks by keyword":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Set volume on the player":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Add an Item to a playlist":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get your followed artists":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Search artists by keyword":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Skip to the previous song":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Start music on the player":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Search playlists by keyword":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get audio features of a track":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get the recently played tracks":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Remove an item from a playlist":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get the currently playing track":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get an album's tracks by URI or ID":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get an artist's albums by URI or ID":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get a playlist's tracks by URI or ID":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get an artist's top tracks by URI or ID":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]},"Get an artist's related artists by URI or ID":{"ai_tool":[[{"node":"Spotify Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ Storyblok Tool MCP Server 💪 all 7 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:10:39.207Z
updated_at: 2025-06-26T03:10:39.207Z
url: https://n8n.io/workflows/5361
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Storyblok Tool MCP Server

  Complete MCP server exposing all Storyblok Tool operations to AI agents. Zero configuration needed - all 7 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Storyblok Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Storyblok Tool tool with full error handling

  📋 Available Operations (7 total)

  Every possible Storyblok Tool operation is included:

  🔧 Story (7 operations)

  • Get a story
  • Get many stories
  • Delete a story
  • Get a story
  • Get many stories
  • Publish a story
  • Unpublish a story

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Storyblok Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Storyblok Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"1DMHBiVqXcNKfc8C","meta":null,"name":"Storyblok Tool MCP Server","tags":[],"nodes":[{"id":"e67c5ec8-d7d5-4337-83a5-442bcc30b482","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,-100],"parameters":{"content":""},"typeVersion":1},{"id":"f53350d4-d144-436b-9f3c-0d27d83fcece","name":"Storyblok Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-760,-100],"webhookId":"e0dbd6bc-3846-43c0-b6b9-266afee6db69","parameters":{},"typeVersion":1},{"id":"7f4bc846-93fd-4519-bff1-c6e1e61916d9","name":"Delete a story","type":"n8n-nodes-base.storyblokTool","position":[-520,340],"parameters":{},"typeVersion":1},{"id":"ccc0a9e5-d81d-4ddb-a1e9-6d45f53ecc3b","name":"Get a story","type":"n8n-nodes-base.storyblokTool","position":[-820,140],"parameters":{},"typeVersion":1},{"id":"24be78bd-e672-433e-83ac-686db452c032","name":"Get many stories","type":"n8n-nodes-base.storyblokTool","position":[-940,340],"parameters":{},"typeVersion":1},{"id":"460d17d3-d094-4dae-a7ca-c19c3e444f69","name":"Publish a story","type":"n8n-nodes-base.storyblokTool","position":[-720,340],"parameters":{},"typeVersion":1},{"id":"56b7bc5f-47f2-493d-a7b0-4b25bf65cb57","name":"Unpublish a story","type":"n8n-nodes-base.storyblokTool","position":[-600,140],"parameters":{},"typeVersion":1},{"id":"6eff6b46-a8f6-4723-bfd2-b602b030cd63","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-21T08:40:22.127Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-21T08:40:22.127Z","workflowId":"1DMHBiVqXcNKfc8C"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-21T08:40:22.125Z","updatedAt":"2025-06-21T08:42:30.000Z","versionId":"6d94affd-8786-4366-a2ee-dd86e9fac7c6","isArchived":false,"staticData":null,"connections":{"Get a story":{"ai_tool":[[{"node":"Storyblok Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a story":{"ai_tool":[[{"node":"Storyblok Tool MCP Server","type":"ai_tool","index":0}]]},"Publish a story":{"ai_tool":[[{"node":"Storyblok Tool MCP Server","type":"ai_tool","index":0}]]},"Get many stories":{"ai_tool":[[{"node":"Storyblok Tool MCP Server","type":"ai_tool","index":0}]]},"Unpublish a story":{"ai_tool":[[{"node":"Storyblok Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ Strapi Tool MCP Server 💪 5 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:11:13.545Z
updated_at: 2025-06-26T03:11:13.545Z
url: https://n8n.io/workflows/5362
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Strapi Tool MCP Server

  Complete MCP server exposing all Strapi Tool operations to AI agents. Zero configuration needed - all 5 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Strapi Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Strapi Tool tool with full error handling

  📋 Available Operations (5 total)

  Every possible Strapi Tool operation is included:

  🔧 Entry (5 operations)

  • Create an entry
  • Delete an entry
  • Get an entry
  • Get many entries
  • Update an entry

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Strapi Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Strapi Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"HUT6WKSOUNpcMo0m","meta":null,"name":"Strapi Tool MCP Server","tags":[],"nodes":[{"id":"39cd47e9-2dbe-488a-a5e9-e6832565eb5b","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,-100],"parameters":{"content":""},"typeVersion":1},{"id":"af99d460-ea91-47be-bce4-b0887083d758","name":"Strapi Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-860,-80],"webhookId":"b2b973f5-1927-4940-9343-48a6261aaebe","parameters":{},"typeVersion":1},{"id":"ccaac1ca-8b3e-4a59-91ff-421479e3bc35","name":"Create an entry","type":"n8n-nodes-base.strapiTool","position":[-820,140],"parameters":{},"typeVersion":1},{"id":"03318635-ddbf-4aa5-b35e-082e9c7a81d2","name":"Delete an entry","type":"n8n-nodes-base.strapiTool","position":[-620,140],"parameters":{},"typeVersion":1},{"id":"0944d8cf-1da2-4da0-beaf-97a6af34f9c9","name":"Get an entry","type":"n8n-nodes-base.strapiTool","position":[-960,360],"parameters":{},"typeVersion":1},{"id":"d4e2f885-2aaa-471d-92ae-4431f0d69e10","name":"Get many entries","type":"n8n-nodes-base.strapiTool","position":[-780,360],"parameters":{},"typeVersion":1},{"id":"05bc7538-6454-4ffa-93a0-ab1a5f1c4d14","name":"Update an entry","type":"n8n-nodes-base.strapiTool","position":[-580,360],"parameters":{},"typeVersion":1},{"id":"b489203d-09b7-419e-af9b-41bf1350d31a","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-21T08:38:44.488Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-21T08:38:44.488Z","workflowId":"HUT6WKSOUNpcMo0m"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-21T08:38:44.486Z","updatedAt":"2025-06-21T08:39:30.000Z","versionId":"cc2e9e5e-535a-451c-b535-1a00c663a134","isArchived":false,"staticData":null,"connections":{"Get an entry":{"ai_tool":[[{"node":"Strapi Tool MCP Server","type":"ai_tool","index":0}]]},"Create an entry":{"ai_tool":[[{"node":"Strapi Tool MCP Server","type":"ai_tool","index":0}]]},"Delete an entry":{"ai_tool":[[{"node":"Strapi Tool MCP Server","type":"ai_tool","index":0}]]},"Update an entry":{"ai_tool":[[{"node":"Strapi Tool MCP Server","type":"ai_tool","index":0}]]},"Get many entries":{"ai_tool":[[{"node":"Strapi Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ Strava Tool MCP Server 💪 all 9 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:11:45.068Z
updated_at: 2025-06-26T03:11:45.068Z
url: https://n8n.io/workflows/5363
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Strava Tool MCP Server

  Complete MCP server exposing all Strava Tool operations to AI agents. Zero configuration needed - all 9 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Strava Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Strava Tool tool with full error handling

  📋 Available Operations (9 total)

  Every possible Strava Tool operation is included:

  🔧 Activity (9 operations)

  • Create an activity
  • Get an activity
  • Get all activity comments
  • Get all activity kudos
  • Get all activity laps
  • Get many activities
  • Get all activity streams
  • Get all activity zones
  • Update an activity

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Strava Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Strava Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"VeKYKNJRt1fxFE7F","meta":null,"name":"Strava Tool MCP Server","tags":[],"nodes":[{"id":"0425e42f-bf77-44fa-8e5c-1a4775298659","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,0],"parameters":{"content":""},"typeVersion":1},{"id":"4a4a108d-8a28-4869-9a25-f9043656fe01","name":"Strava Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-620,-60],"webhookId":"31ad7ae7-6139-4958-9dcb-cc9840b43841","parameters":{},"typeVersion":1},{"id":"2188449b-8f4f-4616-b150-939686eb5ca9","name":"Create an activity","type":"n8n-nodes-base.stravaTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"8a963f37-9937-4910-8e77-3c8a30a56c79","name":"Get an activity","type":"n8n-nodes-base.stravaTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"1d69e129-c31b-4e94-9a1e-f57c413cadd3","name":"Get all activity comments","type":"n8n-nodes-base.stravaTool","position":[-360,140],"parameters":{},"typeVersion":1},{"id":"75b6463f-5e82-445a-98fb-bb01274f2deb","name":"Get all activity kudos","type":"n8n-nodes-base.stravaTool","position":[-800,400],"parameters":{},"typeVersion":1},{"id":"0d1a9a1c-2106-492f-bc4a-edab5a4ebc32","name":"Get all activity laps","type":"n8n-nodes-base.stravaTool","position":[-580,400],"parameters":{},"typeVersion":1},{"id":"c46125d2-cbfa-4f4e-a9e6-d0076559ef33","name":"Get many activities","type":"n8n-nodes-base.stravaTool","position":[-360,400],"parameters":{},"typeVersion":1},{"id":"9b6ea3dd-b0d4-493d-814f-12cc0e5f6af4","name":"Get all activity streams","type":"n8n-nodes-base.stravaTool","position":[-800,640],"parameters":{},"typeVersion":1},{"id":"42f0eeae-77dd-46bb-8869-7eae0e4599fc","name":"Get all activity zones","type":"n8n-nodes-base.stravaTool","position":[-580,640],"parameters":{},"typeVersion":1},{"id":"3ef9b8cc-e289-4bf6-8f47-50dc6a03154a","name":"Update an activity","type":"n8n-nodes-base.stravaTool","position":[-360,640],"parameters":{},"typeVersion":1},{"id":"7052ae03-649d-48bb-aa27-52f54ad804b5","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-21T08:36:40.244Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-21T08:36:40.244Z","workflowId":"VeKYKNJRt1fxFE7F"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-21T08:36:40.243Z","updatedAt":"2025-06-21T08:37:49.000Z","versionId":"78837910-0e2a-4d08-9f71-268de2f74121","isArchived":false,"staticData":null,"connections":{"Get an activity":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]},"Create an activity":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]},"Update an activity":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]},"Get many activities":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]},"Get all activity laps":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]},"Get all activity kudos":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]},"Get all activity zones":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]},"Get all activity streams":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]},"Get all activity comments":{"ai_tool":[[{"node":"Strava Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ SyncroMSP Tool MCP Server 💪 all 20 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:12:09.001Z
updated_at: 2025-06-26T03:12:09.001Z
url: https://n8n.io/workflows/5364
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ SyncroMSP Tool MCP Server

  Complete MCP server exposing all SyncroMSP Tool operations to AI agents. Zero configuration needed - all 20 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every SyncroMSP Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n SyncroMSP Tool tool with full error handling

  📋 Available Operations (20 total)

  Every possible SyncroMSP Tool operation is included:

  📇 Contact (5 operations)

  • Create a contact
  • Delete a contact
  • Get a contact
  • Get many contacts
  • Update a contact

  🔧 Customer (5 operations)

  • Create a customer
  • Delete a customer
  • Get a customer
  • Get many customers
  • Update a customer

  🔧 Rmm (5 operations)

  • Create an RMM alert
  • Delete an RMM alert
  • Get an RMM alert
  • Get many RMM alerts
  • Mute an RMM alert

  🔧 Ticket (5 operations)

  • Create a ticket
  • Delete a ticket
  • Get a ticket
  • Get many tickets
  • Update a ticket

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native SyncroMSP Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every SyncroMSP Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"IAVCytTpkE3Nm9DC","meta":null,"name":"SyncroMSP Tool MCP Server","tags":[],"nodes":[{"id":"9838931e-58b3-4002-85d9-0393732a29dd","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,60],"parameters":{"content":""},"typeVersion":1},{"id":"2f35a58e-9d1e-4bf3-99b1-38742752344f","name":"SyncroMSP Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-420,-120],"webhookId":"69db8ed1-98ca-4297-a9c3-296161f1e59b","parameters":{},"typeVersion":1},{"id":"e95e9e8a-1542-40ad-97f6-902d3bae9bf9","name":"Create a contact","type":"n8n-nodes-base.syncroMspTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"9209a75e-7d75-4a52-8d31-e423b3f00f6f","name":"Delete a contact","type":"n8n-nodes-base.syncroMspTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"6ca4622f-573b-458b-a145-5638d45d5e4e","name":"Get a contact","type":"n8n-nodes-base.syncroMspTool","position":[-360,140],"parameters":{},"typeVersion":1},{"id":"3d4c4ff3-b494-425a-98b1-a97f1a7de957","name":"Get many contacts","type":"n8n-nodes-base.syncroMspTool","position":[-140,140],"parameters":{},"typeVersion":1},{"id":"208bdd78-c0a6-4bf4-adbe-f642febb9f86","name":"Update a contact","type":"n8n-nodes-base.syncroMspTool","position":[80,140],"parameters":{},"typeVersion":1},{"id":"573a33ad-124b-4782-9700-5941dd01c1da","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1},{"id":"aad96e29-4399-4683-b478-438440aa6010","name":"Create a customer","type":"n8n-nodes-base.syncroMspTool","position":[-800,380],"parameters":{},"typeVersion":1},{"id":"afcd0ddc-e17c-4a13-be84-9883f248f176","name":"Delete a customer","type":"n8n-nodes-base.syncroMspTool","position":[-580,380],"parameters":{},"typeVersion":1},{"id":"6beb03d5-3307-4d04-9a0c-a904d4791bfd","name":"Get a customer","type":"n8n-nodes-base.syncroMspTool","position":[-360,380],"parameters":{},"typeVersion":1},{"id":"bdcc6845-f760-450a-bc6a-0ae65024e9c0","name":"Get many customers","type":"n8n-nodes-base.syncroMspTool","position":[-140,380],"parameters":{},"typeVersion":1},{"id":"bc356bf4-59df-478c-b068-5bb66bd43fe2","name":"Update a customer","type":"n8n-nodes-base.syncroMspTool","position":[80,380],"parameters":{},"typeVersion":1},{"id":"cd1bd274-b168-44e3-a5e8-9f4abd58b9d0","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"content":""},"typeVersion":1},{"id":"fffaee6a-e685-454d-8cf3-343e5115d6d5","name":"Create an RMM alert","type":"n8n-nodes-base.syncroMspTool","position":[-800,620],"parameters":{},"typeVersion":1},{"id":"b451fa5b-b1a2-4642-813e-3a4c7a8d09c8","name":"Delete an RMM alert","type":"n8n-nodes-base.syncroMspTool","position":[-580,620],"parameters":{},"typeVersion":1},{"id":"b1a02ea9-da0e-4a0e-8553-a0ef3cea2369","name":"Get an RMM alert","type":"n8n-nodes-base.syncroMspTool","position":[-360,620],"parameters":{},"typeVersion":1},{"id":"a1e80cd8-08de-4f38-a8f5-d72d52d7dda5","name":"Get many RMM alerts","type":"n8n-nodes-base.syncroMspTool","position":[-140,620],"parameters":{},"typeVersion":1},{"id":"158479d4-7ed1-4f62-a234-bd720c18b637","name":"Mute an RMM alert","type":"n8n-nodes-base.syncroMspTool","position":[80,620],"parameters":{},"typeVersion":1},{"id":"5971522d-1746-4c49-ba9d-c07b3e6c974a","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"content":""},"typeVersion":1},{"id":"84fdcaa7-fcb4-4476-9b5c-fc153e3dd732","name":"Create a ticket","type":"n8n-nodes-base.syncroMspTool","position":[-800,860],"parameters":{},"typeVersion":1},{"id":"e67e05d6-5213-45e5-867d-ade61993fbc3","name":"Delete a ticket","type":"n8n-nodes-base.syncroMspTool","position":[-580,860],"parameters":{},"typeVersion":1},{"id":"ae03f90c-f6f0-4408-be39-7b085e5d95f0","name":"Get a ticket","type":"n8n-nodes-base.syncroMspTool","position":[-360,860],"parameters":{},"typeVersion":1},{"id":"91e5651c-a20c-4c12-9f0b-8e00f608540e","name":"Get many tickets","type":"n8n-nodes-base.syncroMspTool","position":[-140,860],"parameters":{},"typeVersion":1},{"id":"afb6ec22-b4b1-468d-a58d-8becea99222d","name":"Update a ticket","type":"n8n-nodes-base.syncroMspTool","position":[80,860],"parameters":{},"typeVersion":1},{"id":"26c194b4-000e-4a8e-bcf9-e1dd110f3d97","name":"Sticky Note 4","type":"n8n-nodes-base.stickyNote","position":[-1000,840],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-20T19:48:03.589Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-20T19:48:03.589Z","workflowId":"IAVCytTpkE3Nm9DC"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-20T19:48:03.588Z","updatedAt":"2025-06-20T19:48:31.000Z","versionId":"dedd9d0c-ef84-43e7-b8cd-c5c4c0baf975","isArchived":false,"staticData":null,"connections":{"Get a ticket":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Get a contact":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Get a customer":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Create a ticket":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a ticket":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Update a ticket":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Create a contact":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a contact":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Get an RMM alert":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Get many tickets":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Update a contact":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Create a customer":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a customer":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Get many contacts":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Mute an RMM alert":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Update a customer":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Get many customers":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Create an RMM alert":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Delete an RMM alert":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]},"Get many RMM alerts":{"ai_tool":[[{"node":"SyncroMSP Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: 🛠️ TheHive Tool MCP Server
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-26T03:12:51.950Z
updated_at: 2025-06-26T03:12:51.950Z
url: https://n8n.io/workflows/5365
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ TheHive Tool MCP Server

  Complete MCP server exposing all TheHive Tool operations to AI agents. Zero configuration needed - all 4 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every TheHive Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n TheHive Tool tool with full error handling

  📋 Available Operations (4 total)

  Every possible TheHive Tool operation is included:

  🔧 Alert (0 operations)

  🔧 Case (0 operations)

  🔧 Log (4 operations)

  • Create a log
  • Execute a responder
  • Get many logs
  • Get a log

  🔧 Observable (0 operations)

  🔧 Task (0 operations)

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native TheHive Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every TheHive Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"id":"sBJlEpK3x5T80uBi","meta":null,"name":"TheHive Tool MCP Server","tags":[],"nodes":[{"id":"7b102b99-0596-4440-873e-bd81881c1261","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,80],"parameters":{"content":""},"typeVersion":1},{"id":"5713ee36-a689-4bfe-9d83-2597de8d9c49","name":"TheHive Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-420,200],"webhookId":"79203b81-fef2-423e-aaa9-356565708c94","parameters":{},"typeVersion":1},{"id":"2e53442e-a6cb-4c15-88c0-446d455ac245","name":"Create a log","type":"n8n-nodes-base.theHiveTool","position":[-800,620],"parameters":{},"typeVersion":1},{"id":"ca270653-6815-4a58-b5fa-86be59745539","name":"Execute a responder","type":"n8n-nodes-base.theHiveTool","position":[-580,620],"parameters":{},"typeVersion":1},{"id":"7f01e558-b10f-4242-989a-caa2f3a15b74","name":"Get many logs","type":"n8n-nodes-base.theHiveTool","position":[-360,620],"parameters":{},"typeVersion":1},{"id":"96bd5158-ae2b-46ba-a94b-f2524d3b9a21","name":"Get a log","type":"n8n-nodes-base.theHiveTool","position":[-140,620],"parameters":{},"typeVersion":1},{"id":"14f28435-f1e6-4861-a452-f197c41c92a9","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"content":""},"typeVersion":1}],"active":false,"shared":[{"role":"workflow:owner","project":{"id":"G5fce9xGuBAsWBXe","icon":null,"name":"David Ashby <david.ashby.lds@gmail.com>","type":"personal","createdAt":"2025-06-04T02:55:02.013Z","updatedAt":"2025-06-04T02:56:01.361Z","projectRelations":[{"role":"project:personalOwner","user":{"id":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","role":"global:owner","email":"david.ashby.lds@gmail.com","disabled":false,"lastName":"Ashby","settings":{"npsSurvey":{"responded":true,"lastShownAt":1749357655581},"userActivated":true,"userActivatedAt":1749075994495,"easyAIWorkflowOnboarded":true,"firstSuccessfulWorkflowId":"3N3vVikZb3MckFYm"},"createdAt":"2025-06-04T02:55:01.745Z","firstName":"David","isPending":false,"updatedAt":"2025-06-08T04:40:58.399Z","mfaEnabled":false,"personalizationAnswers":{"version":"v4","personalization_survey_n8n_version":"1.95.3","personalization_survey_submitted_at":"2025-06-04T02:56:07.075Z"}},"userId":"715c1c00-cb48-4712-9a32-f1f4b6db2b30","createdAt":"2025-06-04T02:55:02.013Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-04T02:55:02.013Z"}]},"createdAt":"2025-06-20T19:42:33.272Z","projectId":"G5fce9xGuBAsWBXe","updatedAt":"2025-06-20T19:42:33.272Z","workflowId":"sBJlEpK3x5T80uBi"}],"settings":{"timezone":"America/New_York"},"createdAt":"2025-06-20T19:42:33.272Z","updatedAt":"2025-06-26T03:12:32.000Z","versionId":"c8f1e3a5-b4c1-40c1-9f24-0e9b9dc5d202","isArchived":false,"staticData":null,"connections":{"Get a log":{"ai_tool":[[{"node":"TheHive Tool MCP Server","type":"ai_tool","index":0}]]},"Create a log":{"ai_tool":[[{"node":"TheHive Tool MCP Server","type":"ai_tool","index":0}]]},"Get many logs":{"ai_tool":[[{"node":"TheHive Tool MCP Server","type":"ai_tool","index":0}]]},"Execute a responder":{"ai_tool":[[{"node":"TheHive Tool MCP Server","type":"ai_tool","index":0}]]}},"triggerCount":0}


name: US Stocks Earnings Calendar AI Updates to Telegram (Finnhub + Gemini)
author_name: Malik Hashir
author_username: malikx
categories: []
created_at: 2025-06-26T10:53:31.100Z
updated_at: 2025-06-26T10:53:31.100Z
url: https://n8n.io/workflows/5373
scraped_at: 2025-07-06 21:16:30
description:
  Purpose & Audience
  This n8n workflow is designed for investors, traders, financial analysts, and community managers who want real-time, structured US stocks upcoming earnings calendar updates directly to their Telegram channels or chats. It’s perfect for anyone running a financial community, managing a trading group, or tracking earnings for personal investment decisions.

  What It Does
  Fetches upcoming earnings calendar for US-listed stocks using the Finnhub API (free-tier), with a default window of the next 3 days (customizable to any date range).
  Uses Google Gemini AI to automatically format and structure the earnings data into a clean, grouped, and enhanced message, including company names, tickers, quarters, estimated EPS, and revenue (with intelligent scaling for billions/millions).
  Sends the formatted earnings update directly to your chosen Telegram chat or channel via a Telegram bot.

  Who Is It For?
  Retail and professional investors
  Financial influencers and Telegram group admins
  Trading desk or community managers
  Anyone who wants hands-off, AI-powered earnings alerts for US stocks

  How to Set Up
  Get Finnhub API Key:
  Sign up at https://www.finnhub.io and copy your API key. 
  Connect Google Gemini (or OpenAI) Model: 
  Add your Gemini API credentials in n8n for advanced AI formatting and structuring of earnings updates. 
  Set Up Your Telegram Bot: 
  Create a bot with @BotFather, get your API token, and add it to n8n’s Telegram credentials. 
  Obtain your Telegram chat or group ID (use @RawDataBot for this). 
  Customize Date Range (Optional):
  By default, the workflow fetches earnings for the next 3 days, but you can adjust it to any custom window (e.g., today to 7 days in the future).
  Activate the Workflow: 
  Schedule how often you want updates (default: every 3 days; can be as frequent as daily). 
  The workflow will automatically fetch, format, and send the latest US earnings calendar to your Telegram.

  Key Features
  No coding required—fully automated and customizable.
  Handles Telegram’s message length limit by default.
  AI-enhanced formatting for maximum readability and engagement.
  Free to use with Finnhub’s free API tier.

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.telegram","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.outputParserStructured","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"meta":{"instanceId":"d04643ba872bb0fb252ed2c8197858d58cc47dd3c15ff6d08b19addd679e927b","templateCredsSetupCompleted":true},"nodes":[{"id":"8347d92e-7507-4f3f-bcea-4741bf697402","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1060,-480],"parameters":{"content":""},"typeVersion":1},{"id":"0ef0eb9f-d95d-4b4c-81c0-7f6dc1632c87","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-340,-440],"parameters":{"content":""},"typeVersion":1},{"id":"b3bff7e3-3c10-4925-9922-9e73e8c015de","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[180,-500],"parameters":{"content":""},"typeVersion":1},{"id":"04130ead-786e-4776-a2fa-88899308bcbe","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1400,-520],"parameters":{"content":""},"typeVersion":1},{"id":"2f60f7eb-757e-44d1-a126-f22c1307237c","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1840,-520],"parameters":{"content":""},"typeVersion":1},{"id":"f8f58c60-a553-4824-8244-d5cfaf6c4bd0","name":"Set API Key for Finhubb & Dates","type":"n8n-nodes-base.set","position":[-200,-200],"parameters":{},"typeVersion":3.4},{"id":"862a3e63-ebd7-4ecd-a17b-5989c1497890","name":"Dynamically Sets the Date","type":"n8n-nodes-base.code","position":[-560,-200],"parameters":{},"typeVersion":2},{"id":"c27c6bb0-f33d-4db1-bfc4-39b93ee1ef86","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[1020,-180],"parameters":{},"typeVersion":1.9},{"id":"6b9ad8e2-0fbf-47f1-a7d5-2d609150ed50","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1300,180],"parameters":{},"typeVersion":1.2},{"id":"e49a76e9-bcff-4273-8d0d-7104b11d7dbc","name":"Send Upcoming Earning Updates via Telegram","type":"n8n-nodes-base.telegram","position":[1560,-180],"webhookId":"0aec5567-7da9-4d73-bdb9-95783afb9bf5","parameters":{},"typeVersion":1.2},{"id":"01bb4be7-1d34-4e83-85e6-1f446937aa01","name":"Schedule Every 3 Days","type":"n8n-nodes-base.scheduleTrigger","position":[-940,-200],"parameters":{},"typeVersion":1.2},{"id":"a9b76167-29bb-4c87-a678-ef9a96a49fc7","name":"Organizes Input","type":"n8n-nodes-base.code","position":[720,-180],"parameters":{},"typeVersion":2},{"id":"288aebee-82e4-4653-afee-e2b9868422ee","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[860,80],"parameters":{"content":""},"typeVersion":1},{"id":"f3449ad7-d4ff-4176-a27f-aa2f0f508891","name":"Gets Upcoming Earnings","type":"n8n-nodes-base.httpRequest","position":[340,-180],"parameters":{},"typeVersion":4.2},{"id":"0d72b101-65e1-47fa-b14d-a24ff121e9dc","name":"Google Gemini Chat Model (Formats Output)","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[980,180],"parameters":{},"typeVersion":1}],"connections":{"AI Agent":{"main":[[{"node":"Send Upcoming Earning Updates via Telegram","type":"main","index":0}]]},"Organizes Input":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Schedule Every 3 Days":{"main":[[{"node":"Dynamically Sets the Date","type":"main","index":0}]]},"Gets Upcoming Earnings":{"main":[[{"node":"Organizes Input","type":"main","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"AI Agent","type":"ai_outputParser","index":0}]]},"Dynamically Sets the Date":{"main":[[{"node":"Set API Key for Finhubb & Dates","type":"main","index":0}]]},"Set API Key for Finhubb & Dates":{"main":[[{"node":"Gets Upcoming Earnings","type":"main","index":0}]]},"Google Gemini Chat Model (Formats Output)":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Send Upcoming Earning Updates via Telegram":{"main":[[]]}}}


name: The title is very good, clearly conveying the template's purpose while mentioning key technologies
author_name: Falk
author_username: falks-ai-workbench
categories: []
created_at: 2025-06-27T09:16:38.121Z
updated_at: 2025-06-27T09:16:38.121Z
url: https://n8n.io/workflows/5400
scraped_at: 2025-07-06 21:16:30
description:
  How it works
  Collects articles from your preferred RSS feeds. 
  Rates and tags each article using an AI model (e.g., QWEN 14B-s4), filtering for relevance and quality. 
  Summarizes high-rated articles with a language model (e.g., Gemma3 4B) for quick, digestible reading. 
  Checks for duplicates to avoid sending the same article twice. 
  Formats and sends the top articles as an HTML newsletter via Gmail, using OAuth2 authentication. 
  Stores records in a Postgres database, tracking which articles have been sent and their ratings.

  Requirements
  Postgres Account
  AI Models (if you work localy use Ollama)
  In the cloud you have to change Ollama node to your prefered Model Node
  RSS Feed of your desire
  Google Auth2, if you want to use Gmail

  Recommendations
  Use n8n local version for this workflow
  Here are some more informations: https://github.com/falks-ai-workbench/n8n_newsletter

nodes_used:
  ["n8n-nodes-base.postgres","n8n-nodes-base.gmail","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.chainLlm","@n8n/n8n-nodes-langchain.lmChatOllama"]

workflow_json:
  {"id":"D52UhboStgsiDVAm","meta":{"instanceId":"7d384291e91e15297c920da411b4548e6ae4d741e04867a6c78ba5c13a77872b","templateCredsSetupCompleted":true},"name":"Newsletter_Automation","tags":[{"id":"t8g1bzyYGQM5ggH6","name":"Gmail","createdAt":"2025-06-26T18:21:38.576Z","updatedAt":"2025-06-26T18:21:38.576Z"},{"id":"qIGNsK2mwRhrvcaf","name":"Postgres","createdAt":"2025-06-26T18:21:42.917Z","updatedAt":"2025-06-26T18:21:42.917Z"},{"id":"clxg6SupwN47TnEt","name":"RSS","createdAt":"2025-06-26T18:21:48.079Z","updatedAt":"2025-06-26T18:21:48.079Z"},{"id":"cYOPW2d1pSfhhhgG","name":"n8n-local","createdAt":"2025-06-26T18:22:07.129Z","updatedAt":"2025-06-26T18:22:07.129Z"}],"nodes":[{"id":"123481d3-0b79-4714-9a0e-25029d68342e","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[-2000,-540],"parameters":{},"typeVersion":1},{"id":"4ef0bcc5-7dca-41e6-adb5-0ef214c1e775","name":"RSS Read","type":"n8n-nodes-base.rssFeedRead","position":[-1640,-520],"parameters":{"url":"https://www.all-ai.de/index.php?option=com_jmap&view=sitemap&format=rss","options":{}},"typeVersion":1.1},{"id":"ae5263dc-0d4a-433a-9a8a-fc40603cea53","name":"Reduce informations","type":"n8n-nodes-base.set","position":[-1040,-400],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b99f2b41-0485-4100-a5fd-7d3a37134753","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"ed255d97-648b-4ee5-8752-4eb7656d288c","name":"link","type":"string","value":"={{ $json.link }}"},{"id":"9ba890ae-c693-46b9-9082-f342cae52ba4","name":"isoDate","type":"string","value":"={{ $json.isoDate }}"},{"id":"e2837fee-e337-47b9-8fd3-39c8cf1e25fd","name":"content","type":"string","value":"={{ $json.content }}"},{"id":"00c5dbec-9f43-4cf2-b1d4-d14e56cc2075","name":"word_count","type":"string","value":"={{ $json.word_count }}"}]}},"typeVersion":3.4},{"id":"153c2704-db7a-437f-b86e-afcc81fef4f1","name":"Parse Output to JSON","type":"n8n-nodes-base.code","position":[-300,-580],"parameters":{"mode":"runOnceForEachItem","jsCode":"const input = $json.text || $json.data || $json.body || $input.item.json.text;\nconst match = input.match(/{[\\s\\S]*?}/);\n\nif (!match) {\n  throw new Error(\"No JSON object found in the input text.\");\n}\n\nlet parsed;\ntry {\n  parsed = JSON.parse(match[0]);\n} catch (e) {\n  throw new Error(\"Failed to parse JSON: \" + e.message);\n}\n\n// Return a single object (not an array!) in 'Run Once for Each Item' mode\nreturn { json: parsed };\n"},"typeVersion":2},{"id":"e7067f37-1574-4340-85e5-d34c2e441b03","name":"Merge Data LLM+RSS","type":"n8n-nodes-base.merge","position":[-360,-120],"parameters":{"mode":"combine","options":{},"fieldsToMatchString":"title"},"typeVersion":3.2},{"id":"b3647c5b-2d39-4592-bcfa-1a59602e8e78","name":"Rating 7+","type":"n8n-nodes-base.if","position":[-80,-580],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"c0ce5ff3-8686-4c97-a314-26e1163fb80c","operator":{"type":"number","operation":"gte"},"leftValue":"={{ $json.rating }}","rightValue":7}]}},"typeVersion":2.2},{"id":"821473dc-ec1b-4abc-9256-7db14ca6df04","name":"No Operation, do nothing1","type":"n8n-nodes-base.noOp","position":[-300,-400],"parameters":{},"typeVersion":1},{"id":"51469de3-d400-4410-93f9-30bfe3df7a1b","name":"Parse Output JSON","type":"n8n-nodes-base.code","onError":"continueErrorOutput","position":[180,-300],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Try to get the input text from common fields\nconst input =\n  $json.text ||\n  $json.data ||\n  $json.body ||\n  $json.content ||\n  $input.item.json.text ||\n  $input.item.json.content ||\n  \"\";\n\n// Regex to match the first JSON object in the text (non-greedy)\nconst match = input.match(/{[\\s\\S]*?}/);\n\nif (!match) {\n  throw new Error(\"No JSON object found in the input text.\");\n}\n\nlet jsonString = match[0];\n\n// Clean up: Remove unescaped line breaks and fix bad escape sequences\njsonString = jsonString\n  // Replace unescaped line breaks inside JSON strings with \\n\n  .replace(/([^\\\\])\\\\n/g, '$1\\\\\\\\n') // double-escape existing \\n\n  .replace(/\\\\(?![\"\\\\/bfnrtu])/g, '\\\\\\\\') // escape lone backslashes\n  .replace(/[\\r\\n]+/g, ' '); // replace all CR/LF with space\n\nlet parsed;\ntry {\n  parsed = JSON.parse(jsonString);\n} catch (e) {\n  throw new Error(\"Failed to parse JSON: \" + e.message + \"\\nCleaned JSON: \" + jsonString);\n}\n\n// Only return title and summary\nreturn {\n  title: parsed.title,\n  summary: parsed.summary\n};\n"},"retryOnFail":true,"typeVersion":2},{"id":"98a20c9b-c1e8-4f3e-a7e2-0c834f3e040f","name":"Merge Data Summary + rest","type":"n8n-nodes-base.merge","onError":"continueRegularOutput","position":[420,-140],"parameters":{"mode":"combine","options":{},"fieldsToMatchString":"title"},"retryOnFail":true,"typeVersion":3.2},{"id":"2146269b-3af2-4b27-9935-9cb78254466b","name":"No Operation, do nothing2","type":"n8n-nodes-base.noOp","position":[420,-340],"parameters":{},"typeVersion":1},{"id":"f3a0385f-ccc0-4c33-8990-e06d5d602dcc","name":"Format HTML EMail","type":"n8n-nodes-base.code","position":[780,-500],"parameters":{"jsCode":"let html = `<h1>Dein KI-Newsletter</h1>`;\nfor (const item of items) {\n  html += `\n    <h2>${item.json.title}</h2>\n    <hr>\n    <p>${item.json.tags}</p>\n    <p>${item.json.isoDate}</p>\n    <p>${item.json.summary}</p>\n    <p><a href=\"${item.json.link}\">Link zum Thema</a></p>\n    <hr>`;\n}\nreturn [{ json: { newsletter: html } }];\n"},"typeVersion":2},{"id":"040c7f49-3516-43d2-8bff-55b7bf7dbe6d","name":"Send Email Newsletter","type":"n8n-nodes-base.gmail","position":[1020,-500],"webhookId":"9520be00-9060-4953-bf96-b1e0a6301c65","parameters":{"message":"=Hello AI Nerd,\n\nhere is your weekly dose of AI News.\n\n{{ $json.newsletter }}","options":{},"subject":"AI News"},"credentials":{"gmailOAuth2":{"id":"cCb277azCGWyAYtD","name":"Gmail account"}},"typeVersion":2.1},{"id":"cecc8919-8b7b-4a09-9d55-8d62520954b1","name":"Model QWEN3 14B-q4","type":"@n8n/n8n-nodes-langchain.lmChatOllama","position":[-620,-320],"parameters":{"model":"qwen3:14b-q4_K_M","options":{}},"credentials":{"ollamaApi":{"id":"ysLr6PSOVMtUwU7u","name":"Ollama account"}},"typeVersion":1},{"id":"5c8d5c75-30ff-47d3-8f68-c7e237c06584","name":"Model Gemma3 4B","type":"@n8n/n8n-nodes-langchain.lmChatOllama","position":[-180,-20],"parameters":{"model":"gemma3:latest","options":{}},"credentials":{"ollamaApi":{"id":"ysLr6PSOVMtUwU7u","name":"Ollama account"}},"typeVersion":1},{"id":"a3c98eb4-dfe8-4e85-a0ed-2414c98f560f","name":"Rating & Tagging Articles","type":"@n8n/n8n-nodes-langchain.chainLlm","onError":"continueErrorOutput","maxTries":2,"position":[-700,-560],"parameters":{"text":"=You are an AI assistant. Here is an article:\nTitle: {{ $('Reduce informations').item.json.title }}\nContent: {{ $('Reduce informations').item.json.content }}\n\n{{ $json.my_interests }}\n\nTask:\n- Rate how well this article matches any of my interests (1 = not relevant, 10 = extremely relevant).\n- List which interests match.\n- Suggest 2-3 relevant tags.\n\nOutput JSON: \n{\n  \"title\": \"{{ $('Reduce informations').item.json.title }}\"\n  \"rating\": <1-10>,\n  \"matching_interests\": [...], \n  \"tags\": [...]\n}","batching":{},"promptType":"define"},"retryOnFail":true,"typeVersion":1.7,"waitBetweenTries":3000},{"id":"3b144818-7855-4fd4-8d45-05fded3e34c3","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1500,-660],"parameters":{"color":3,"width":560,"height":800,"content":"## Compare Datasets and reduce data\n- Word_count Code node is just for future Dashboards\n\n\n"},"typeVersion":1},{"id":"d2da2a34-c000-4e01-815b-4209d58c6d60","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-720,-660],"parameters":{"color":5,"width":1040,"height":800,"content":"## Rate Articles, summarize. Just keep articles who have a rating 7+\n- Download from Ollama: Model QWEN3 14B-q4 and Model gemma3:latest or choose one of your local models"},"typeVersion":1},{"id":"3ae51830-1f60-4dee-9635-d517797576d5","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[340,-660],"parameters":{"color":4,"width":380,"height":800,"content":"## Save data\n- save the low rated and high rated articles into the table"},"typeVersion":1},{"id":"c72d432b-c327-46b1-8366-7709cd9f8345","name":"Create DB and Schema if not exists","type":"n8n-nodes-base.postgres","position":[-1780,-380],"parameters":{"query":"CREATE SCHEMA IF NOT EXISTS ai_references;\n\nCREATE TABLE IF NOT EXISTS ai_references.n8n_newsletter (\n    id SERIAL PRIMARY KEY,\n    title VARCHAR(255) NOT NULL,\n    word_count INTEGER,\n    import_date TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,\n    pup_date TIMESTAMPTZ,\n    relevant BOOLEAN NOT NULL DEFAULT false,\n    score INTEGER NOT NULL DEFAULT 1 CHECK (score BETWEEN 1 AND 10)\n);","options":{},"operation":"executeQuery"},"credentials":{"postgres":{"id":"nGHKHAU22fwIvYvp","name":"Postgres - Supabase"}},"typeVersion":2.6},{"id":"082655e9-3e98-4f99-bf16-65122d4de2ab","name":"Postgres","type":"n8n-nodes-base.postgres","position":[-1460,-160],"parameters":{"limit":500,"table":{"__rl":true,"mode":"list","value":"n8n_newsletter","cachedResultName":"n8n_newsletter"},"schema":{"__rl":true,"mode":"list","value":"ai_references","cachedResultName":"ai_references"},"options":{},"operation":"select"},"credentials":{"postgres":{"id":"nGHKHAU22fwIvYvp","name":"Postgres - Supabase"}},"typeVersion":2.6},{"id":"2df777fb-9f0e-426d-b545-ef09bdd52aa8","name":"Compare Datasets","type":"n8n-nodes-base.compareDatasets","position":[-1240,-300],"parameters":{"options":{},"mergeByFields":{"values":[{"field1":"title","field2":"title"}]}},"typeVersion":2.3},{"id":"a0b43f07-0bf8-4868-a910-cddf252150f6","name":"Summarize Article","type":"@n8n/n8n-nodes-langchain.chainLlm","onError":"continueErrorOutput","position":[-180,-240],"parameters":{"text":"=You are a helpful summarizer.\n\n{{ $json.content }}\n\nGoal\nWrite a summary of maximum 170 words.\n\nRules\nDo NOT translate the text.\n\nAlways use the same language as the input text.\n\nIf the input is in German, write the summary in German. If the input is in English, write the summary in English. If the input is in another language, use that language for the summary.\n\nDo not add any explanations or comments.\n\nOutput JSON:\n{\n\"title\": \"{{ $json.title }}\",\n\"summary\": \"...\"\n}","batching":{},"promptType":"define"},"retryOnFail":true,"typeVersion":1.7},{"id":"268a046b-5035-4379-833b-dbd1cbcc7963","name":"Count words","type":"n8n-nodes-base.code","position":[-1300,-520],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Zählt die Wörter im content-Feld und fügt das Ergebnis als word_count hinzu\nconst content = $input.item.json.content || \"\";\nconst wordCount = content\n  .replace(/<[^>]*>/g, ' ') // HTML-Tags entfernen, falls vorhanden\n  .trim()\n  .split(/\\s+/)\n  .filter(Boolean)\n  .length;\n\n$input.item.json.word_count = wordCount;\nreturn $input.item;\n"},"typeVersion":2},{"id":"12795406-8265-4e5d-8776-69b7cfa8b007","name":"Merge","type":"n8n-nodes-base.merge","position":[180,-520],"parameters":{"mode":"combine","options":{},"fieldsToMatchString":"title"},"typeVersion":3.2},{"id":"f16b306b-0bf1-4055-8b68-ed526d5f885e","name":"Insert records <7","type":"n8n-nodes-base.postgres","position":[420,-520],"parameters":{"table":{"__rl":true,"mode":"list","value":"n8n_newsletter","cachedResultName":"n8n_newsletter"},"schema":{"__rl":true,"mode":"list","value":"ai_references","cachedResultName":"ai_references"},"columns":{"value":{"score":"={{ $json.rating }}","title":"={{ $json.title }}","pup_date":"={{ $json.isoDate }}","relevant":false,"word_count":"={{ $json.word_count }}"},"schema":[{"id":"id","type":"number","display":true,"removed":true,"required":false,"displayName":"id","defaultMatch":true,"canBeUsedToMatch":true},{"id":"title","type":"string","display":true,"required":true,"displayName":"title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"word_count","type":"number","display":true,"required":false,"displayName":"word_count","defaultMatch":false,"canBeUsedToMatch":true},{"id":"import_date","type":"dateTime","display":true,"removed":true,"required":false,"displayName":"import_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"pup_date","type":"dateTime","display":true,"required":false,"displayName":"pup_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"relevant","type":"boolean","display":true,"removed":false,"required":false,"displayName":"relevant","defaultMatch":false,"canBeUsedToMatch":true},{"id":"score","type":"number","display":true,"removed":false,"required":false,"displayName":"score","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"credentials":{"postgres":{"id":"nGHKHAU22fwIvYvp","name":"Postgres - Supabase"}},"typeVersion":2.6},{"id":"deb81770-297e-45c1-8d8a-711533aea50e","name":"Insert records >=7","type":"n8n-nodes-base.postgres","position":[600,-340],"parameters":{"table":{"__rl":true,"mode":"list","value":"n8n_newsletter","cachedResultName":"n8n_newsletter"},"schema":{"__rl":true,"mode":"list","value":"ai_references","cachedResultName":"ai_references"},"columns":{"value":{"score":"={{ $json.rating }}","title":"={{ $json.title }}","pup_date":"={{ $json.isoDate }}","relevant":true,"word_count":"={{ $json.word_count }}"},"schema":[{"id":"id","type":"number","display":true,"removed":true,"required":false,"displayName":"id","defaultMatch":true,"canBeUsedToMatch":true},{"id":"title","type":"string","display":true,"required":true,"displayName":"title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"word_count","type":"number","display":true,"required":false,"displayName":"word_count","defaultMatch":false,"canBeUsedToMatch":true},{"id":"import_date","type":"dateTime","display":true,"removed":true,"required":false,"displayName":"import_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"pup_date","type":"dateTime","display":true,"required":false,"displayName":"pup_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"relevant","type":"boolean","display":true,"removed":false,"required":false,"displayName":"relevant","defaultMatch":false,"canBeUsedToMatch":true},{"id":"score","type":"number","display":true,"removed":false,"required":false,"displayName":"score","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"credentials":{"postgres":{"id":"nGHKHAU22fwIvYvp","name":"Postgres - Supabase"}},"typeVersion":2.6},{"id":"f67b0231-d8fa-4612-afa1-34a8f36092d2","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","disabled":true,"position":[-2000,-340],"parameters":{"rule":{"interval":[{"daysInterval":3,"triggerAtHour":9}]}},"typeVersion":1.2},{"id":"045e783e-bd35-491f-8a8b-975797ce5628","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[960,-660],"parameters":{"width":200,"height":340,"content":"## Change here\n- Your Email\n- Your Google Auth2"},"typeVersion":1},{"id":"6b3dd7fb-e6d0-4b0a-b90e-aad30f039853","name":"Set your Interests","type":"n8n-nodes-base.set","position":[-880,-560],"parameters":{"options":{},"assignments":{"assignments":[{"id":"02c2b083-72a7-4f0b-9baa-811764f237f6","name":"my_interests","type":"string","value":"=My interests are:\n1. AI Automation\n2. MCP - Model Context Protocol\n3. RAG Retrieval Augmented Generation\n4. European AI Act\n5. No Code or Low Code AI Tools\n\n"}]}},"typeVersion":3.4},{"id":"12ef2f98-75b4-499a-8b9a-5e4be6b29607","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-920,-660],"parameters":{"width":180,"height":260,"content":"## Change here\n- Your Interests"},"typeVersion":1},{"id":"3ce9a754-5ebb-4bb5-a4bf-ea521fd2a3e0","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-1800,-660],"parameters":{"width":280,"height":500,"content":"## Change here\n- Postgres Creds\n- RSS Feed"},"typeVersion":1},{"id":"5abd1d19-9285-4f2f-b183-1dc72509f52a","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-2080,-660],"parameters":{"width":260,"height":500,"content":"## Change here\n- Trigger manually\n- or schedule (deactivated)"},"typeVersion":1},{"id":"3336f355-fe93-4d10-9f1e-3ed750dca1b3","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[740,-660],"parameters":{"width":200,"height":340,"content":"## Change here\n- Style and headline of your Newsletter"},"typeVersion":1}],"active":false,"settings":{"executionOrder":"v1"},"versionId":"83e66c8c-65f6-46b9-baaf-4f787baae331","connections":{"Merge":{"main":[[{"node":"Insert records <7","type":"main","index":0}]]},"Postgres":{"main":[[{"node":"Compare Datasets","type":"main","index":1}]]},"RSS Read":{"main":[[{"node":"Count words","type":"main","index":0}]]},"Rating 7+":{"main":[[{"node":"Merge Data LLM+RSS","type":"main","index":0}],[{"node":"Merge","type":"main","index":0}]]},"Count words":{"main":[[{"node":"Compare Datasets","type":"main","index":0}]]},"Model Gemma3 4B":{"ai_languageModel":[[{"node":"Summarize Article","type":"ai_languageModel","index":0}]]},"Compare Datasets":{"main":[[{"node":"Reduce informations","type":"main","index":0}]]},"Schedule Trigger":{"main":[[]]},"Format HTML EMail":{"main":[[{"node":"Send Email Newsletter","type":"main","index":0}]]},"Parse Output JSON":{"main":[[{"node":"Merge Data Summary + rest","type":"main","index":0}],[{"node":"No Operation, do nothing2","type":"main","index":0}]]},"Summarize Article":{"main":[[{"node":"Parse Output JSON","type":"main","index":0}]]},"Insert records >=7":{"main":[[]]},"Merge Data LLM+RSS":{"main":[[{"node":"Summarize Article","type":"main","index":0},{"node":"Merge Data Summary + rest","type":"main","index":1}]]},"Model QWEN3 14B-q4":{"ai_languageModel":[[{"node":"Rating & Tagging Articles","type":"ai_languageModel","index":0}]]},"Set your Interests":{"main":[[{"node":"Rating & Tagging Articles","type":"main","index":0}]]},"Reduce informations":{"main":[[{"node":"Set your Interests","type":"main","index":0},{"node":"Merge Data LLM+RSS","type":"main","index":1},{"node":"Merge","type":"main","index":1}]]},"Parse Output to JSON":{"main":[[{"node":"Rating 7+","type":"main","index":0}]]},"Merge Data Summary + rest":{"main":[[{"node":"Format HTML EMail","type":"main","index":0},{"node":"Insert records >=7","type":"main","index":0}]]},"Rating & Tagging Articles":{"main":[[{"node":"Parse Output to JSON","type":"main","index":0}],[{"node":"No Operation, do nothing1","type":"main","index":0}]]},"Create DB and Schema if not exists":{"main":[[{"node":"RSS Read","type":"main","index":0},{"node":"Postgres","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Create DB and Schema if not exists","type":"main","index":0}]]}}}


name: Extract Text from Images with Telegram Bot & OCR (Totally Free)
author_name: Rudi Afandi
author_username: fanfanra
categories: []
created_at: 2025-06-27T16:25:27.361Z
updated_at: 2025-06-27T16:25:27.361Z
url: https://n8n.io/workflows/5413
scraped_at: 2025-07-06 21:16:30
description:
  Description
  This n8n workflow enables users to send an image to a Telegram bot and receive the extracted text using Tesseract OCR (via the n8n-nodes-tesseractjs Community Node). It's a quick and straightforward way to convert images into readable text directly through chat.

  How it Works

  The workflow listens for new image messages coming in via the Telegram bot.

  Once an image is received, it downloads the image file from Telegram (which initially arrives as application/octet-stream).

  The image data, now properly identified, is then sent to the Tesseract OCR node to extract the text.

  Finally, the recognized text is sent back as a reply to the Telegram user.

  Setup Steps

  Install Community Node: Ensure you have installed n8n-nodes-tesseractjs in your n8n instance.

  Connect Telegram Bot: Configure the Telegram Trigger node with your Telegram bot.

  Bot Token: Add your Telegram bot token to the Send Message node to send replies.

  Deploy & Test: Activate (deploy) the workflow and send an image to your Telegram bot to test.

nodes_used:
  ["n8n-nodes-base.telegram","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"id":"M4IIL41O16twgImq","meta":{"instanceId":"51be389492931e958da1ec3c4cc03c8044ac06dd89d9465126f3cdb442363742","templateCredsSetupCompleted":true},"name":"Image Reader","tags":[],"nodes":[{"id":"a5d05f82-eb64-4abb-82d8-c2365fea90e8","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[-400,-220],"webhookId":"b957dd8b-8f10-40e9-a041-56b3f7a176b9","parameters":{"updates":["message"],"additionalFields":{"download":true}},"credentials":{"telegramApi":{"id":"coZ5n0FecDwDueBA","name":"Ruri Image Reader"}},"typeVersion":1.2},{"id":"9c8d3318-b6f8-4fe5-8d19-10388087beb7","name":"Clean Input Data","type":"n8n-nodes-base.set","position":[-180,-220],"parameters":{"options":{},"assignments":{"assignments":[{"id":"c8cd1608-2326-401d-9c47-79a6a72f5fc7","name":"chatID","type":"number","value":"={{ $json.message.chat.id }}"},{"id":"0f1a41cb-8630-4e10-b445-f6bbbcf91d33","name":"Image","type":"string","value":"={{ $json[\"message\"][\"photo\"][$json[\"message\"][\"photo\"].length - 1][\"file_id\"] }}"}]}},"typeVersion":3.4},{"id":"ffb53d49-3a5f-4a65-95bd-0788f5005fc7","name":"get file","type":"n8n-nodes-base.telegram","position":[40,-220],"webhookId":"089cb9a3-a383-4e1d-b732-b877833ef538","parameters":{"fileId":"={{ $json.Image.replace(/\\n/g, '') }}","resource":"file"},"credentials":{"telegramApi":{"id":"coZ5n0FecDwDueBA","name":"Ruri Image Reader"}},"typeVersion":1.2},{"id":"e77fb512-c83c-4d18-9ded-13c02abfef45","name":"Telegram","type":"n8n-nodes-base.telegram","position":[1076,-220],"webhookId":"1c599e35-fb24-4cae-9177-61fa09e0b5ca","parameters":{"text":"={{ $json.output }}","chatId":"={{ $('Clean Input Data').item.json.chatID }}","additionalFields":{"appendAttribution":false}},"credentials":{"telegramApi":{"id":"coZ5n0FecDwDueBA","name":"Ruri Image Reader"}},"typeVersion":1.2},{"id":"5badb159-c0e8-4129-8387-409541cdcc20","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[480,-220],"parameters":{"text":"={{ $json.text }}","options":{"systemMessage":"Kamu adalah asisten AI yang dirancang untuk memperjelas teks hasil ekstraksi gambar melalui OCR.\n\nTujuan utamamu adalah membuat hasil OCR menjadi mudah dibaca dan dipahami oleh pengguna dengan cara merapikan format, memperbaiki kesalahan pengenalan karakter, dan menyusun ulang konten agar lebih logis.\n\n🧠 Panduan Perilaku:\nJika teks hasil OCR menyerupai tabel atau data terstruktur, jangan buat ulang dalam bentuk tabel. Sebagai gantinya, ubah menjadi poin-poin ringkas agar lebih mudah dibaca.\n\nFokus pada kejelasan, akurasi, dan format yang ramah pengguna.\n\nPerbaiki masalah umum pada hasil OCR seperti:\n\n- Kata atau kalimat yang terpotong\n- Karakter yang salah dikenali \n𝑐\n𝑜\n𝑛\n𝑡\n𝑜\nℎ\n:\n\"\n0\n\"\n𝑑\n𝑎\n𝑛\n\"\n𝑂\n\"\n,\n\"\n1\n\"\n𝑑\n𝑎\n𝑛\n\"\n𝐼\n\"\ncontoh:\"0\"dan\"O\",\"1\"dan\"I\"\n- Simbol yang salah tempat atau format yang berantakan\n\nWAJIB Perhatikan, karena pesan ini akan dikirim ke Telegram maka hindari penggunaan karakter markdown seperti _, *, \n,\n,, \n,\n,, ~, >, #, +, -, =, |, {, }, ., !"},"promptType":"define"},"typeVersion":2},{"id":"76959791-ff08-4f0f-94c1-55b6f6807a00","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[568,0],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash"},"credentials":{"googlePalmApi":{"id":"fyhkQ6QL2SEoobiQ","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"c807e0eb-566b-46fb-8772-33cb6ab883df","name":"Replace","type":"n8n-nodes-base.code","position":[856,-220],"parameters":{"jsCode":"let text = $json.output;\n\ntext = text\n  .replace(/[_*[\\]()~`>#+\\-=|{}.!]/g, '\\\\$&'); // Escape karakter markdown V2\n\nreturn { json: { output: text } };\n"},"typeVersion":2},{"id":"f2faea2c-3a9c-4275-b92b-5fae4e04f2d1","name":"Tesseract OCR","type":"n8n-nodes-tesseractjs.tesseractNode","position":[260,-220],"parameters":{"options":{}},"typeVersion":1}],"active":true,"settings":{"executionOrder":"v1"},"versionId":"93aeb6de-96dc-47f7-8bc7-218b283234f7","connections":{"Replace":{"main":[[{"node":"Telegram","type":"main","index":0}]]},"AI Agent":{"main":[[{"node":"Replace","type":"main","index":0}]]},"get file":{"main":[[{"node":"Tesseract OCR","type":"main","index":0}]]},"Tesseract OCR":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Clean Input Data":{"main":[[{"node":"get file","type":"main","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Clean Input Data","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]}}}


name: AI Agent to chat with Snowflake database
author_name: Mark Shcherbakov
author_username: lowcodingdev
categories: []
created_at: 2025-06-28T13:33:34.514Z
updated_at: 2025-06-28T13:33:34.514Z
url: https://n8n.io/workflows/5435
scraped_at: 2025-07-06 21:16:30
description:
  Video Guide

  I prepared a detailed guide showcasing the process of building an AI agent that interacts with a Snowflake database using n8n. This setup enables conversational querying, secure execution of SQL queries, and dynamic report generation with rich visualization capabilities.



  Youtube Link

  Who is this for?

  This workflow is designed for developers, data analysts, and business professionals who want to interact with their Snowflake data conversationally. It suits users looking to automate SQL query generation with AI, manage large datasets efficiently, and produce interactive reports without deep technical knowledge.

  What problem does this workflow solve?

  Querying Snowflake databases typically requires SQL proficiency and can lead to heavy token usage if large datasets are sent to AI models directly. This workflow addresses these challenges by:

  Guiding AI to generate accurate SQL queries based on user chat input while referencing live database schema to avoid errors.
  Executing queries safely on Snowflake with proper credential management.
  Aggregating large result sets to reduce token consumption.
  Offering a user-friendly report link with pagination, filtering, charts, and CSV export instead of returning overwhelming raw data.
  Providing an error-resilient environment that prompts regenerations for SQL errors or connectivity issues.

  What this workflow does

  The scenario consists of multiple focused n8n workflows orchestrated for smooth, secure, and scalable interactions:

  Agent Workflow  
     Starts with a chat node and sets the system role as "Snowflake SQL assistant."  
     AI generates SQL after verifying database schema and table definitions to avoid hallucinations.  
     Reinforcement rules ensure schema validation before query creation.

  Data Retrieval Workflow  
     Receives SQL queries from the agent workflow.  
     Executes them against the Snowflake database using user-provided credentials (hostname, account, warehouse, database, schema, username, password).  
     Optionally applies safety checks on SQL to prevent injection attacks.

  Aggregation and Reporting Decision  
     Aggregates returned data into arrays for efficient processing.  
     Applies a threshold (default 100 records) to decide whether to return raw data or generate a dynamic report link.  
     Prepares report links embedding URL-encoded SQL queries to securely invoke a separate report workflow.

  Report Viewing Workflow  
     Triggered via webhook from the report link.  
     Re-executes SQL queries to fetch fresh data.  
     Displays data with pagination, column filtering, and selectable chart visualizations.  
     Supports CSV export and custom HTML layouts for tailored user experience.  
     Provides proper error pages in case of SQL or data issues.

  Schema and Table Definition Retrieval Tools  
     Two helper workflows that fetch the list of tables and column metadata from Snowflake.  
     Require the user to replace placeholders with actual database and data source names.  
     Crucial for AI to maintain accurate understanding of the database structure.

  N8N Workflow

  Preparation  
  Create your Snowflake credentials in n8n with required host and account details, warehouse (e.g., "computer_warehouse"), database, schema, username, and password.  
  Replace placeholder variables in schema retrieval workflows with your actual database and data source names.  
  Verify the credentials by testing the connection; reset passwords if needed.

  Workflow Logic  
  The Agent Workflow listens to user chats, employs system role "Snowflake SQL assistant," and ensures schema validation before generating SQL queries.  
  Generated SQL queries pass to the Data Retrieval Workflow, which executes them against Snowflake securely.  
  Retrieved data is aggregated and evaluated against a configurable threshold to decide between returning raw data or creating a report link.  
  When a report link is generated, the Report Viewing Workflow renders a dynamic interactive HTML-based report webpage, including pagination, filters, charts, and CSV export options.  
  Helper workflows periodically fetch or update the current database schema and table definitions to maintain AI accuracy and prevent hallucinations in SQL generation.  
  Error handling mechanisms provide user-friendly messages both in the agent chat and report pages when issues arise with SQL or connectivity.

  This modular, secure, and extensible setup empowers you to build intelligent AI-driven data interactions with Snowflake through n8n automations and custom reporting.

nodes_used:
  ["n8n-nodes-base.snowflake","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.memoryBufferWindow","@n8n/n8n-nodes-langchain.toolWorkflow"]

workflow_json:
  {"meta":{"instanceId":"6a2a7715680b8313f7cb4676321c5baa46680adfb913072f089f2766f42e43bd","templateCredsSetupCompleted":true},"nodes":[{"id":"695a7e9f-01c6-4290-a085-55099d8db7db","name":"When chat message received","type":"@n8n/n8n-nodes-langchain.chatTrigger","position":[1100,-280],"webhookId":"8cc040be-d37a-4090-b93e-44603371d13a","parameters":{"options":{}},"typeVersion":1.1},{"id":"6971de5a-a520-4f74-a5c4-87039b22a15f","name":"AI Agent1","type":"@n8n/n8n-nodes-langchain.agent","position":[1340,-280],"parameters":{"options":{"systemMessage":"You are Snowflake SQL assistant.\n\nUse tools to retrieve data from Snowflake and answer user.\n\nIMPORTANT Always check database schema and table definition for preparing SQL query."},"hasOutputParser":true},"typeVersion":2},{"id":"f14d403f-a3d1-4535-aaca-767f9258166c","name":"OpenAI Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[1140,-80],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"SphXAX7rlwRLkiox","name":"Test club key"}},"typeVersion":1.2},{"id":"7f57e580-ac48-4926-8dda-5ae581ca7345","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[1260,-80],"parameters":{"sessionKey":"={{ $('When chat message received').item.json.sessionId }}","sessionIdType":"customKey"},"typeVersion":1.3},{"id":"f809bc79-d5ed-466c-82c2-4c298a079f10","name":"DB Schema1","type":"n8n-nodes-base.snowflakeTool","position":[1540,-80],"parameters":{"query":"SELECT table_schema, table_name\nFROM information_schema.tables\nWHERE table_schema = 'TPCH_SF1';","operation":"executeQuery","descriptionType":"manual","toolDescription":"Get list of all tables in database"},"credentials":{"snowflake":{"id":"YWnLSlN2NAjYvAfU","name":"Snowflake account"}},"typeVersion":1},{"id":"68907f64-aa11-4044-b2ba-d7796fff90f4","name":"Get table definition","type":"n8n-nodes-base.snowflakeTool","position":[1660,-80],"parameters":{"query":"SELECT \n    column_name,\n    data_type\n\nFROM \n    SNOWFLAKE_SAMPLE_DATA.information_schema.columns\nWHERE \n    table_name = '{{ $fromAI(\"table_name\") }}'\n    AND table_schema = 'TPCH_SF1'\nORDER BY \n    ordinal_position;\n","operation":"executeQuery","descriptionType":"manual","toolDescription":"Get table definition to find all columns and types."},"credentials":{"snowflake":{"id":"YWnLSlN2NAjYvAfU","name":"Snowflake account"}},"typeVersion":1},{"id":"226b3c2e-7058-476e-a96c-d6cf8bd4f53b","name":"Webhook","type":"n8n-nodes-base.webhook","position":[1000,860],"webhookId":"87893585-d157-468d-a9af-7238784e814c","parameters":{"path":"87893585-d157-468d-a9af-7238784e814c","options":{},"responseMode":"responseNode"},"typeVersion":2},{"id":"f7abd0a8-8aa4-4aa7-ae24-22d40736c67f","name":"Set HTML","type":"n8n-nodes-base.set","onError":"continueErrorOutput","position":[1600,860],"parameters":{"options":{},"assignments":{"assignments":[{"id":"1257d6ca-3c5c-476b-8d26-f8fb84a0c38e","name":"html","type":"string","value":"=<!DOCTYPE html>\n<html>\n<head>\n    <title>Dashboard</title>\n    <style>\n        body { \n            font-family: Arial, sans-serif; \n            padding: 20px;\n            margin: 0;\n        }\n        .container { \n            max-width: 1200px; \n            margin: 0 auto; \n        }\n        table {\n            border-collapse: collapse;\n            width: 100%;\n            margin: 20px 0;\n        }\n        th, td {\n            border: 1px solid #ddd;\n            padding: 8px;\n            text-align: left;\n        }\n        th {\n            background-color: #f2f2f2;\n            cursor: pointer;\n        }\n        th:hover {\n            background-color: #ddd;\n        }\n        .controls {\n            margin: 20px 0;\n            padding: 10px;\n            background: #f8f8f8;\n            border-radius: 4px;\n        }\n        .btn {\n            padding: 8px 16px;\n            margin: 0 5px;\n            cursor: pointer;\n            background: #4CAF50;\n            color: white;\n            border: none;\n            border-radius: 4px;\n        }\n        .btn:hover {\n            background: #45a049;\n        }\n        .tab-container {\n            margin: 20px 0;\n        }\n        .tab-button {\n            padding: 10px 20px;\n            border: none;\n            background: #f2f2f2;\n            cursor: pointer;\n        }\n        .tab-button.active {\n            background: #4CAF50;\n            color: white;\n        }\n        .graph-controls {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n            gap: 15px;\n            margin: 20px 0;\n            padding: 15px;\n            background: #f8f8f8;\n            border-radius: 4px;\n        }\n        .control-group {\n            display: flex;\n            flex-direction: column;\n            gap: 5px;\n        }\n        select, input {\n            padding: 8px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n        }\n        #graphContainer {\n            background: white;\n            padding: 20px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            margin: 20px 0;\n        }\n/* Sorting icons styles */\nth {\n    position: relative;\n    padding-right: 25px; /* Space for sort icon */\n}\nth:after {\n    content: '↕';\n    position: absolute;\n    right: 8px;\n    color: #999;\n}\nth.sort-asc:after {\n    content: '↑';\n    color: #000;\n}\nth.sort-desc:after {\n    content: '↓';\n    color: #000;\n}\n\n/* Pagination styles */\n.pagination {\n    display: flex;\n    gap: 10px;\n    align-items: center;\n    margin: 20px 0;\n    justify-content: center;\n}\n.pagination button {\n    padding: 5px 10px;\n    border: 1px solid #ddd;\n    background: white;\n    cursor: pointer;\n    border-radius: 4px;\n}\n.pagination button:disabled {\n    background: #f5f5f5;\n    cursor: not-allowed;\n    opacity: 0.5;\n}\n.pagination span {\n    padding: 0 10px;\n}\n.page-size {\n    margin-left: 20px;\n}\n.templates-section {\n    grid-column: 1 / -1;\n    padding: 10px;\n    border-bottom: 1px solid #ddd;\n    margin-bottom: 15px;\n}\n\n.template-buttons {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin-top: 10px;\n}\n\n.template-button {\n    padding: 8px 16px;\n    background: #f0f0f0;\n    border: 1px solid #ddd;\n    border-radius: 4px;\n    cursor: pointer;\n    transition: all 0.3s;\n}\n\n.template-button:hover {\n    background: #e0e0e0;\n}\n\n.template-button.active {\n    background: #4CAF50;\n    color: white;\n    border-color: #4CAF50;\n}\n    </style>\n   <!-- React and ReactDOM dependencies -->\n    <script crossorigin src=\"https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js\"></script>\n    <script crossorigin src=\"https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js\"></script>\n    \n\n\n<!-- Add this after other script tags -->\n<script src=\"https://cdn.jsdelivr.net/npm/chart.js\"></script>\n\n</head>\n<body>\n    <div class=\"container\">\n        <h1>Dashboard</h1>\n        \n        <div class=\"tab-container\">\n            <button class=\"tab-button active\" onclick=\"switchTab('table')\">Table View</button>\n            <button class=\"tab-button\" onclick=\"switchTab('graph')\">Graph View</button>\n        </div>\n\n        <!-- Table View -->\n        <div id=\"tableView\">\n            <div class=\"controls\">\n                <input type=\"text\" id=\"filterInput\" placeholder=\"Search...\" />\n                <select id=\"filterColumn\">\n                    <option value=\"all\">All Columns</option>\n                </select>\n                <button class=\"btn\" onclick=\"exportToCSV()\">Export to CSV</button>\n            </div>\n            <div id=\"tableContainer\"></div>\n<div class=\"pagination\">\n    <button onclick=\"previousPage()\" id=\"prevBtn\">Previous</button>\n    <span id=\"pageInfo\">Page 1 of 1</span>\n    <button onclick=\"nextPage()\" id=\"nextBtn\">Next</button>\n    <select id=\"pageSize\" onchange=\"changePageSize()\" class=\"page-size\">\n        <option value=\"5\">5 per page</option>\n        <option value=\"10\" selected>10 per page</option>\n        <option value=\"20\">20 per page</option>\n        <option value=\"50\">50 per page</option>\n    </select>\n</div>\n        </div>\n\n        <!-- Graph View -->\n       <div id=\"graphView\" style=\"display: none;\">\n    <div class=\"graph-controls\">\n        <!-- Add templates section -->\n        <div class=\"templates-section\">\n            <h3>Chart Templates</h3>\n            <div id=\"templateButtons\" class=\"template-buttons\">\n                <!-- Template buttons will be added here dynamically -->\n            </div>\n        </div>\n        \n        <!-- Existing controls -->\n        <div class=\"control-group\">\n            <label>X Axis:</label>\n            <select id=\"xAxis\" onchange=\"updateGraph()\"></select>\n        </div>\n        <div class=\"control-group\">\n            <label>Y Axis:</label>\n            <select id=\"yAxis\" onchange=\"updateGraph()\"></select>\n        </div>\n        <div class=\"control-group\">\n            <label>Group By:</label>\n            <select id=\"groupBy\" onchange=\"updateGraph()\"></select>\n        </div>\n        <div class=\"control-group\">\n            <label>Chart Type:</label>\n            <select id=\"chartType\" onchange=\"updateGraph()\">\n    <option value=\"bar\">Bar Chart</option>\n    <option value=\"line\">Line Chart</option>\n    <option value=\"pie\">Pie Chart</option>\n    <option value=\"doughnut\">Doughnut Chart</option>\n</select>\n        </div>\n<!-- Add this in graph-controls div after other controls -->\n<div class=\"control-group\">\n    <label>Aggregation:</label>\n    <select id=\"aggregation\" onchange=\"updateGraph()\">\n        <option value=\"sum\">Sum</option>\n        <option value=\"average\">Average</option>\n        <option value=\"count\">Count</option>\n        <option value=\"min\">Minimum</option>\n        <option value=\"max\">Maximum</option>\n    </select>\n</div>\n    </div>\n    <div id=\"graphContainer\">\n        <canvas id=\"myChart\"></canvas>\n    </div>\n</div>\n\n    <script>\n        // Sample data - sales transactions\n        const data = {{ JSON.stringify($json.data) }};\n        // Column type definitions for formatting\n        function detectColumnTypes(data) {\n    if (!data || data.length === 0) return {};\n    \n    // Get keys from first data item\n    const firstItem = data[0];\n    const columnTypes = {};\n    \n    // Determine type for each column\n    Object.keys(firstItem).forEach(key => {\n        const value = firstItem[key];\n        let type = 'string'; // default type\n        \n        if (value instanceof Date) {\n            type = 'date';\n        } else if (typeof value === 'number') {\n            type = 'number';\n        } else if (typeof value === 'boolean') {\n            type = 'boolean';\n        } else if (typeof value === 'string') {\n            // Check if string is actually a date\n            const dateCheck = new Date(value);\n            if (!isNaN(dateCheck) && value.includes('-')) {\n                type = 'date';\n            } else {\n                type = 'string';\n            }\n        }\n        \n        columnTypes[key] = type;\n    });\n    \n    return columnTypes;\n}\n\n// Remove the hardcoded columnTypes and replace with:\nlet columnTypes = {};\n\n        let filteredData = [...data];\n        let currentPage = 1;\n        let pageSize = 10;\nlet currentSortColumn = null;\nlet sortAscending = true;\n\n\n\nfunction initializeGraphControls() {\n    const templateContainer = document.getElementById('templateButtons');\n    templateContainer.innerHTML = chartTemplates.map((template, index) => `\n        <button class=\"template-button\" onclick=\"applyTemplate(${index})\">\n            ${template.title}\n        </button>\n    `).join('');\n}\n\n    function initialize() {\n    // Detect column types from data\n    columnTypes = detectColumnTypes(data);\n    console.log('Detected columns:', columnTypes);\n    \n    const columns = Object.keys(columnTypes);\n    \n    // Initialize filter dropdown\n    const filterColumn = document.getElementById('filterColumn');\n    filterColumn.innerHTML = '<option value=\"all\">All Columns</option>';\n    columns.forEach(column => {\n        filterColumn.innerHTML += `<option value=\"${column}\">${column}</option>`;\n    });\n\n    // Initialize graph axis selectors\n    const xAxis = document.getElementById('xAxis');\n    const yAxis = document.getElementById('yAxis');\n    // In the initialize function, add empty option for groupBy\nconst groupBy = document.getElementById('groupBy');\ngroupBy.innerHTML = '<option value=\"\">No Grouping</option>';\ncolumns.forEach(column => {\n    groupBy.innerHTML += `<option value=\"${column}\">${column}</option>`;\n});\n    \n    xAxis.innerHTML = '';\n    yAxis.innerHTML = '';\n    \n    columns.forEach(column => {\n        xAxis.innerHTML += `<option value=\"${column}\">${column}</option>`;\n        yAxis.innerHTML += `<option value=\"${column}\">${column}</option>`;\n        groupBy.innerHTML += `<option value=\"${column}\">${column}</option>`;\n    });\n\n    // Set default Y axis to a numeric column\n    const numericColumns = columns.filter(col => columnTypes[col] === 'number');\n    if (numericColumns.length > 0) {\n        yAxis.value = numericColumns[0];\n    }\n\n    setupEventListeners();\n    refreshTable();\n    initializeGraphControls();\n}\n\n        // Format cell values based on type\n        function formatValue(value, type) {\n            if (value === null || value === undefined) return '';\n            \n            switch (type) {\n                case 'date':\n                    return new Date(value).toLocaleDateString();\n                case 'number':\n                    return value.toLocaleString();\n                case 'boolean':\n                    return value ? 'Yes' : 'No';\n                default:\n                    return value.toString();\n            }\n        }\n\n        // Create and update table\n        function createTable() {\n    const table = document.createElement('table');\n    const thead = document.createElement('thead');\n    const tbody = document.createElement('tbody');\n    \n    // Create header row with sorting indicators\n    const headerRow = document.createElement('tr');\n    Object.keys(columnTypes).forEach(column => {\n        const th = document.createElement('th');\n        th.textContent = column.charAt(0).toUpperCase() + column.slice(1);\n        th.onclick = () => sortTable(column);\n        \n        // Add sorting indicators\n        if (column === currentSortColumn) {\n            th.classList.add(sortAscending ? 'sort-asc' : 'sort-desc');\n        }\n        \n        headerRow.appendChild(th);\n    });\n    thead.appendChild(headerRow);\n    \n    // Apply pagination\n    const startIndex = (currentPage - 1) * pageSize;\n    const endIndex = Math.min(startIndex + pageSize, filteredData.length);\n    const paginatedData = filteredData.slice(startIndex, endIndex);\n    \n    // Create data rows\n    paginatedData.forEach(row => {\n        const tr = document.createElement('tr');\n        Object.entries(columnTypes).forEach(([column, type]) => {\n            const td = document.createElement('td');\n            td.textContent = formatValue(row[column], type);\n            if (type === 'boolean') {\n                td.style.color = row[column] ? 'green' : 'red';\n            }\n            tr.appendChild(td);\n        });\n        tbody.appendChild(tr);\n    });\n    \n    table.appendChild(thead);\n    table.appendChild(tbody);\n    updatePagination();\n    return table;\n}\n\n        // Sort table by column\n        // Replace your existing sortTable function\nfunction sortTable(column) {\n    if (currentSortColumn === column) {\n        sortAscending = !sortAscending;\n    } else {\n        currentSortColumn = column;\n        sortAscending = true;\n    }\n    \n    const type = columnTypes[column];\n    filteredData.sort((a, b) => {\n        const valueA = a[column];\n        const valueB = b[column];\n        \n        let comparison = 0;\n        switch (type) {\n            case 'number':\n                comparison = valueA - valueB;\n                break;\n            case 'date':\n                comparison = new Date(valueA) - new Date(valueB);\n                break;\n            case 'boolean':\n                comparison = valueA === valueB ? 0 : valueA ? -1 : 1;\n                break;\n            default:\n                comparison = valueA.toString().localeCompare(valueB.toString());\n        }\n        return sortAscending ? comparison : -comparison;\n    });\n    \n    refreshTable();\n}\n\n        // Filter data\n        function filterData() {\n            const filterValue = document.getElementById('filterInput').value.toLowerCase();\n            const filterColumn = document.getElementById('filterColumn').value;\n            \n            filteredData = data.filter(row => {\n                if (filterColumn === 'all') {\n                    return Object.values(row).some(value => \n                        value.toString().toLowerCase().includes(filterValue)\n                    );\n                } else {\n                    return row[filterColumn].toString().toLowerCase().includes(filterValue);\n                }\n            });\n            \n            refreshTable();\n            if (document.getElementById('graphView').style.display !== 'none') {\n                updateGraph();\n            }\n        }\n\n        // Update graph\n       function updateGraph() {\n    const xAxis = document.getElementById('xAxis').value;\n    const yAxis = document.getElementById('yAxis').value;\n    const groupBy = document.getElementById('groupBy').value;\n    const chartType = document.getElementById('chartType').value;\n    const aggregation = document.getElementById('aggregation').value;\n    \n    // Prepare data\n    const groupedData = {};\n    filteredData.forEach(row => {\n        const groupKey = groupBy ? row[groupBy] : 'All';\n        if (!groupedData[groupKey]) {\n            groupedData[groupKey] = {};\n        }\n        const xValue = formatValue(row[xAxis], columnTypes[xAxis]);\n        if (!groupedData[groupKey][xValue]) {\n            groupedData[groupKey][xValue] = [];\n        }\n        groupedData[groupKey][xValue].push(parseFloat(row[yAxis]) || 0);\n    });\n\n    // Process data with aggregation\n    const labels = [...new Set(filteredData.map(item => formatValue(item[xAxis], columnTypes[xAxis])))];\n    const datasets = Object.entries(groupedData).map(([key, values]) => ({\n        label: key,\n        data: labels.map(label => {\n            const vals = values[label] || [];\n            switch(aggregation) {\n                case 'sum':\n                    return vals.reduce((a, b) => a + b, 0);\n                case 'average':\n                    return vals.length ? vals.reduce((a, b) => a + b, 0) / vals.length : 0;\n                case 'count':\n                    return vals.length;\n                case 'min':\n                    return vals.length ? Math.min(...vals) : 0;\n                case 'max':\n                    return vals.length ? Math.max(...vals) : 0;\n                default:\n                    return vals.reduce((a, b) => a + b, 0);\n            }\n        })\n    }));\n    // Create chart\n    const ctx = document.getElementById('myChart');\n    if (window.currentChart) {\n        window.currentChart.destroy();\n    }\n    \n   // Update the chart configuration in updateGraph function\nwindow.currentChart = new Chart(ctx, {\n    type: chartType,\n    data: {\n        labels: labels,\n        datasets: datasets.map(dataset => ({\n            ...dataset,\n            // Line chart settings\n            borderWidth: 2,\n            tension: 0,  // Remove curve for straight lines\n            pointRadius: 4,  // Larger points\n            pointHoverRadius: 6,\n            \n            // Bar chart settings\n            barPercentage: 0.8,  // Make bars wider (0-1)\n            categoryPercentage: 0.9,  // Space between bar groups\n            \n            // Colors\n            backgroundColor: dataset.backgroundColor || 'rgba(75, 192, 192, 0.6)',\n            borderColor: dataset.borderColor || 'rgba(75, 192, 192, 1)',\n        }))\n    },\n    options: {\n        responsive: true,\n        plugins: {\n            legend: {\n                position: 'top',\n            }\n        },\n        scales: chartType !== 'pie' && chartType !== 'doughnut' ? {\n            y: {\n                beginAtZero: true,\n                ticks: {\n                    font: {\n                        size: 12\n                    }\n                }\n            },\n            x: {\n                ticks: {\n                    font: {\n                        size: 12\n                    }\n                }\n            }\n        } : undefined,\n        // Pie chart size control\n        layout: {\n            padding: 20\n        },\n        aspectRatio: chartType === 'pie' || chartType === 'doughnut' ? 2 : 1.5,\n    }\n});}\n\n        // Export to CSV\n        function exportToCSV() {\n            const headers = Object.keys(columnTypes);\n            const csv = [\n                headers.join(','),\n                ...filteredData.map(row =>\n                    headers.map(header => {\n                        const value = formatValue(row[header], columnTypes[header]);\n                        return `\"${value.toString().replace(/\"/g, '\"\"')}\"`\n                    }).join(',')\n                )\n            ].join('\\n');\n            \n            const blob = new Blob([csv], { type: 'text/csv' });\n            const url = window.URL.createObjectURL(blob);\n            const a = document.createElement('a');\n            a.href = url;\n            a.download = 'export.csv';\n            a.click();\n        }\n\n        // Switch between table and graph views\n        function switchTab(tab) {\n            document.querySelectorAll('.tab-button').forEach(button => {\n                button.classList.remove('active');\n            });\n            document.querySelector(`[onclick=\"switchTab('${tab}')\"]`).classList.add('active');\n            \n            document.getElementById('tableView').style.display = tab === 'table' ? 'block' : 'none';\n            document.getElementById('graphView').style.display = tab === 'graph' ? 'block' : 'none';\n            \n            if (tab === 'graph') {\n                updateGraph();\n            }\n        }\n\n        // Set up event listeners\n\n        // Set up event listeners\nfunction setupEventListeners() {\n    // Filter input listener\n    document.getElementById('filterInput').addEventListener('input', filterData);\n    document.getElementById('filterColumn').addEventListener('change', filterData);\n    \n    // Graph control listeners\n    document.getElementById('xAxis').addEventListener('change', updateGraph);\n    document.getElementById('yAxis').addEventListener('change', updateGraph);\n    document.getElementById('groupBy').addEventListener('change', updateGraph);\n    document.getElementById('chartType').addEventListener('change', updateGraph);\n    document.getElementById('aggregation').addEventListener('change', updateGraph); // Add this line\n}\n\n        // Refresh table display\n        function refreshTable() {\n            const container = document.getElementById('tableContainer');\n            container.innerHTML = '';\n            container.appendChild(createTable());\n        }\n// Add these pagination functions before initialize()\nfunction updatePagination() {\n    const totalPages = Math.ceil(filteredData.length / pageSize);\n    document.getElementById('pageInfo').textContent = `Page ${currentPage} of ${totalPages}`;\n    document.getElementById('prevBtn').disabled = currentPage === 1;\n    document.getElementById('nextBtn').disabled = currentPage === totalPages || totalPages === 0;\n}\n\nfunction previousPage() {\n    if (currentPage > 1) {\n        currentPage--;\n        refreshTable();\n    }\n}\n\nfunction nextPage() {\n    const totalPages = Math.ceil(filteredData.length / pageSize);\n    if (currentPage < totalPages) {\n        currentPage++;\n        refreshTable();\n    }\n}\n\nfunction changePageSize() {\n    pageSize = parseInt(document.getElementById('pageSize').value);\n    currentPage = 1;\n    refreshTable();\n}\n        // Start the application\n        initialize();\n    </script>\n</body>\n</html>"}]}},"typeVersion":3.4},{"id":"e08d0061-a5b9-452d-aae1-dd06c5e76478","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","position":[2020,860],"parameters":{"options":{},"respondWith":"text","responseBody":"={{ $json.html }}"},"typeVersion":1.1},{"id":"caec4943-2a9e-4c93-b9f0-46c05e1c977b","name":"Snowflake1","type":"n8n-nodes-base.snowflake","onError":"continueErrorOutput","position":[1200,860],"parameters":{"query":"{{ $json.query.sql }}","operation":"executeQuery"},"credentials":{"snowflake":{"id":"YWnLSlN2NAjYvAfU","name":"Snowflake account"}},"retryOnFail":false,"typeVersion":1},{"id":"7bf75ddf-38df-454d-908f-32cbeb785464","name":"Aggregate1","type":"n8n-nodes-base.aggregate","position":[1420,860],"parameters":{"options":{},"aggregate":"aggregateAllItemData"},"typeVersion":1},{"id":"eb82d533-e0a0-4328-a31c-39433cf45740","name":"When Executed by Another Workflow","type":"n8n-nodes-base.executeWorkflowTrigger","position":[1000,320],"parameters":{"workflowInputs":{"values":[{"name":"query"}]}},"typeVersion":1.1},{"id":"3b69b3eb-7a91-43b3-8839-13b5bbdf3203","name":"Retrieve Data","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[1400,-80],"parameters":{"workflowId":{"__rl":true,"mode":"list","value":"kqpZSjy0tzRRY4hH","cachedResultName":"My workflow 41"},"description":"Generate custom SQL queries using knowledge about DB schema and table definitions to provide needed response for user request.\nUse ->> operator to extract JSON data.\n\nSupported functions for big data analysis:\n• GROUP BY – for grouping data\n• SUM() – for summing values\n• AVG() – for calculating averages\n• COUNT() – for counting records\n• MIN() – for finding the minimum value\n• MAX() – for finding the maximum value\n• MEDIAN() – for median calculation\n• STDDEV() – for standard deviation\n• VARIANCE() – for variance calculation\n• PERCENTILE_CONT() – for percentile calculations\n• MODE() – for most frequent value\n• TREND() – for trend analysis over time\n• WINDOW FUNCTIONS – for advanced analytics (e.g., ROW_NUMBER(), RANK(), PARTITION BY)\n\nQuery example:\nSELECT * FROM FILES","workflowInputs":{"value":{"query":"={{ $fromAI(\"sql_query\",\"SQL query\") }}"},"schema":[{"id":"query","type":"string","display":true,"removed":false,"required":false,"displayName":"query","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["query"],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.2},{"id":"8968d722-6b26-42d9-b750-0b13c382f7ab","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[940,120],"parameters":{"width":1140,"height":560,"content":"### Tool\n"},"typeVersion":1},{"id":"33544700-b10f-441a-852c-0f985158cb5c","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[940,720],"parameters":{"width":1360,"height":480,"content":"### Report workflow"},"typeVersion":1},{"id":"d279cb96-4fc5-4554-9363-669aea575926","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[940,-360],"parameters":{"width":900,"height":440,"content":"### Agent"},"typeVersion":1},{"id":"fc341443-ec9c-4005-8b67-dce59e8b4119","name":"Execute SQL","type":"n8n-nodes-base.snowflake","onError":"continueErrorOutput","position":[1200,320],"parameters":{"query":"{{ $json.query }}","operation":"executeQuery"},"credentials":{"snowflake":{"id":"YWnLSlN2NAjYvAfU","name":"Snowflake account"}},"retryOnFail":false,"typeVersion":1},{"id":"935f1932-e803-4daf-89ae-e3ce9f322962","name":"Aggregate Data","type":"n8n-nodes-base.aggregate","position":[1420,260],"parameters":{"options":{},"aggregate":"aggregateAllItemData"},"typeVersion":1},{"id":"1c7362be-e338-4976-8a18-a40f11e01ef1","name":"If Count>100","type":"n8n-nodes-base.if","position":[1600,280],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"5a485a5a-28fb-4914-8fb6-131a159db08d","operator":{"type":"array","operation":"lengthGt","rightType":"number"},"leftValue":"={{ $json.data }}","rightValue":100}]}},"typeVersion":2.2},{"id":"36440a5e-d254-4995-be8e-2e8313b8bc29","name":"Link to Report","type":"n8n-nodes-base.set","position":[1800,200],"parameters":{"mode":"raw","options":{},"jsonOutput":"={\"output\":\"[Link to report](https://n8n.lowcoding.dev/webhook/87893585-d157-468d-a9af-7238784e814c?sql={{ $('When Executed by Another Workflow').item.json.query.urlEncode() }})\"}"},"typeVersion":3.4},{"id":"c581ea63-c210-4df9-b029-f58c1c8da75d","name":"Return Data","type":"n8n-nodes-base.set","position":[1800,360],"parameters":{"mode":"raw","options":{},"jsonOutput":"={{ $json }}"},"typeVersion":3.4},{"id":"4fa89cd3-64d8-40cf-87f1-d604aca9c7eb","name":"Return Error","type":"n8n-nodes-base.set","position":[1600,460],"parameters":{"mode":"raw","options":{},"jsonOutput":"={{ $json }}"},"typeVersion":3.4},{"id":"c67e5a20-e116-4955-bc66-fe8b4384b284","name":"Error page","type":"n8n-nodes-base.set","position":[1800,1000],"parameters":{"options":{},"assignments":{"assignments":[{"id":"1257d6ca-3c5c-476b-8d26-f8fb84a0c38e","name":"html","type":"string","value":"=<!DOCTYPE html>\n<html>\n<head>\n    <title>Error Status</title>\n    <style>\n        body { \n            font-family: Arial, sans-serif; \n            padding: 20px;\n            margin: 0;\n            display: flex;\n            min-height: 100vh;\n            align-items: center;\n            justify-content: center;\n            background-color: #f8f9fa;\n        }\n        .container { \n            max-width: 600px;\n            margin: 0 auto;\n            text-align: center;\n            padding: 40px;\n            background: white;\n            border-radius: 8px;\n            box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n        }\n        .error-icon {\n            font-size: 48px;\n            margin-bottom: 20px;\n            color: #dc3545;\n        }\n        .title {\n            color: #dc3545;\n            margin-bottom: 16px;\n            font-size: 24px;\n        }\n        .message {\n            color: #666;\n            margin-bottom: 24px;\n            font-size: 16px;\n            line-height: 1.5;\n        }\n        .btn {\n            padding: 10px 20px;\n            background: #dc3545;\n            color: white;\n            border: none;\n            border-radius: 4px;\n            cursor: pointer;\n            font-size: 16px;\n            text-decoration: none;\n            display: inline-block;\n            margin: 0 8px;\n        }\n        .btn:hover {\n            background: #c82333;\n        }\n        .btn-secondary {\n            background: #6c757d;\n        }\n        .btn-secondary:hover {\n            background: #5a6268;\n        }\n        .details {\n            margin-top: 20px;\n            padding-top: 20px;\n            border-top: 1px solid #eee;\n            color: #888;\n            font-size: 14px;\n        }\n        .error-code {\n            font-family: monospace;\n            background: #f8f9fa;\n            padding: 8px 16px;\n            border-radius: 4px;\n            display: inline-block;\n            margin: 8px 0;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"error-icon\">⚠️</div>\n        <h1 class=\"title\">Error Occurred</h1>\n        <p class=\"message\">An error occurred while preparing the analysis data.</p>\n        <p class=\"message\">Please try again later or contact support if the problem persists.</p>\n        <div class=\"error-code\">Error Code: HTML_PREP_ERROR</div>\n        <div>\n            <a href=\"javascript:window.close();\" class=\"btn\">Close Window</a>\n            <a href=\"javascript:location.reload();\" class=\"btn btn-secondary\">Try Again</a>\n        </div>\n        <div class=\"details\">\n            <p>Analysis ID: <span id=\"analysisId\"></span></p>\n            <p>Time: <span id=\"errorTime\"></span></p>\n        </div>\n    </div>\n\n    <script>\n        // Get URL parameters\n        const urlParams = new URLSearchParams(window.location.search);\n        const analysisId = urlParams.get('analysis_id');\n        \n        // Update details\n        document.getElementById('analysisId').textContent = analysisId || 'N/A';\n        document.getElementById('errorTime').textContent = new Date().toLocaleString();\n    </script>\n</body>\n</html>"}]}},"typeVersion":3.4},{"id":"f614bdcc-e19a-4048-9b13-2adf8b416e56","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1980,200],"parameters":{"color":5,"height":80,"content":"### Replace webhook address"},"typeVersion":1},{"id":"6ac29201-e714-4d00-b9ca-e2063267dcb3","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1360,60],"parameters":{"color":5,"width":160,"height":80,"content":"### Map this workflow"},"typeVersion":1},{"id":"3955749d-31e0-4dc8-9e39-13c1f3de700d","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1540,60],"parameters":{"color":5,"height":80,"content":"### Replace name of schema and database"},"typeVersion":1},{"id":"b71fbe78-5527-4857-a259-bfa9fc0a0537","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[260,-360],"parameters":{"color":7,"width":636.2128494576581,"height":497.1532689930921,"content":"![5min Logo](https://res.cloudinary.com/de9jgixzm/image/upload/Skool%20Assets/ejm3hqnvhgwpnu2fv92s)\n## AI Agent to chat with Snowflake database with UI\n**Made by [Mark Shcherbakov](https://www.linkedin.com/in/marklowcoding/) from community [5minAI](https://www.skool.com/5minai-pro)**\n\nThis workflow is designed for developers, data analysts, and business professionals who want to interact with their Snowflake data conversationally. It suits users looking to automate SQL query generation with AI, manage large datasets efficiently, and produce interactive reports without deep technical knowledge.\n\n**Preparation**  \n- Create your Snowflake credentials in n8n with required host and account details, warehouse (e.g., \"computer_warehouse\"), database, schema, username, and password.  \n- Replace placeholder variables in schema retrieval workflows with your actual database and data source names.  \n- Verify the credentials by testing the connection; reset passwords if needed.\n\n"},"typeVersion":1},{"id":"a207fdbc-7223-49ed-9798-9d3415634b39","name":"Sticky Note12","type":"n8n-nodes-base.stickyNote","position":[560,160],"parameters":{"color":7,"width":330.5152611046425,"height":240.6839895136402,"content":"### ... or watch set up video [5 min]\n[![Youtube Thumbnail](https://res.cloudinary.com/de9jgixzm/image/upload/nvg4dvgajspjzqudh2wa)](https://youtu.be/r7er-HCRsX4)\n"},"typeVersion":1}],"connections":{"Webhook":{"main":[[{"node":"Snowflake1","type":"main","index":0}]]},"Set HTML":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}],[{"node":"Error page","type":"main","index":0}]]},"AI Agent1":{"main":[[]]},"Aggregate1":{"main":[[{"node":"Set HTML","type":"main","index":0}]]},"DB Schema1":{"ai_tool":[[{"node":"AI Agent1","type":"ai_tool","index":0}]]},"Error page":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}]]},"Snowflake1":{"main":[[{"node":"Aggregate1","type":"main","index":0}],[{"node":"Error page","type":"main","index":0}]]},"Execute SQL":{"main":[[{"node":"Aggregate Data","type":"main","index":0}],[{"node":"Return Error","type":"main","index":0}]]},"If Count>100":{"main":[[{"node":"Link to Report","type":"main","index":0}],[{"node":"Return Data","type":"main","index":0}]]},"Retrieve Data":{"ai_tool":[[{"node":"AI Agent1","type":"ai_tool","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent1","type":"ai_memory","index":0}]]},"Aggregate Data":{"main":[[{"node":"If Count>100","type":"main","index":0}]]},"OpenAI Chat Model1":{"ai_languageModel":[[{"node":"AI Agent1","type":"ai_languageModel","index":0}]]},"Get table definition":{"ai_tool":[[{"node":"AI Agent1","type":"ai_tool","index":0}]]},"When chat message received":{"main":[[{"node":"AI Agent1","type":"main","index":0}]]},"When Executed by Another Workflow":{"main":[[{"node":"Execute SQL","type":"main","index":0}]]}}}


name: Automate a Tally Form: Store with Airtable, Notify via Slack
author_name: Baptiste Fort
author_username: baptistefort
nodes_used: ["n8n-nodes-base.airtable","n8n-nodes-base.gmail"]
categories: []
created_at: 2025-06-28T16:58:08.775Z
updated_at: 2025-06-28T16:58:08.775Z
url: https://n8n.io/workflows/5437
scraped_at: 2025-07-06 21:16:30
description:
  🎯 Workflow Goal

  Still manually checking form responses in your inbox?

  What if every submission landed neatly in Airtable — and you got a clean Slack message instantly?

  That’s exactly what this workflow does.

  No code, no delay — just a smooth automation to keep your team in the loop:

  Tally → Airtable → Slack

  Build an automated flow that:
  receives Tally form submissions,
  cleans up the data into usable fields,
  stores the results in Airtable,
  and automatically notifies a Slack channel.

  Step 1 – Connect Tally to n8n

  What we’re setting up

  A Webhook node in POST mode.

  Technical

  Add a Webhook node.  
  Set it to POST.  
  Copy the generated URL.  
  In Tally → Integrations → Webhooks → paste this URL.  
  Submit a test response on your form to capture a sample structure.

  Step 2 – Clean the data



  After connecting Tally, you now receive raw data inside a fields[] array.

  Let’s convert that into something clean and structured.

  Goal

  Extract key info like Full Name, Email, Phone, etc. into simple keys.

  What we’re doing

  Add a Set node to remap and clean the fields.

  Technical

  Add a Set node right after the Webhook.  
  Add new values (String type) manually:
     Name: Full Name → Value: {{$json"fields"["value"]}}  
     Name: Email → Value: {{$json"fields"["value"]}}  
     Name: Phone → Value: {{$json"fields"["value"]}}  
     (Adapt the indexes based on your form structure.)

  Use the data preview in the Webhook node to check the correct order.

  Output

  You now get clean data like:

  { "Full Name": "Jane Doe",
    "Email": "jane@example.com",
    "Phone": "+123456789" }

  Step 3 – Send to Airtable



  ✅ Once the data is cleaned, let’s store it in Airtable automatically.

  Goal

  Create one new Airtable row for each form submission.

  What we’re setting up

  An Airtable – Create Record node.

  Technical

  Add an Airtable node.  
  Authenticate or connect your API token.  
  Choose the base and table.  
  Map the fields:
     Name: {{$json["Full Name"]}}  
     Email: {{$json["Email"]}}  
     Phone: {{$json["Phone"]}}

  Output

  Each submission creates a clean new row in your Airtable table.

  Step 4 – Add a delay



  ⌛ After saving to Airtable, it’s a good idea to insert a short pause — this prevents actions like Slack messages from stacking too fast.

  Goal

  Wait a few seconds before sending a Slack notification.

  What we’re setting up

  A Wait node for X seconds.

  ✅ Technical
  Add a Wait node.  
  Choose Wait for X minutes.  

  Step 5 – Send a message to Slack



  💬 Now that the record is stored, let’s send a Slack message to notify your team.

  Goal
  Automatically alert your team in Slack when someone fills the form.

  What we’re setting up

  A Slack – Send Message node.

  Technical

  Add a Slack node.  
  Connect your account.  
  Choose the target channel, like #leads.  
  Use this message format:

  New lead received!

  Name: {{$json["Full Name"]}}  

  Email: {{$json["Email"]}}  

  Phone: {{$json["Phone"]}}  


  Output

  Your Slack team is notified instantly, with all lead info in one clean message.

  Workflow Complete

  Your automation now looks like this:  

  Tally → Clean → Airtable → Wait → Slack

  Every submission turns into clean data, gets saved in Airtable, and alerts your team on Slack — fully automated, no extra work.

workflow_json:
  {"id":"csdsQBzjewFU2R9L","meta":{"instanceId":"e95c8554b03e2c16a5c8c44cc7d45f6192b966fba75d5438d1201989ceff13e2","templateCredsSetupCompleted":true},"name":"Automate a Tally Form slack","tags":[],"nodes":[{"id":"209736b4-b77d-445f-a592-67408ad188d5","name":"Edit Fields","type":"n8n-nodes-base.set","position":[1060,1060],"parameters":{"options":{},"assignments":{"assignments":[{"id":"0186e9c9-424c-4ad8-8382-1614cf48c9d1","name":"full_name","type":"string","value":"={{ $json.body.data.fields[0].value }}"},{"id":"e5559efc-1458-48e6-a207-f7fea896e930","name":"company_name","type":"string","value":"={{ $json.body.data.fields[1].value }}"},{"id":"bbc04ed4-a8f7-4778-bfdc-038c637320fa","name":"job_title","type":"string","value":"={{ $json.body.data.fields[2].value }}"},{"id":"8175addd-ef95-45f9-b307-b218d6ede2be","name":"email","type":"string","value":"={{ $json.body.data.fields[3].value }}"},{"id":"f017c0bd-bd5d-4a5e-967f-bb27c514f5ee","name":"phone_number","type":"string","value":"={{ $json.body.data.fields[4].value }}"}]}},"typeVersion":3.4},{"id":"7d8cefdb-3eaf-40b5-b837-429fd219daa8","name":"Wait","type":"n8n-nodes-base.wait","position":[1960,1060],"webhookId":"0401220d-037c-4e73-96ad-8ed99c768d6e","parameters":{},"typeVersion":1.1},{"id":"62227d14-34a0-42f0-986f-cdf88720c60b","name":"Webhook : Tally","type":"n8n-nodes-base.webhook","position":[620,1060],"webhookId":"20bc0a59-b424-454d-9d49-4504e6b29fa2","parameters":{"path":"20bc0a59-b424-454d-9d49-4504e6b29fa2","options":{},"httpMethod":"POST"},"typeVersion":2},{"id":"6038f0a2-0787-4693-88b9-57313d81b526","name":"Airtable : Create a record","type":"n8n-nodes-base.airtable","position":[1600,1060],"parameters":{"base":{"__rl":true,"mode":"list","value":"appPk6zfIQ1EbBq43","cachedResultUrl":"https://airtable.com/appPk6zfIQ1EbBq43","cachedResultName":"Client Requests"},"table":{"__rl":true,"mode":"list","value":"tblLkuoQ9AYsAQ0io","cachedResultUrl":"https://airtable.com/appPk6zfIQ1EbBq43/tblLkuoQ9AYsAQ0io","cachedResultName":"Client Requests"},"columns":{"value":{"Email":"={{ $json.email }}","Full Name":"={{ $json.full_name }}","Job Title":"={{ $json.job_title }}","Company Name":"={{ $json.company_name }}","Phone Number":"={{ $json.phone_number }}"},"schema":[{"id":"Full Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Full Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Company Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Company Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Job Title","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Job Title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Email","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Phone Number","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Phone Number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Submission Date","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Submission Date","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"create"},"credentials":{"airtableTokenApi":{"id":"fbET2GdSoJjK5Idu","name":"Airtable Personal Access Token account"}},"typeVersion":2.1},{"id":"57f2a3bb-b87f-4137-ab7d-ba60f257d74d","name":"GMAIL : Send a message","type":"n8n-nodes-base.gmail","position":[2360,1060],"webhookId":"b01196a3-c7e2-4933-b8ae-bb1e0820f703","parameters":{"sendTo":"={{ $json.fields.Email }}","message":"=<p>Hi {{ $json.fields['Full Name'] }},</p>\n\n<p>Thanks for reaching out! We’ve received your request and our team will get back to you as soon as possible.</p>\n\n<p><strong>Here’s a quick summary:</strong></p>\n<ul>\n\n <li><strong>Company:</strong>{{ $json.fields['Company Name'] }} </li>\n  <li><strong>Job Title:</strong> {{ $json.fields['Job Title'] }}</li>\n\n<p>We’ll be in touch very soon!</p>\n<p>— The Team</p>\n\n","options":{},"subject":"Thanks for reaching out!"},"credentials":{"gmailOAuth2":{"id":"FKD43HaVeVoUXOi0","name":"Gmail account"}},"typeVersion":2.1},{"id":"b3d40a1e-61cf-499f-9ec5-41f05e65237b","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[160,620],"parameters":{"width":200,"height":400,"content":"## 🎯 Workflow Goal\n\n**Still manually checking form responses in your inbox?**\n\n**What if every submission landed neatly in Airtable — and you got a clean Slack message instantly?**\n\nThat’s exactly what this workflow does.\nNo code, no delay — just a smooth automation:\n\n**Tally → Airtable → Slack**"},"typeVersion":1},{"id":"9eccf3c9-5d89-465e-8647-4b3f677b56d2","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[560,0],"parameters":{"color":3,"height":1220,"content":"## 🧩 Step 1 – Connect Tally to n8n\n\n**Let’s start by connecting your Tally form to n8n using a webhook.**\n\nThis will trigger your workflow every time someone submits the form — no manual checking needed.\n\n### 🔧 What we’re setting up\n- A **Webhook** node that receives form responses from Tally.\n\n### ✅ How to set it up\n1. Add a **Webhook** node in n8n.\n2. Set the **HTTP Method** to `POST`.\n3. Copy the webhook URL.\n4. Go to your Tally form settings → **Integrations** → **Webhooks**.\n5. Paste your webhook URL and activate it.\n\nNow every new submission will ping n8n automatically.\n\n### 📦 Output\nThe full form response arrives in `{{$json.fields}}`, as an array of objects like:\n\n```json\n[\n  {\n    \"label\": \"Full Name\",\n    \"value\": \"Jane Doe\"\n  },\n  {\n    \"label\": \"Email\",\n    \"value\": \"jane.doe@example.com\"\n  }\n]"},"typeVersion":1},{"id":"4859c72a-fe22-4e94-b78e-b036cc398acb","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[980,160],"parameters":{"color":6,"width":280,"height":1060,"content":"## 🛠 Step 2 – Clean the Tally response\n\n**Now that Tally sends raw data to n8n, we need to make it usable.**\n\nLet’s transform that messy `fields[]` array into a clean object that Airtable and Slack can read easily.\n\n### 🔧 What we’re setting up\n- A **Set** or **Function** node to restructure the data into readable fields.\n\n### ✅ How to set it up\n1. Add a **Function** node (or use **Set** if you don’t want to write code).\n2. Paste this code inside:\n\n```js\nconst out = {};\nfor (const field of $json.fields) {\n  out[field.label] = field.value;\n}\nreturn [{ json: out }];\n\nThis turns the array into a simple object.\n\n📦 Output\nNow you can use the values easily:\n\n{{$json[\"Full Name\"]}}\n\n{{$json[\"Email\"]}}\n\n{{$json[\"Phone\"]}}\n\nSuper clean, super useful.\n\nyaml\nCopier\nModifier\n"},"typeVersion":1},{"id":"b635a05b-fd2c-46f7-a211-bf90ff379556","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1520,200],"parameters":{"color":2,"width":280,"height":1020,"content":"## 🧱 Step 3 – Send the cleaned data to Airtable\n\n**Now that your Tally response is nice and tidy, it’s time to store it.**\n\nWe’re going to create a new record in your Airtable base using the structured data from Step 2.\n\n### 🔧 What we’re setting up\n- An **Airtable > Create Record** node that saves each submission as a new row.\n\n### ✅ How to set it up\n1. Add an **Airtable node** and choose the **“Create Record”** operation.\n2. Connect your Airtable account.\n3. Select the correct **Base** and **Table**.\n4. Map the cleaned fields to your Airtable columns:\n\n- Name → `{{$json[\"Full Name\"]}}`\n- Email → `{{$json[\"Email\"]}}`\n- Phone → `{{$json[\"Phone\"]}}`\n- Company → `{{$json[\"Company\"]}}`\n- Anything else you need\n\n### 📦 Output\nEach time someone fills out the form, a new Airtable row is created automatically."},"typeVersion":1},{"id":"125c7959-e049-478b-9f3d-b8de998a7754","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1920,320],"parameters":{"color":4,"width":600,"height":900,"content":"## 📬 Step 4 – Send an automatic Slack message\n\n**After storing the data in Airtable, let’s notify your team — instantly.**\n\nWe’ll send a professional Slack message each time someone fills out your Tally form.\n\n### 🔧 What we’re setting up\n- A **Slack > Send a Message** node to post in your chosen channel or send a DM.\n\n### ✅ How to set it up\n1. Add a **Slack node** and choose the **“Send Message”** operation.\n2. Connect your Slack account.\n3. Pick the right **channel** or user.\n4. Customize the message using the cleaned data:\n\n```plaintext\n🎉 New form submission!\n\n👤 Name: {{$json[\"Full Name\"]}}\n📧 Email: {{$json[\"Email\"]}}\n📞 Phone: {{$json[\"Phone\"]}}\n🏢 Company: {{$json[\"Company\"]}}\n(Optional) Use Markdown formatting in your message for extra clarity.\n\n📦 Output\nYou’ll receive a neat Slack message every time — no inbox clutter, no delay.\n\nyaml\nCopier\nModifier\n"},"typeVersion":1},{"id":"ccfd0ac3-6a74-4efe-bf2f-e444a9d5f699","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2600,880],"parameters":{"width":320,"height":340,"content":"## ✅ Step 5 – Workflow complete\n\n**And that’s it!** You’ve just built a full automation that captures Tally form responses, cleans the data, stores it in Airtable, and sends a custom Slack message — all on autopilot.\n\nNo more copy-paste. No more missed submissions.\n\nNow every lead is organized, stored, and shared with your team… instantly.\n"},"typeVersion":1}],"active":false,"settings":{"executionOrder":"v1"},"versionId":"0fe76154-7e4f-4ff0-bc97-7bcffb1f9a4b","connections":{"Wait":{"main":[[{"node":"GMAIL : Send a message","type":"main","index":0}]]},"Edit Fields":{"main":[[{"node":"Airtable : Create a record","type":"main","index":0}]]},"Webhook : Tally":{"main":[[{"node":"Edit Fields","type":"main","index":0}]]},"Airtable : Create a record":{"main":[[{"node":"Wait","type":"main","index":0}]]}}}


name: Google Maps Business Scraper & Lead Enricher with Bright Data & Google Gemini
author_name: Ranjan Dailata
author_username: ranjancse
categories: []
created_at: 2025-06-29T03:29:25.021Z
updated_at: 2025-06-29T03:29:25.021Z
url: https://n8n.io/workflows/5443
scraped_at: 2025-07-06 21:16:30
description:
  Notice
  Community nodes can only be installed on self-hosted instances of n8n.

  Description

  This workflow automates the process of scraping local business data from Google Maps and enriching it using AI to generate lead profiles. It's designed to help sales, marketing, and outreach teams collect high-quality B2B leads from Google Maps and enrich them with contextual insights without manual data entry.

  Overview

  This workflow scrapes business listings from Google Maps, extracts critical information like name, category, phone, address, and website using Bright Data, and passes the results to Google Gemini to generate enriched summaries and lead insights such as company description, potential services offered, and engagement score. The data is then structured and stored in spreadsheets for outreach.

  Tools Used

  n8n: The core automation engine to manage flow and trigger actions.

  Bright Data: Scrapes business information from Google Maps at scale with proxy rotation and CAPTCHA-solving.

  Google Gemini: Enriches the raw scraped data with smart business summaries, categorization, and lead scoring.

  Google Sheets : For storing and acting upon the enriched leads.

  How to Install

  Import the Workflow: Download the .json file and import it into your n8n instance.

  Set Up Bright Data: Insert your Bright Data credentials and configure the Google Maps scraping proxy endpoint.

  Configure Gemini API: Add your Google Gemini API key (or use via Make.com plugin).

  Customize the Inputs: Choose your target location, business category, and number of results per query.

  Choose Storage: Connect to your preferred storage like Google Sheets.

  Test and Deploy: Run a test scrape and enrichment before deploying for bulk runs.

  Use Cases

  Sales Teams: Auto-generate warm B2B lead lists with company summaries and relevance scores.

  Marketing Agencies: Identify local business prospects for SEO, web development, or ads services.

  Freelancers: Find high-potential clients in specific niches or cities.

  Business Consultants: Collect and categorize local businesses for competitive analysis or partnerships.

  Recruitment Firms: Identify and score potential company clients for talent acquisition.

  Connect with Me

  Email: ranjancse@gmail.com

  LinkedIn: https://www.linkedin.com/in/ranjan-dailata/

  Get Bright Data: Bright Data (Supports free workflows with a small commission)

  #n8n #automation #leadscraping #googlemaps #brightdata #leadgen #b2bleads #salesautomation #nocode #leadprospecting #marketingautomation #googlemapsdata #geminiapi #googlegemini #aiworkflow #scrapingworkflow #businessleads #datadrivenoutreach #crm #workflowautomation #salesintelligence #b2bmarketing

nodes_used:
  ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.chainLlm","@n8n/n8n-nodes-langchain.outputParserStructured","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"id":"xFSHqOmnuGuB4QRY","meta":{"instanceId":"885b4fb4a6a9c2cb5621429a7b972df0d05bb724c20ac7dac7171b62f1c7ef40","templateCredsSetupCompleted":true},"name":"Google Maps Business Scraper & Lead Enricher with Bright Data & Google Gemini","tags":[{"id":"Kujft2FOjmOVQAmJ","name":"Engineering","createdAt":"2025-04-09T01:31:00.558Z","updatedAt":"2025-04-09T01:31:00.558Z"},{"id":"ZOwtAMLepQaGW76t","name":"Building Blocks","createdAt":"2025-04-13T15:23:40.462Z","updatedAt":"2025-04-13T15:23:40.462Z"},{"id":"ddPkw7Hg5dZhQu2w","name":"AI","createdAt":"2025-04-13T05:38:08.053Z","updatedAt":"2025-04-13T05:38:08.053Z"}],"nodes":[{"id":"4b4d84f7-dfc4-4b9e-8e43-ce02ac282e3e","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[-320,-20],"parameters":{},"typeVersion":1},{"id":"6a4375de-d7f8-4973-9cce-53aee11765ed","name":"Set input fields","type":"n8n-nodes-base.set","position":[-60,-20],"parameters":{"options":{},"assignments":{"assignments":[{"id":"0ac91db2-9848-40d4-b942-cd7288597ded","name":"url","type":"string","value":"https://www.google.com/maps/search/"},{"id":"7142f0df-3c68-4ce0-8e9b-25101db31312","name":"webhook_notification_url","type":"string","value":"https://webhook.site/c9118da2-1c54-460f-a83a-e5131b7098db"},{"id":"f5b7e10d-bcd8-439c-8e84-ba4af11f2cd2","name":"search","type":"string","value":"dentists+in+texas/?q=dentists+in+texas"},{"id":"3a0bcec2-ec6d-457f-87a5-b73f4d826b2a","name":"zone","type":"string","value":"serp_api1"},{"id":"a9de809f-2026-44bb-a2a9-58495df78bfb","name":"start","type":"string","value":"0"},{"id":"feff2b6f-2897-4135-a09a-e0799a2197ea","name":"num","type":"string","value":"20"}]}},"typeVersion":3.4},{"id":"6205bdfc-5b31-44cd-8b9c-37de800e8a63","name":"Perform Bright Data Web Request","type":"n8n-nodes-base.httpRequest","position":[180,-20],"parameters":{"url":"https://api.brightdata.com/request","method":"POST","options":{},"sendBody":true,"sendHeaders":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"zone","value":"={{ $json.zone }}"},{"name":"url","value":"={{ $json.url }}/{{ $json.search }}"},{"name":"format","value":"raw"}]},"genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"kdbqXuxIR8qIxF7y","name":"Header Auth account"}},"typeVersion":4.2},{"id":"85c38904-c3d8-4ec1-80f3-5d06a12ba53c","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[400,160],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash-exp"},"credentials":{"googlePalmApi":{"id":"YeO7dHZnuGBVQKVZ","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"f53c2c94-5ff7-49e0-a72d-d40b0504b59f","name":"Google Maps Data Extractor","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[400,-20],"parameters":{"text":"=Extract Google Maps content \n\n{{ $json.data }}\n\nMake sure to return the data in JSON","batching":{},"promptType":"define","hasOutputParser":true},"retryOnFail":true,"typeVersion":1.7},{"id":"5b849d5c-da41-489b-b2df-2a6e6c9eee40","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[580,160],"parameters":{"jsonSchemaExample":"[\n      {\n        \"name\": \"Texas City Dental - Dentist in Texas City\",\n        \"entity_id\": [\n          \"9673584215857663405\",\n          \"6574027299904374997\"\n        ],\n        \"details_url\": \"/g/11h7ftffbx\",\n        \"reviews\": 674,\n        \"rating\": 4.8,\n        \"address\": \"3448 Palmer Hwy, Texas City, TX 77590\",\n        \"appointment_link\": \"https://txcitydental.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Dental laboratory\",\n          \"Denture care center\",\n          \"Endodontist\",\n          \"Oral surgeon\",\n          \"Orthodontist\",\n          \"Pediatric dentist\",\n          \"Periodontist\",\n          \"Teeth whitening service\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n      {\n        \"name\": \"Texas Dental\",\n        \"entity_id\": [\n          \"9677148940277542199\",\n          \"15703975205538868636\"\n        ],\n        \"details_url\": \"/g/1tgcmpr0\",\n        \"reviews\": 1354,\n        \"rating\": 4.9,\n        \"address\": \"5132 Village Creek Dr, Plano, TX 75093\",\n        \"appointment_link\": \"https://www.texasdentalpa.com/?utm_source=GBPlisting&utm_medium=organic\",\n        \"category\": [\n          \"Dentist\",\n          \"Cosmetic dentist\",\n          \"Dental implants periodontist\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n      {\n        \"name\": \"North Texas Dental\",\n        \"entity_id\": [\n          \"9677259612218511763\",\n          \"14671019117677462783\"\n        ],\n        \"details_url\": \"/g/1wd3wg17\",\n        \"reviews\": 1623,\n        \"rating\": 4.9,\n        \"address\": \"2515 Masters St, Sherman, TX 75090\",\n        \"appointment_link\": \"https://www.ntdsherman.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Dental implants periodontist\",\n          \"Denture care center\",\n          \"Teeth whitening service\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n      {\n        \"name\": \"6 to 9 Dental Texas\",\n        \"entity_id\": [\n          \"9681711930004589935\",\n          \"14121951165737821532\"\n        ],\n        \"details_url\": \"/g/1ts2_px7\",\n        \"reviews\": 113,\n        \"rating\": 4.9,\n        \"address\": \"2603 SE Military Dr Ste 103, San Antonio, TX 78223\",\n        \"appointment_link\": \"http://www.vphumphrey2dds.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Dental clinic\",\n          \"Dental implants provider\",\n          \"Emergency dental service\",\n          \"Endodontist\",\n          \"Oral surgeon\",\n          \"Prosthodontist\",\n          \"Teeth whitening service\",\n          \"Walk-in clinic\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n       {\n        \"name\": \"Cosmetic Dental Texas\",\n        \"entity_id\": [\n          \"9673942104093032889\",\n          \"6644082296499224433\"\n        ],\n        \"details_url\": \"/g/1ts_6_5b\",\n        \"reviews\": 234,\n        \"rating\": 4.6,\n        \"address\": \"2101 Crawford St STE 103, Houston, TX 77002\",\n        \"appointment_link\": \"https://cosmeticdentaltexas.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Cosmetic dentist\",\n          \"Dental hygienist\",\n          \"Health consultant\",\n          \"Teeth whitening service\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n       {\n        \"name\": \"Natural Dentistry of North Texas\",\n        \"entity_id\": [\n          \"9677855844448877255\",\n          \"6619454455705348065\"\n        ],\n        \"details_url\": \"/g/1w45608g\",\n        \"reviews\": 109,\n        \"rating\": 4.9,\n        \"address\": \"1645 N Town E Blvd #532, Mesquite, TX 75150\",\n        \"appointment_link\": \"https://www.naturaldentistryofnorthtexas.com/?utm_source=local&utm_medium=organic\",\n        \"category\": [\n          \"Dentist\",\n          \"Cosmetic dentist\",\n          \"Dental clinic\",\n          \"Dental implants periodontist\",\n          \"Denture care center\",\n          \"Doctor\",\n          \"Emergency dental service\",\n          \"Orthodontist\",\n          \"Pediatric dentist\",\n          \"Teeth whitening service\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n       {\n        \"name\": \"Heart of Texas Smiles General Cosmetic Dentistry\",\n        \"entity_id\": [\n          \"9681881174741169099\",\n          \"15832460407262855114\"\n        ],\n        \"details_url\": \"/g/1tcvv8l5\",\n        \"reviews\": 1531,\n        \"rating\": 4.9,\n        \"address\": \"117 Burnett Ct, Waco, TX 76712\",\n        \"appointment_link\": \"https://www.wacofamilydental.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Cosmetic dentist\",\n          \"Dental clinic\",\n          \"Dental hygienist\",\n          \"Dental implants provider\",\n          \"Orthodontist\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n       {\n        \"name\": \"Smile 4 Texas Dental Center\",\n        \"entity_id\": [\n          \"9678099339216434095\",\n          \"2187168089587898937\"\n        ],\n        \"details_url\": \"/g/12hn7tnrq\",\n        \"reviews\": 812,\n        \"rating\": 4.9,\n        \"address\": \"1400 Blalock Rd D1, Houston, TX 77055\",\n        \"appointment_link\": \"https://www.smile4texas.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Cosmetic dentist\",\n          \"Dental clinic\",\n          \"Dental hygienist\",\n          \"Dental implants provider\",\n          \"Emergency dental service\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n       {\n        \"name\": \"Dental Center of Texas\",\n        \"entity_id\": [\n          \"9673948559547960793\",\n          \"10154247486966080020\"\n        ],\n        \"details_url\": \"/g/1q665w1n4\",\n        \"reviews\": 155,\n        \"rating\": 4.7,\n        \"address\": \"23922 Cinco Village Center Blvd #100, Katy, TX 77494\",\n        \"appointment_link\": \"http://www.dentalcentertexas.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Dental clinic\",\n          \"Orthodontist\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n       {\n        \"name\": \"Central Texas Family Dental\",\n        \"entity_id\": [\n          \"9674049914126201417\",\n          \"3494220525942607347\"\n        ],\n        \"details_url\": \"/g/1tdvkknl\",\n        \"reviews\": 188,\n        \"rating\": 4.9,\n        \"address\": \"4104 E Stan Schlueter Loop #4, Killeen, TX 76542\",\n        \"appointment_link\": \"https://www.centexdds.com/\",\n        \"category\": [\n          \"Dentist\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n       {\n        \"name\": \"Texas Dentistry and Braces\",\n        \"entity_id\": [\n          \"9727332640569304831\",\n          \"9357406137681505810\"\n        ],\n        \"details_url\": \"/g/1tl8l4rw\",\n        \"reviews\": null,\n        \"rating\": null,\n        \"address\": \"315 N Galloway Ave # A, Mesquite, TX 75149\",\n        \"appointment_link\": \"https://mesquite.txdentistryandbraces.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Cosmetic dentist\",\n          \"Dental clinic\",\n          \"Dental implants provider\",\n          \"Denture care center\",\n          \"Emergency dental service\",\n          \"Orthodontist\",\n          \"Pediatric dentist\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n       {\n        \"name\": \"West Texas Dental Associates\",\n        \"entity_id\": [\n          \"9673946025354891219\",\n          \"2619898000467686041\"\n        ],\n        \"details_url\": \"/g/113fzvfyr\",\n        \"reviews\": 496,\n        \"rating\": 5.0,\n        \"address\": \"3315 64th St STE A, Lubbock, TX 79413\",\n        \"appointment_link\": \"http://www.westtxdental.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Cosmetic dentist\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      },\n      {\n        \"name\": \"Texas Dental Specialists - Dr. Omar Yousuf\",\n        \"entity_id\": [\n          \"9675220924038729639\",\n          \"12674832566120650126\"\n        ],\n        \"details_url\": \"/g/113ddy7s1\",\n        \"reviews\": 296,\n        \"rating\": 4.9,\n        \"address\": \"5940 W Parker Rd STE 103, Plano, TX 75093\",\n        \"appointment_link\": \"https://www.texasdentalspecialists.com/\",\n        \"category\": [\n          \"Dentist\",\n          \"Cosmetic dentist\",\n          \"Dental implants provider\",\n          \"Dental clinic\",\n          \"Emergency dental service\",\n          \"Oral surgeon\"\n        ],\n        \"related_terms\": [\n          \"dentist\",\n          \"cosmetic_dentist\",\n          \"dental_clinic\",\n          \"dental_implants_periodontist\",\n          \"teeth_whitening_service\",\n          \"orthodontist\",\n          \"denture_care_center\",\n          \"pediatric_dentist\"\n        ]\n      }\n    ]"},"typeVersion":1.2},{"id":"8fa11221-0bae-498d-9f29-c6147740909c","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[60,-440],"parameters":{"color":5,"width":440,"height":240,"content":"## LLM Usages\n\nGoogle Gemini LLM is being utilized for the structured data extraction handling."},"typeVersion":1},{"id":"11884d28-95bc-48ea-b1c8-847f33425a8b","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-380,-800],"parameters":{"color":7,"width":400,"height":340,"content":"## Logo\n\n\n![logo](https://images.seeklogo.com/logo-png/43/1/brightdata-logo-png_seeklogo-439974.png)\n"},"typeVersion":1},{"id":"c692962a-4910-46e5-991b-2202b90e7572","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-380,-440],"parameters":{"width":400,"height":240,"content":"## Note\n\nDeals with the Google Maps data extraction by utilizing the Bright Data and Google Gemini LLM for transforming the profile into a structured JSON response.\n\n**Please make sure to set the input fields node with the filtering criteria, Bright Data zone name, Webhook notification URL**\n"},"typeVersion":1},{"id":"7109a239-d8d0-4399-bd7a-1c1eb0d9a333","name":"Create a binary data for Structured Data Extract","type":"n8n-nodes-base.function","position":[1100,-120],"parameters":{"functionCode":"items[0].binary = {\n  data: {\n    data: new Buffer(JSON.stringify(items[0].json, null, 2)).toString('base64')\n  }\n};\nreturn items;"},"typeVersion":1},{"id":"aa031e65-4c46-4ddb-907d-1d9e54e88f68","name":"Write the structured content to disk","type":"n8n-nodes-base.readWriteFile","position":[1340,-120],"parameters":{"options":{},"fileName":"=d:\\GoogleMaps_Response.json","operation":"write"},"typeVersion":1},{"id":"bc02801c-b1f0-4b80-a43e-a2efe9efcc6a","name":"Initiate a Webhook Notification for Structured Data","type":"n8n-nodes-base.httpRequest","position":[1100,80],"parameters":{"url":"={{ $('Set input fields').item.json.webhook_notification_url }}","options":{},"sendBody":true,"bodyParameters":{"parameters":[{"name":"response","value":"={{ $json.output.toJsonString() }}"}]}},"typeVersion":4.2},{"id":"dd2601bf-e0a2-4cfb-a1b3-96b3125d810e","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[760,-240],"parameters":{"color":4,"width":780,"height":740,"content":"## Output Data Handling"},"typeVersion":1},{"id":"362c4677-ea35-43c0-9dad-777bbafacad3","name":"Update Google Sheets for Structured Data","type":"n8n-nodes-base.googleSheets","position":[1100,300],"parameters":{"columns":{"value":{"name":"={{ $json.output[0].name }}","rating":"={{ $json.output[0].rating }}","address":"={{ $json.output[0].address }}","reviews":"={{ $json.output[0].reviews }}","category":"={{ $json.output[0].category.toJsonString() }}","details_url":"={{ $json.output[0].details_url }}","related_terms":"={{ $json.output[0].related_terms.toJsonString() }}","appointment_link":"={{ $json.output[0].appointment_link }}"},"schema":[{"id":"name","type":"string","display":true,"removed":false,"required":false,"displayName":"name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"details_url","type":"string","display":true,"required":false,"displayName":"details_url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"reviews","type":"string","display":true,"required":false,"displayName":"reviews","defaultMatch":false,"canBeUsedToMatch":true},{"id":"rating","type":"string","display":true,"required":false,"displayName":"rating","defaultMatch":false,"canBeUsedToMatch":true},{"id":"address","type":"string","display":true,"required":false,"displayName":"address","defaultMatch":false,"canBeUsedToMatch":true},{"id":"appointment_link","type":"string","display":true,"required":false,"displayName":"appointment_link","defaultMatch":false,"canBeUsedToMatch":true},{"id":"category","type":"string","display":true,"required":false,"displayName":"category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"related_terms","type":"string","display":true,"required":false,"displayName":"related_terms","defaultMatch":false,"canBeUsedToMatch":true},{"id":"entity_id","type":"string","display":true,"removed":false,"required":false,"displayName":"entity_id","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"autoMapInputData","matchingColumns":["name"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1BQ61qiNXdToLm465n-gtJiwdoQGSxua7St_iHAqMi10/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1BQ61qiNXdToLm465n-gtJiwdoQGSxua7St_iHAqMi10","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1BQ61qiNXdToLm465n-gtJiwdoQGSxua7St_iHAqMi10/edit?usp=drivesdk","cachedResultName":"GoogleMaps-LeadGen"}},"credentials":{"googleSheetsOAuth2Api":{"id":"Zjoxh2BUZ6VXGQhA","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"bb25e12c-b61a-40e5-bdd8-80412da4b64b","name":"Code","type":"n8n-nodes-base.code","position":[800,300],"parameters":{"jsCode":"return $input.first().json.output"},"typeVersion":2},{"id":"9830a8f1-02f1-4503-842e-c511937ae60d","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[1100,660],"parameters":{"options":{}},"typeVersion":3},{"id":"bfa9e131-7896-4377-aca5-f2241ae2e155","name":"Search Data Extractor","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[1800,680],"parameters":{"text":"=Extract the Yelp URL and Desc\n\n{{ $json.result.content[0].text }}\n\nMake sure to return the data in JSON","batching":{},"promptType":"define","hasOutputParser":true},"retryOnFail":true,"typeVersion":1.7},{"id":"83af94c4-ef2c-4ccb-b1da-b47062041df7","name":"Google Gemini Chat Model for Google Search","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[1800,860],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash-exp"},"credentials":{"googlePalmApi":{"id":"YeO7dHZnuGBVQKVZ","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"885afe32-d794-41a4-b532-510ea291bd55","name":"Structured Output Parser for Google Search","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1980,860],"parameters":{"schemaType":"manual","inputSchema":"{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"url\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"desc\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"},"typeVersion":1.2},{"id":"1f040a8f-b122-4cae-8ad6-55c953917bc3","name":"Wait","type":"n8n-nodes-base.wait","position":[1300,680],"webhookId":"2f6a2861-e0ff-4265-95bc-143f755d0c76","parameters":{},"typeVersion":1.1},{"id":"076b2f50-fcb0-465f-8953-4e9446d9a70a","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[760,-400],"parameters":{"color":3,"width":440,"height":120,"content":"## Disclaimer\nThis template is only available on n8n self-hosted as it's making use of the community node for MCP Client."},"typeVersion":1},{"id":"3d8eb777-fe62-4473-8a4c-d12c43324e74","name":"MCP Search Client","type":"n8n-nodes-mcp.mcpClient","position":[1540,680],"parameters":{"toolName":"search_engine","operation":"executeTool","toolParameters":"={\n  \"query\": \"{{ $json.name }} in Yelp\"\n} "},"credentials":{"mcpClientApi":{"id":"JtatFSfA2kkwctYa","name":"MCP Client (STDIO) account"}},"typeVersion":1},{"id":"7546160a-fd9f-48c5-b6c0-f8fbf3171b87","name":"MCP Client for Web Scraping","type":"n8n-nodes-mcp.mcpClient","position":[2240,680],"parameters":{"toolName":"scrape_as_markdown","operation":"executeTool","toolParameters":"={\n  \"url\": \"{{ $json.output.url }}\"\n} "},"credentials":{"mcpClientApi":{"id":"JtatFSfA2kkwctYa","name":"MCP Client (STDIO) account"}},"typeVersion":1},{"id":"10f51630-b469-4ae3-ba29-0f1633262e86","name":"Create a binary data for Structured Data Extract for Yelp","type":"n8n-nodes-base.function","position":[2500,680],"parameters":{"functionCode":"items[0].binary = {\n  data: {\n    data: new Buffer(JSON.stringify(items[0].json, null, 2)).toString('base64')\n  }\n};\nreturn items;"},"typeVersion":1},{"id":"142eb53d-be26-4fcc-bab4-3448dbeb96c0","name":"Write the Yelp content to disk","type":"n8n-nodes-base.readWriteFile","position":[2740,680],"parameters":{"options":{},"fileName":"=d:\\Yelp_Response_{{ new Date().toISOString().replace(/[:.]/g, '-')}}.json","operation":"write"},"typeVersion":1},{"id":"626051c8-037d-4dad-a8d2-3268ede2e803","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1040,580],"parameters":{"color":5,"width":1880,"height":440,"content":"## Data Enrichment with Yelp data extraction\n"},"typeVersion":1},{"id":"16b82333-c8df-4614-b1ef-3e58078f61f7","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1620,-240],"parameters":{"color":6,"width":660,"height":260,"content":"## Step 1 : Set the Input Fields\n\nurl : https://www.google.com/maps/search/\nwebhook notification url: https://webhook.site/c9118da2-1c54-460f-a83a-e5131b7098db\nsearch : dentists+in+texas/?q=dentists+in+texas\nzone : serp_api1\nstart : 0\nnum : 20\n"},"typeVersion":1},{"id":"680fec55-f61a-4870-bd01-6308ee0828c0","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[2320,-240],"parameters":{"color":6,"width":660,"height":260,"content":"## Step 2 : Set the Credentials\n\nSet the credentials for \n\n1. Bright Data\n2. Google Gemini "},"typeVersion":1},{"id":"7448179e-4dc2-4665-9986-12aa7d925fb4","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[1620,80],"parameters":{"color":6,"width":660,"height":240,"content":"## Step 3 : Configure or Set the Output Nodes\n\n1. Disk location to persist\n2. Google Sheet"},"typeVersion":1}],"active":false,"settings":{"executionOrder":"v1"},"versionId":"9b2792c7-0797-4d4b-b2a3-d6c05e6d16e7","connections":{"Code":{"main":[[{"node":"Update Google Sheets for Structured Data","type":"main","index":0},{"node":"Loop Over Items","type":"main","index":0}]]},"Wait":{"main":[[{"node":"MCP Search Client","type":"main","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"Wait","type":"main","index":0}]]},"Set input fields":{"main":[[{"node":"Perform Bright Data Web Request","type":"main","index":0}]]},"MCP Search Client":{"main":[[{"node":"Search Data Extractor","type":"main","index":0}]]},"Search Data Extractor":{"main":[[{"node":"MCP Client for Web Scraping","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"Google Maps Data Extractor","type":"ai_languageModel","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Google Maps Data Extractor","type":"ai_outputParser","index":0}]]},"Google Maps Data Extractor":{"main":[[{"node":"Code","type":"main","index":0},{"node":"Create a binary data for Structured Data Extract","type":"main","index":0},{"node":"Initiate a Webhook Notification for Structured Data","type":"main","index":0}]]},"MCP Client for Web Scraping":{"main":[[{"node":"Create a binary data for Structured Data Extract for Yelp","type":"main","index":0}]]},"Write the Yelp content to disk":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Perform Bright Data Web Request":{"main":[[{"node":"Google Maps Data Extractor","type":"main","index":0}]]},"When clicking ‘Test workflow’":{"main":[[{"node":"Set input fields","type":"main","index":0}]]},"Google Gemini Chat Model for Google Search":{"ai_languageModel":[[{"node":"Search Data Extractor","type":"ai_languageModel","index":0}]]},"Structured Output Parser for Google Search":{"ai_outputParser":[[{"node":"Search Data Extractor","type":"ai_outputParser","index":0}]]},"Create a binary data for Structured Data Extract":{"main":[[{"node":"Write the structured content to disk","type":"main","index":0}]]},"Create a binary data for Structured Data Extract for Yelp":{"main":[[{"node":"Write the Yelp content to disk","type":"main","index":0}]]}}}


name: Evaluate tool usage accuracy in multi-agent AI workflows using Evaluation nodes
author_name: Angel Menendez
author_username: djangelic
categories: []
created_at: 2025-07-01T17:12:40.342Z
updated_at: 2025-07-01T17:12:40.342Z
url: https://n8n.io/workflows/5523
scraped_at: 2025-07-06 21:16:30
description:
  Who's it for
  This workflow is ideal for AI developers running multi-agent systems in n8n who need to quantitatively evaluate tool usage behavior. If you're building autonomous agents and want to verify their decisions against ground-truth expectations, this workflow gives you plug-and-play observability.

  What it does
  This template uses n8n's built-in Evaluation Trigger and Evaluation nodes to assess whether an AI agent correctly used all the expected tools. It supports:

  Dataset-driven testing of agent behavior

  Logging actual tools to compare them with the expected tools

  Assigning performance metrics (tool_called = true/false)

  Persisting output back to Google Sheets for further debugging

  The workflow can be triggered by either the chat input or the dataset row evaluation. It routes through a multi-tool agent node powered by the best LLMs. The agent has access to tools such as web search, calculator, vector search, and summarizer tools. The workflow then aims to validate tool use decisions by extracting the intermediate steps from the agent (i.e., action + observation) and comparing the tools that were called with the expected tools. If the tools that were called during the workflow execution match, then it's a pass; otherwise, it's documented as a fail. The evaluation nodes take care of that process. 

  How to set it up
  Connect your Google Sheets OAuth2 credential. Replace the document with your own test dataset.

  Set your desired models and configure the different agent tools, such as the summarizer and vector store. The default vector store used is Qdrant, so the user must create this vector store with a few samples of queries + web search results.

  Run from either the chat trigger or the evaluation trigger to test.

  Requirements
  Google Sheets OAuth2 credential

  OpenRouter / OpenAI credentials for AI agents and embeddings

  Firecrawl and Qdrant credentials for web + vector search

  How to customize
  Edit the Search Agent system message to define tool selection behavior

  Add more metric columns in the Evaluation node for complex scoring

  Add new tool nodes and link them to the agent block

  Swap in your own summarizer

nodes_used:
  ["@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.embeddingsOpenAi","@n8n/n8n-nodes-langchain.toolCalculator","@n8n/n8n-nodes-langchain.toolWorkflow","@n8n/n8n-nodes-langchain.vectorStoreQdrant","@n8n/n8n-nodes-langchain.lmChatOpenRouter","n8n-nodes-base.evaluation"]

workflow_json:
  {"id":"OvYZQiWH2KlJsFbK","meta":{"instanceId":"da13b80f35ed9d16adbf337111fadd798f3c80e989940f27089cab3947e57699","templateCredsSetupCompleted":true},"name":"Multi-Agent Evaluation (eval nodes)","tags":[{"id":"iNuMk76zLx33FnPf","name":"multi-agent","createdAt":"2025-06-18T23:08:04.545Z","updatedAt":"2025-06-18T23:08:04.545Z"},{"id":"shqG88dQ5QVQIPJI","name":"evaluation","createdAt":"2025-06-16T20:21:56.654Z","updatedAt":"2025-06-16T20:21:56.654Z"}],"nodes":[{"id":"8e4721bf-8c21-4de3-ae92-97c627919e1b","name":"Calculator","type":"@n8n/n8n-nodes-langchain.toolCalculator","position":[-420,160],"parameters":{},"typeVersion":1},{"id":"4778f802-0d49-4e47-b153-6a721bec2214","name":"Check if tool called","type":"n8n-nodes-base.set","position":[540,-160],"parameters":{"options":{},"assignments":{"assignments":[{"id":"f31d1137-3262-4d46-979a-e9fc3c24f670","name":"tool_called","type":"boolean","value":"={{ \n  $('When fetching a dataset row').item.json.tools_to_call\n    .split(',').map(t => t.trim())\n    .every(tool => $json.intermediateSteps.some(step => step.action.tool.toLowerCase() === tool)) \n}}"}]}},"typeVersion":3.4},{"id":"fdc479f2-b056-464d-842e-da7cc432cbf7","name":"When chat message received","type":"@n8n/n8n-nodes-langchain.chatTrigger","position":[-760,40],"webhookId":"6fde470e-c42b-4a89-974d-c3d21ab0133b","parameters":{"options":{}},"typeVersion":1.1},{"id":"26ef423b-591f-4a0b-8abc-fdb308c75d3e","name":"Match chat format","type":"n8n-nodes-base.set","position":[-760,-160],"parameters":{"options":{},"assignments":{"assignments":[{"id":"3dec27ca-35df-47a7-9a53-d9b2d0b6c072","name":"chatInput","type":"string","value":"={{ $json.question }}"}]}},"typeVersion":3.4},{"id":"1d0fbac1-fb62-4b10-82c7-98d9b2a473c9","name":"Return chat response","type":"n8n-nodes-base.noOp","position":[536,40],"parameters":{},"typeVersion":1},{"id":"758baf05-8830-4693-9f3a-a370d9fd4dc8","name":"When fetching a dataset row","type":"n8n-nodes-base.evaluationTrigger","position":[-980,-160],"parameters":{"sheetName":{"__rl":true,"mode":"list","value":969651976,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/18F1WIEq1ykZKBO1bWYhC0YxRb2ngTurfsZ7jO6sGhLY/edit#gid=969651976","cachedResultName":"Tool calling"},"documentId":{"__rl":true,"mode":"list","value":"18F1WIEq1ykZKBO1bWYhC0YxRb2ngTurfsZ7jO6sGhLY","cachedResultUrl":"https://docs.google.com/spreadsheets/d/18F1WIEq1ykZKBO1bWYhC0YxRb2ngTurfsZ7jO6sGhLY/edit?usp=drivesdk","cachedResultName":"n8n dataset for evaluation"}},"credentials":{"googleSheetsOAuth2Api":{"id":"jdlVpers9Sa8nBwV","name":"Google Sheets account 4"}},"typeVersion":4.6},{"id":"33900d54-32e0-4883-9ce8-6565db389473","name":"Evaluation","type":"n8n-nodes-base.evaluation","position":[980,-160],"parameters":{"metrics":{"assignments":[{"id":"5855df91-5a74-44f9-b25b-23a111dbd7a1","name":"tool_called","type":"number","value":"={{ $json.tool_called.toNumber() }}"}]},"operation":"setMetrics"},"typeVersion":4.6},{"id":"636b9b56-3ce3-4bc5-9dbd-42b77f2ce3a2","name":"Evaluating?","type":"n8n-nodes-base.evaluation","position":[320,-60],"parameters":{"operation":"checkIfEvaluating"},"typeVersion":4.6},{"id":"174de2c6-787a-4d87-9d0f-a72bc7accc3a","name":"Set Outputs","type":"n8n-nodes-base.evaluation","position":[760,-160],"parameters":{"outputs":{"values":[{"outputName":"actual_tools_called","outputValue":"={{ $('Evaluating?').item.json.intermediateSteps.map(step => step.action.tool.toLowerCase()).join(', ') }}\n"}]},"sheetName":{"__rl":true,"mode":"list","value":969651976,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/18F1WIEq1ykZKBO1bWYhC0YxRb2ngTurfsZ7jO6sGhLY/edit#gid=969651976","cachedResultName":"Tool calling"},"documentId":{"__rl":true,"mode":"list","value":"18F1WIEq1ykZKBO1bWYhC0YxRb2ngTurfsZ7jO6sGhLY","cachedResultUrl":"https://docs.google.com/spreadsheets/d/18F1WIEq1ykZKBO1bWYhC0YxRb2ngTurfsZ7jO6sGhLY/edit?usp=drivesdk","cachedResultName":"n8n dataset for evaluation"}},"credentials":{"googleSheetsOAuth2Api":{"id":"jdlVpers9Sa8nBwV","name":"Google Sheets account 4"}},"typeVersion":4.6},{"id":"38559de2-b143-4806-bd14-15015cf1e947","name":"Search Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-380,-60],"parameters":{"options":{"systemMessage":"=You are a helpful assistant who will have access to a few tools to help with responding to user queries. I am providing some instructions below on how to use the tools. Please follow the instructions carefully.\n\nFirst, check the search_db tool to check whether the query exists. The tool expects a query string. If you use this tool and find relevant information, don't use the websearch tool.\n\nUse the web search tool to search the web for relevant information if you need to. You can ONLY call this tool once. \n\nUse the calculator for math operations or tasks. \n\nUse the summarizer tool to summarize the output. It's required to use this once you have gathered all the information you need.","returnIntermediateSteps":true}},"typeVersion":1.9},{"id":"c2800f49-b091-4327-96c6-2c45782c670e","name":"Summarizer","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[-300,160],"parameters":{"workflowId":{"__rl":true,"mode":"list","value":"fehTbkLtPtlVwDYq","cachedResultName":"Summarizer Agent"},"description":"Call this tool to summarize the outputs. ","workflowInputs":{"value":{"query":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('query', ``, 'string') }}"},"schema":[{"id":"query","type":"string","display":true,"required":false,"displayName":"query","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["query"],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.2},{"id":"fb37524f-9c88-4684-9f46-f558025d5e80","name":"Web search","type":"n8n-nodes-base.httpRequestTool","position":[-180,160],"parameters":{"url":"https://api.firecrawl.dev/v1/search","method":"POST","options":{},"sendBody":true,"sendHeaders":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"query","value":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"},{"name":"limit","value":"={{ \"3\".toNumber() }}"}]},"genericAuthType":"httpBearerAuth","headerParameters":{"parameters":[{"name":"content-type","value":"application/json"}]}},"credentials":{"httpBearerAuth":{"id":"07GVEMqGJn2cdczi","name":"Firecrawl Search"}},"typeVersion":4.2},{"id":"e15e9d58-dd8c-4288-b8fb-d8ef17df44a5","name":"OpenRouter Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[-540,160],"parameters":{"model":"openai/o3","options":{}},"credentials":{"openRouterApi":{"id":"m9IRh1pT1eHIdKoX","name":"OpenRouter account 2"}},"typeVersion":1},{"id":"68b1c2fa-49f9-41d2-8d57-dc89c972d43a","name":"Embeddings OpenAI","type":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","position":[28,360],"parameters":{"options":{}},"credentials":{"openAiApi":{"id":"B67YxZwYEqGQkjNE","name":"OpenAi account 2"}},"typeVersion":1.2},{"id":"090521fb-17f7-466f-8ae4-8f0d351f588a","name":"Search_db","type":"@n8n/n8n-nodes-langchain.vectorStoreQdrant","position":[-60,160],"parameters":{"mode":"retrieve-as-tool","options":{},"toolDescription":"Retrievel relevant results","qdrantCollection":{"__rl":true,"mode":"list","value":"search_queries","cachedResultName":"search_queries"}},"credentials":{"qdrantApi":{"id":"6pyKp1GM03XYT1IV","name":"QdrantApi account"}},"typeVersion":1.3}],"active":false,"settings":{"executionOrder":"v1"},"versionId":"4929985d-2b28-493e-901b-0a1c4a87fc12","connections":{"Search_db":{"ai_tool":[[{"node":"Search Agent","type":"ai_tool","index":0}]]},"Calculator":{"ai_tool":[[{"node":"Search Agent","type":"ai_tool","index":0}]]},"Summarizer":{"ai_tool":[[{"node":"Search Agent","type":"ai_tool","index":0}]]},"Web search":{"ai_tool":[[{"node":"Search Agent","type":"ai_tool","index":0}]]},"Evaluating?":{"main":[[{"node":"Check if tool called","type":"main","index":0}],[{"node":"Return chat response","type":"main","index":0}]]},"Set Outputs":{"main":[[{"node":"Evaluation","type":"main","index":0}]]},"Search Agent":{"main":[[{"node":"Evaluating?","type":"main","index":0}]]},"Embeddings OpenAI":{"ai_embedding":[[{"node":"Search_db","type":"ai_embedding","index":0}]]},"Match chat format":{"main":[[{"node":"Search Agent","type":"main","index":0}]]},"Check if tool called":{"main":[[{"node":"Set Outputs","type":"main","index":0}]]},"OpenRouter Chat Model":{"ai_languageModel":[[{"node":"Search Agent","type":"ai_languageModel","index":0}]]},"When chat message received":{"main":[[{"node":"Search Agent","type":"main","index":0}]]},"When fetching a dataset row":{"main":[[{"node":"Match chat format","type":"main","index":0}]]}}}


name: Free AI Image Generator - n8n Automation Workflow with Gemini/ChatGPT
author_name: Agent Circle
author_username: agentcircle
categories: []
created_at: 2025-07-03T06:57:15.342Z
updated_at: 2025-07-03T06:57:15.342Z
url: https://n8n.io/workflows/5626
scraped_at: 2025-07-06 21:16:30
description:
  This n8n template demonstrates how to use AI to generate custom images from scratch - fully automated, prompt-driven, and ready to deploy at scale.

  Use cases are many: You can use it for marketing visuals, character art, digital posters, storyboards, or even daily image generation for your personal purposes.

  How It Works
  The flow is triggered by a chat message in N8N or via Telegram. The default image size is 1080 x 1920 pixels. To use a different size, update the values in the “Fields - Set Values” node before triggering the workflow.
  The input is parsed into a clean, structured prompt using a multi-step transformation process.
  Our AI Agent sends the final prompt to Google Gemini’s image model for generation (you can also integrate with OpenAI or other chat models).
  The raw image data created by the AI Agent will be run through a number of codes to make sure it's feasible for your preview if needed and downloading.
  Then, we use an HTTP node to fetch the result so you can preview the image.
  You can send it back to the chat message in N8N or Telegram, or save it locally to your disk.

  How To Use
  Download the workflow package.
  Import the package into your N8N interface.
  Set up the credentials in the following nodes for tool access and usability: "Telegram Trigger"; "AI Agent - Create Image From Prompt"; "Telegram Response" or "Save Image To Disk" (based on your wish).
  Activate the "Telegram Response" OR "Save Image To Disk" node to specify where you want to save your image later.
  Open the chat interface (via N8N or Telegram).
  Type your image prompt or detailed descriptions and send.
  Wait for the process to run and finish in a few seconds.
  Check the result in your desired saving location.

  Requirements
  Google Gemini account with image generation access.
  Telegram bot access and chat setup (optional).
  Connection to local storage (optional).

  How To Customize
  We’re setting the default image size to 1080 x 1920 pixels and the default image model to "flux". You can customize both of these values in the “Fields – Set Values” node. Supported image model options include: "flux", "kontext", "turbo", and "gptimage".
  In the “AI Agent – Create Image From Prompt” node, you can also change the AI chat model. By default, it uses Google Gemini, but you can easily replace it with OpenAI ChatGPT, Microsoft AI Copilot, or any other compatible provider.

  Need Help?
  Join our community on different platforms for support, inspiration and tips from others.

  Website: https://www.agentcircle.ai/
  Etsy: https://www.etsy.com/shop/AgentCircle
  Gumroad: http://agentcircle.gumroad.com/
  Discord Global: https://discord.com/invite/jySQ2PNm
  FB Page Global: https://www.facebook.com/agentcircle/
  FB Group Global: https://www.facebook.com/groups/aiagentcircle/
  X: https://x.com/agent_circle
  YouTube: https://www.youtube.com/@agentcircle
  LinkedIn: https://www.linkedin.com/company/agentcircle

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.telegram","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"id":"cmncRJ2rlecEwZxU","meta":{"instanceId":"ed6d846a2fce1f660ede2e7da800724cca01dc3d0685524a3c917881b7cfcfe9"},"name":"[Agent Circle's N8N Workflow] Automated AI Image Creator","tags":[],"nodes":[{"id":"d5d1fe1b-f053-4162-adf4-5b52b409942d","name":"Fields - Set Values","type":"n8n-nodes-base.set","position":[240,100],"parameters":{"options":{},"assignments":{"assignments":[{"id":"4e04fec4-441e-45f7-acea-0017a4b5c104","name":"model","type":"string","value":"flux"},{"id":"aa80cd68-1c82-4032-b1d7-e098856eec38","name":"width","type":"string","value":"1080"},{"id":"da6d305f-aece-49bd-ae02-52df59915c60","name":"height","type":"string","value":"1920"}]}},"typeVersion":3.4},{"id":"e108c56f-b7fb-4818-aed5-c55c59b81516","name":"When chat message received","type":"@n8n/n8n-nodes-langchain.chatTrigger","position":[20,200],"webhookId":"5b347b5d-8f35-45b3-a499-de95153088f0","parameters":{"options":{}},"typeVersion":1.1},{"id":"7565ff7c-cfe7-4157-953b-74c1e66d659e","name":"Code - Clean Json","type":"n8n-nodes-base.code","position":[980,100],"parameters":{"jsCode":"function cleanAndExtractJSON(response) {\n    try {\n        const result = {\n            image_prompt: []\n        };\n\n        const lines = response.split('\\n');\n        let currentPrompt = '';\n\n        for (const line of lines) {\n            if (line.includes('\"prompt\":')) {\n                if (currentPrompt) {\n                    result.image_prompt.push(currentPrompt.trim());\n                }\n                currentPrompt = line.split('\"prompt\":')[1].trim();\n            }\n        }\n\n        if (currentPrompt) {\n            result.image_prompt.push(currentPrompt.trim());\n        }\n\n        return { json: result };\n        \n    } catch (error) {\n        return { \n            json: {\n                image_prompt: []\n            }\n        };\n    }\n}\n\nconst response = $input.first().json.output;\nreturn cleanAndExtractJSON(response);"},"executeOnce":false,"typeVersion":2,"alwaysOutputData":true},{"id":"8e33813d-bd34-46b9-91c8-89dac7f28add","name":"Code - Get Prompt","type":"n8n-nodes-base.code","position":[1160,100],"parameters":{"jsCode":"return $input.first().json.image_prompt.map(prompt => ({\n  json: {\n    body: {\n      prompt: prompt,\n  \"image_size\": {\n    \"width\": $('Fields - Set Values').first().json.width,\n    \"height\": $('Fields - Set Values').first().json.height\n  },\n  \"num_inference_steps\": 12,\n  \"guidance_scale\": 3.5,\n  \"num_images\": 1,\n  \"enable_safety_checker\": true,\n}\n    }\n  }\n));"},"typeVersion":2,"alwaysOutputData":true},{"id":"fba88baa-70e8-452c-b44e-d1685df0eb7d","name":"HTTP Request - Create Image","type":"n8n-nodes-base.httpRequest","position":[1600,100],"parameters":{"url":"=https://image.pollinations.ai/prompt/ {{ $('Code - Get Prompt').item.json.body.prompt }}","options":{},"jsonQuery":"={\n  \"width\": {{ $('Fields - Set Values').item.json.width }},\n  \"height\": {{ $('Fields - Set Values').item.json.height }},\n  \"model\": \"{{ $('Fields - Set Values').item.json.model }}\",\n  \"seed\": 42,\n  \"nologo\": true\n}","sendQuery":true,"sendHeaders":true,"specifyQuery":"json","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"},{"name":"Accept","value":"application/json"}]}},"retryOnFail":true,"typeVersion":4.2,"alwaysOutputData":true,"waitBetweenTries":5000},{"id":"25617f21-8d05-4ca2-9c16-5cd97e369bdb","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","disabled":true,"position":[20,0],"webhookId":"ff17baeb-3182-41c4-b60a-e6159b02023b","parameters":{"updates":["message"],"additionalFields":{}},"typeVersion":1.2},{"id":"de666684-e743-40ef-b604-1cff33b107de","name":"Code - Set Filename","type":"n8n-nodes-base.code","position":[1320,100],"parameters":{"jsCode":"for (let i = 0; i < items.length; i++) {\n  items[i].json.fileName = `images_${(i + 1).toString().padStart(3, '0')}.png`;\n}\nreturn items;"},"typeVersion":2},{"id":"e04c2a46-a670-4042-88d1-79207731c864","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[540,300],"parameters":{"options":{"topK":40,"topP":1,"temperature":0.5,"safetySettings":{"values":[{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"}]},"maxOutputTokens":65536},"modelName":"models/gemini-2.0-flash"},"credentials":{"googlePalmApi":{"id":"AlDwotqhFT4EfJXQ","name":"Google Gemini(PaLM) Api - toan.ngo"}},"typeVersion":1},{"id":"d2d0e95d-797e-473c-a70f-d8c4cccd32af","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-680,-760],"parameters":{"width":520,"height":1480,"content":"## [Agent Circle's N8N Workflow] Automated AI Image Creator - Try It Out!\n\n**This n8n template demonstrates how to use AI to generate custom images from scratch - fully automated, prompt-driven, and ready to deploy at scale.**\n\nUse cases are many: You can use it for marketing visuals, character art, digital posters, storyboards, or even daily image generation for your personal purposes.\n\n## How It Works\n- The flow is triggered by a chat message in N8N or via Telegram. The default image size is 1080 x 1920 pixels. To use a different size, update the values in the **“Fields - Set Values”** node before triggering the workflow.\n- The input is parsed into a clean, structured prompt using a multi-step transformation process.\n- Our AI Agent sends the final prompt to Google Gemini’s image model for generation (you can also integrate with OpenAI or other chat models).\n- The raw image data created by the AI Agent will be run through a number of codes to make sure it's feasible for your preview if needed and downloading.\n- Then, we use an HTTP node to fetch the result so you can preview the image.\n- You can send it back to the chat message in N8N or Telegram, or save it locally to your disk.\n\n## How To Use\n- Download the workflow package.\n- Import the package into your N8N interface.\n- Set up the credentials in the following nodes for tool access and usability: **\"Telegram Trigger\"**; **\"AI Agent - Create Image From Prompt\"**; **\"Telegram Response\"** or **\"Save Image To Disk\"** (based on your wish).\n- Activate the **\"Telegram Response\"** OR **\"Save Image To Disk\"** node to specify where you want to save your image later.\n- Open the chat interface (via N8N or Telegram).\n- Type your image prompt or detailed descriptions and send.\n- Wait for the process to run and finish in a few seconds.\n- Check the result in your desired saving location.\n\n## Requirements\n- Google Gemini account with image generation access.\n- Telegram bot access and chat setup (optional).\n- Connection to local storage (optional).\n\n## How To Customize\n- We’re setting the default image size to 1080 x 1920 pixels and the default image model to \"flux\". You can customize both of these values in the **“Fields – Set Values”** node. Supported image model options include: \"flux\", \"kontext\", \"turbo\", and \"gptimage\".\n- In the **“AI Agent – Create Image From Prompt”** node, you can also change the AI chat model. By default, it uses Google Gemini, but you can easily replace it with OpenAI ChatGPT, Microsoft AI Copilot, or any other compatible provider.\n\n## Need Help?\nJoin our community on different platforms for support, inspiration and tips from others.\n\nWebsite: https://www.agentcircle.ai/\nEtsy: https://www.etsy.com/shop/AgentCircle\nGumroad: http://agentcircle.gumroad.com/\nDiscord Global: https://discord.com/invite/jySQ2PNm\nFB Page Global: https://www.facebook.com/agentcircle/\nFB Group Global: https://www.facebook.com/groups/aiagentcircle/\nX: https://x.com/agent_circle\nYouTube: https://www.youtube.com/@agentcircle\nLinkedIn: https://www.linkedin.com/company/agentcircle"},"typeVersion":1},{"id":"cb6fb57a-e3c1-45ff-9b81-4a2152f397fc","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-60,-200],"parameters":{"color":7,"width":440,"height":620,"content":"## **1. Get The Inputs**\nWe’ll take your image idea from the text you send in the chat, along with any settings like image size or style. This information is parsed and prepared for the image generation step.\n\n"},"typeVersion":1},{"id":"876439a4-dbfe-4394-96d7-8f6c8a63778d","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[460,-200],"parameters":{"color":7,"width":420,"height":620,"content":"## **2. Use Google Gemini's Image Model To Generate The Image**\nYour prompt and settings are sent to Google Gemini’s Image Generation Model.\nPrefer a different model? You can easily swap in alternatives like OpenAI ChatGPT or Microsoft Copilot.\n\n"},"typeVersion":1},{"id":"ac07f44c-c881-4d80-bd65-a8aa0ce39375","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1540,-200],"parameters":{"color":7,"width":540,"height":620,"content":"## **4. Preview And Save The Image**\nOnce your image is ready in a downloadable format, you’ll be able to preview it. If you're happy with the result, you can save it in one of two ways by activating either of them before running the workflow:\n- As a reply in Telegram chat\n- To your local storage (disk)\n\n\n\n"},"typeVersion":1},{"id":"fdd981c2-2659-4a31-b37f-b5c4cd51ee3c","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[940,-200],"parameters":{"color":7,"width":520,"height":620,"content":"## **3. Prepare The Final Image Feasible For Preview And Saving**\nThis stage helps to clean up the raw output from the AI Agent for your image request and format it into a complete, ready-to-view and downloadable format. \n"},"typeVersion":1},{"id":"3a150703-2a7f-4255-9da0-6a15c005290c","name":"AI Agent - Create Image From Prompt","type":"@n8n/n8n-nodes-langchain.agent","position":[540,100],"parameters":{"text":"={{ $('When chat message received').item.json.chatInput }}","options":{"systemMessage":"=You are an AI image‑prompt creation expert. Please create a post using the following JSON format:\nAI Image Generation Prompt Guidelines:\nObjective\nCreate highly realistic, high‐quality images\nEnsure the image content faithfully conveys the spirit of the original text\nIntegrate short text (10–20 characters) naturally into the image\nMaintain consistency and professionalism\n\nStandard Prompt Structure\n[Main Scene] | [Key Elements] | [Text Integration] | [Lighting & Atmosphere] | [Technical Parameters] | [Style Parameters]\n\nComponent Breakdown\n1. Main Scene (Weight ::8)\nDescribe the primary setting in line with the content.\nExamples:\nTech news: “modern tech office setting, minimalist workspace”\nEconomy news: “professional financial district, corporate environment”\nEducation news: “modern classroom, advanced learning environment”\n\n2. Key Elements (Weight ::8)\nList the main visual elements required.\nExamples:\n“large HD display showing text ‘AI Ethics’ in modern typography”\n“professional people in business attire discussing around interactive screen”\n“detailed infographic elements floating in augmented reality style”\n\n3. Text Integration (Weight ::7)\nHow to display text within the image:\ntext elements | elegant typography, clear readable text, integrated naturally into scene ::7\n\n4. Lighting & Atmosphere (Weight ::7)\nlighting | cinematic dramatic lighting, natural ambient light, professional studio setup ::7\nbackground | depth of field blur, clean professional environment ::6\n\n5. Technical Parameters\nparameters | 8k resolution, hyperrealistic, photorealistic quality, octane render, cinematic composition --ar 16:9\nsettings | sharp focus, high detail, professional photography --s 1000 --q 2\nComplete Examples\nExample 1: AI Ethics News\nprofessional tech conference room | large display showing \"AI Ethics Now\" in modern typography, group of diverse executives in discussion ::8 | clean modern workspace, glass walls, tech atmosphere ::7 | cinematic lighting, natural window light ::7 | 8k resolution, hyperrealistic quality, octane render --ar 16:9 --s 1000 --q 2\nExample 2: Financial Market News\nmodern stock exchange environment | giant LED wall showing \"Market Alert\" in bold typography, professional traders in action ::8 | dynamic financial data visualization, sleek modern interior ::7 | dramatic lighting, blue-tinted atmosphere ::7 | 8k resolution, photorealistic quality --ar 16:9 --s 1000 --q 2\n\nAdditional Parameters\n--chaos [0–100]: Adjust randomness\n--stylize [0–1000]: Degree of stylization\n--seed [number]: Ensure consistency across generations\n--niji: Optimized for Asian‐style aesthetics\n--v 5.2: Use the latest model version\n\nImportant Notes\nText in Image\nKeep it short and legible\nUse professional fonts\nIntegrate naturally into the scene\n\nComposition\nFollow the rule of thirds\nEnsure a clear focal point\nBalance text and imagery\n\nColor\nMatch a professional tone\nProvide sufficient contrast for readability\nMaintain visual consistency\n\nTechnical Details\nAlways use high resolution (8k)\nEnsure professional lighting\nOptimize for sharpness and detail\n\nCommon Pitfalls to Avoid\nOverly generic prompts\nMissing text‐integration guidance\nFailing to specify composition rules\nOmitting key technical parameters\n\nThe structure is:\n{\n  prompt_image {prompt : \"\" , ...}\n}"},"promptType":"define","hasOutputParser":true},"typeVersion":1.7},{"id":"a3e5fa40-51c1-41fa-83cb-d6d598f1ff49","name":"Telegram Response","type":"n8n-nodes-base.telegram","disabled":true,"position":[1820,0],"webhookId":"ca4806ac-202c-4709-92f9-6484397c17c4","parameters":{"operation":"sendPhoto","binaryData":true,"additionalFields":{}},"credentials":{"telegramApi":{"id":"haaaQCcDSaJAtymy","name":"Telegram account - hoanglt"}},"typeVersion":1.2},{"id":"f7059ea5-106b-4b73-8cb3-b0e10e1c0c13","name":"Save Image To Disk","type":"n8n-nodes-base.readWriteFile","disabled":true,"position":[1820,200],"parameters":{"options":{},"fileName":"=/files/{{ $('Code').item.json.fileName }}","operation":"write"},"typeVersion":1}],"active":false,"settings":{"executionOrder":"v1"},"versionId":"81eac1ed-7810-4bd2-b939-c4651c525691","connections":{"Telegram Trigger":{"main":[[{"node":"Fields - Set Values","type":"main","index":0}]]},"Code - Clean Json":{"main":[[{"node":"Code - Get Prompt","type":"main","index":0}]]},"Code - Get Prompt":{"main":[[{"node":"Code - Set Filename","type":"main","index":0}]]},"Code - Set Filename":{"main":[[{"node":"HTTP Request - Create Image","type":"main","index":0}]]},"Fields - Set Values":{"main":[[{"node":"AI Agent - Create Image From Prompt","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"AI Agent - Create Image From Prompt","type":"ai_languageModel","index":0}]]},"When chat message received":{"main":[[{"node":"Fields - Set Values","type":"main","index":0}]]},"HTTP Request - Create Image":{"main":[[{"node":"Save Image To Disk","type":"main","index":0},{"node":"Telegram Response","type":"main","index":0}]]},"AI Agent - Create Image From Prompt":{"main":[[{"node":"Code - Clean Json","type":"main","index":0}]]}}}


name: Extract & Transform HackerNews Data to Google Docs using Gemini 2.0 Flash
author_name: Ranjan Dailata
author_username: ranjancse
categories: []
created_at: 2025-07-04T15:25:11.039Z
updated_at: 2025-07-04T15:25:11.039Z
url: https://n8n.io/workflows/5677
scraped_at: 2025-07-06 21:16:30
description:
  Description
  This workflow automates the process of scraping the latest discussions from HackerNews, transforming raw threads into human readable content using Google Gemini, and exporting the final content into a well-formatted Google Doc.

  Overview
  This n8n workflow is responsible for extracting trending posts from the HackerNews API. It loops through each item, performs HTTP data extraction, utilizes Google Gemini to generate human-readable insights, and then exports the enriched content into Google Docs for distribution, archiving, or content creation.

  Who this workflow is for

  Tech Newsletter Writers**:
  Automate the collection and summarization of trending HackerNews posts for inclusion in weekly or daily newsletters.

  Content Creators & Bloggers**:
  Quickly generate structured summaries and insights from HackerNews threads to use as inspiration or supporting content for blog posts, videos, or social media.

  Startup Founders & Product Builders**:
  Monitor HackerNews for discussions relevant to your niche or competitors, and keep a pulse on the community’s opinions.

  Investors & Analysts**:
  Surface early signals from the tech ecosystem by identifying what’s trending and how the community is reacting.

  Researchers & Students**:
  Analyze popular discussions and emerging trends in technology, programming, and startups—enriched with AI-generated insights.

  Digital Agencies & Consultants**:
  Offer HackerNews monitoring and insight reports as a value-added service to clients interested in the tech space.

  Tools Used
  n8n**: The core automation engine that manages the trigger, transformation, and export.

  HackerNews API**: Provides access to trending or new HN posts.

  Google Gemini**: Enriches HackerNews content with structured insights and human-like summaries.

  Google Docs**: Automatically creates and updates a document with the enriched content, ready for sharing or publishing.

  How to Install
  Import the Workflow**: Download the .json file and import it into your n8n instance.

  Set Up HackerNews Source**: Choose whether to use the HN API (via HTTP Request node) or RSS Feed node.

  Configure Gemini API**: Add your Google Gemini API key and design the prompt to extract pros/cons, key themes, or insights.

  Set Up Google Docs Integration**: Connect your Google account and configure the Google Docs node to create/update a document.

  Test and Deploy**: Run a test job to ensure data flows correctly and outputs are formatted as expected.

  Use Cases
  Tech Newsletter Authors**: Generate ready-to-use summaries of trending HackerNews threads.

  Startup Founders**: Stay informed on key discussions, product launches, and community feedback.

  Investors & Analysts**: Spot early trends, technical insights, and startup momentum directly from HN.

  Researchers**: Track community reactions to new technologies or frameworks.

  Content Creators**: Use the enriched data to spark blog posts, YouTube scripts, or LinkedIn updates.

  Connect with Me

  Email: ranjancse@gmail.com

  LinkedIn: https://www.linkedin.com/in/ranjan-dailata/

  Get Bright Data: Bright Data (Supports free workflows with a small commission)

  #n8n #automation #hackernews #contentcuration #aiwriting #geminiapi #googlegemini #techtrends #newsletterautomation #googleworkspace #rssautomation #nocode #structureddata #webscraping #contentautomation #hninsights #aiworkflow #googleintegration #webmonitoring #hnnews #aiassistant #gdocs #automationtools #gptlike #geminiwriter

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.hackerNews","n8n-nodes-base.googleDocs","@n8n/n8n-nodes-langchain.chainLlm","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"id":"qgOiQsPSKD08eiB3","meta":{"instanceId":"885b4fb4a6a9c2cb5621429a7b972df0d05bb724c20ac7dac7171b62f1c7ef40","templateCredsSetupCompleted":true},"name":"Extract Structured Data from HackerNews, Export to Google Docs with Google Gemini","tags":[{"id":"Kujft2FOjmOVQAmJ","name":"Engineering","createdAt":"2025-04-09T01:31:00.558Z","updatedAt":"2025-04-09T01:31:00.558Z"},{"id":"ZOwtAMLepQaGW76t","name":"Building Blocks","createdAt":"2025-04-13T15:23:40.462Z","updatedAt":"2025-04-13T15:23:40.462Z"},{"id":"ddPkw7Hg5dZhQu2w","name":"AI","createdAt":"2025-04-13T05:38:08.053Z","updatedAt":"2025-04-13T05:38:08.053Z"}],"nodes":[{"id":"2f6e390d-47d2-46c0-b032-00e1541a8def","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[-380,0],"parameters":{},"typeVersion":1},{"id":"da17296e-a0b0-423f-8f6a-6636f77ff79e","name":"Hacker News","type":"n8n-nodes-base.hackerNews","position":[60,0],"parameters":{"limit":"={{ $json.Count }}","resource":"all","additionalFields":{}},"typeVersion":1},{"id":"8481d533-2ef1-4e97-afe1-8f182d17b390","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[280,0],"parameters":{"options":{}},"typeVersion":3},{"id":"5d88db37-0e3b-4900-af10-78a4f7152231","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[940,240],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash-exp"},"credentials":{"googlePalmApi":{"id":"YeO7dHZnuGBVQKVZ","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"0fcf5b56-87f8-4dca-9478-7f0753c195e7","name":"Create a Google Doc","type":"n8n-nodes-base.googleDocs","position":[1320,20],"parameters":{"title":"={{ $('Set the url, author').item.json.author }}-HackerNews","folderId":"default"},"credentials":{"googleDocsOAuth2Api":{"id":"39XPsztp1DX0svZQ","name":"Google Docs account"}},"executeOnce":false,"retryOnFail":true,"typeVersion":2,"alwaysOutputData":false},{"id":"2855e7e7-ea99-4acc-901a-54bffa7b3113","name":"Update Google Docs","type":"n8n-nodes-base.googleDocs","position":[1500,20],"parameters":{"actionsUi":{"actionFields":[{"text":"={{ $('Extract Human Readable Data').item.json.text }}","action":"insert"}]},"operation":"update","documentURL":"={{ $json.id }}"},"credentials":{"googleDocsOAuth2Api":{"id":"39XPsztp1DX0svZQ","name":"Google Docs account"}},"typeVersion":2},{"id":"ef59d4a1-4176-4702-996d-5a710b432b4b","name":"Set the Input Fields","type":"n8n-nodes-base.set","position":[-160,0],"parameters":{"options":{},"assignments":{"assignments":[{"id":"52ddafbb-536f-45d6-9697-7ddf5b9b3869","name":"Count","type":"string","value":"5"}]}},"typeVersion":3.4},{"id":"aa74a371-94cf-4a0b-93d9-fd503f1abbed","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[200,-320],"parameters":{"content":"## Step 1\n\nSet the input field with the \"Count\", how many record needs to be feteched."},"typeVersion":1},{"id":"79674295-f331-4e5b-81d4-09d45aedb883","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[460,-320],"parameters":{"content":"## Step 2\n\nSet the Google Gemini Credentials as part of the human readable data extraction"},"typeVersion":1},{"id":"80ed14eb-6ead-46d8-81d0-5502cb5f44db","name":"Extract Human Readable Data","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[980,20],"parameters":{"text":"=Extract a human readable content. \n\nHere's the context :\n\n{{ $json.data }}","batching":{},"promptType":"define"},"retryOnFail":true,"typeVersion":1.7},{"id":"d922ad6e-0959-465f-810f-3f0e8d8a3626","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-360,-400],"parameters":{"color":6,"width":540,"height":240,"content":"## Extract Structured Data from Hacker News, Export to Google Docs with Google Gemini\n\nHacker news data extraction with Google Gemini. Export the clean data to Google Document."},"typeVersion":1},{"id":"79f3eca6-df7d-4e72-816e-b17452f476b5","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[720,-320],"parameters":{"content":"## Step 3\n\nSet the Google Document Credentials for the Hacker News data export"},"typeVersion":1},{"id":"b3cfee88-735c-4474-b7c0-75511d44e26c","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[200,-140],"parameters":{"color":5,"width":1060,"height":520,"content":"## Hacker News Data Extraction"},"typeVersion":1},{"id":"36302c89-82a4-4098-9ca6-7822bb4d6c33","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-360,-140],"parameters":{"color":3,"width":540,"height":120,"content":"## LLM Usages\n\nGoogle Gemini -> Gemini 2.0 Flash Exp Model"},"typeVersion":1},{"id":"80c3a993-6c82-43c9-9612-e20e989012ef","name":"Set the url, author","type":"n8n-nodes-base.set","position":[500,20],"parameters":{"options":{},"assignments":{"assignments":[{"id":"267f21f5-d483-4e74-9773-b1d8a02dd984","name":"author","type":"string","value":"={{ $json.author }}"},{"id":"667a3ffb-a07c-4f66-b253-a7c64b2aa8e0","name":"url","type":"string","value":"={{ $json._highlightResult.url.value }}"}]}},"typeVersion":3.4},{"id":"ad6eb942-17a1-48af-9d41-f728c9127106","name":"Create an HTTP Request","type":"n8n-nodes-base.httpRequest","position":[720,20],"parameters":{"url":"={{ $json.url }}","options":{}},"retryOnFail":true,"typeVersion":4.2,"alwaysOutputData":true}],"active":false,"settings":{"executionOrder":"v1"},"versionId":"640bfa35-72c3-4d4d-8e38-a98fee2248e9","connections":{"Hacker News":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"Set the url, author","type":"main","index":0}]]},"Update Google Docs":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Create a Google Doc":{"main":[[{"node":"Update Google Docs","type":"main","index":0}]]},"Set the url, author":{"main":[[{"node":"Create an HTTP Request","type":"main","index":0}]]},"Set the Input Fields":{"main":[[{"node":"Hacker News","type":"main","index":0}]]},"Create an HTTP Request":{"main":[[{"node":"Extract Human Readable Data","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"Extract Human Readable Data","type":"ai_languageModel","index":0}]]},"Extract Human Readable Data":{"main":[[{"node":"Create a Google Doc","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Set the Input Fields","type":"main","index":0}]]}}}


