AutomationFlowsAI & RAG › Manage Recruitment Tasks in Slack with Recrutei Ats & Gpt-4 Agent

Manage Recruitment Tasks in Slack with Recrutei Ats & Gpt-4 Agent

ByRecrutei Automações @paulo-lazari on n8n.io

This workflow transforms Slack into a powerful command center for recruitment. Using an AI Agent (LangChain) integrated with the Recrutei ATS API and MCP, your team can manage candidates, vacancies, tags and a lot more directly through Slack messages.

Event trigger★★★★☆ complexityAI-powered27 nodesSlack TriggerAgentMemory Buffer WindowSlackMcp Client ToolHTTP Request ToolOpenAI Chat
AI & RAG Trigger: Event Nodes: 27 Complexity: ★★★★☆ AI nodes: yes Added:

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

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

The workflow JSON

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

Download .json
{
  "id": "P5DsRknybluhQ7cM",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Slack AI Recruitment Agent for Recrutei ATS",
  "tags": [],
  "nodes": [
    {
      "id": "04c522fa-80ac-4f82-8ed1-0cd738990dd2",
      "name": "Slack Trigger",
      "type": "n8n-nodes-base.slackTrigger",
      "position": [
        -240,
        48
      ],
      "parameters": {
        "options": {},
        "trigger": [
          "app_mention"
        ],
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": ""
        }
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0b2f30dd-5aa2-4ea9-bb0d-3bebdc5c6511",
      "name": "Separates the message",
      "type": "n8n-nodes-base.set",
      "position": [
        -32,
        48
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1b7ce4b1-cdba-4f97-a2a0-d6b9cd678ba2",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text }}"
            },
            {
              "id": "606cbf42-3eb7-4c2e-8a03-57a47c6c1fda",
              "name": "channel",
              "type": "string",
              "value": "={{ $json.channel }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "023a7142-fbfe-486a-a91f-087717efee01",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "The agent can help you configure the tool, connect a chat node in it, just change the \"Source for prompt\" to  \"Connect Chat Trigger Node\"",
      "position": [
        448,
        48
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "You are a internal assistant for a HR company, your job is to help the user, answering their question consulting your tools in the best way.\nYou can also make actions using the MCP Server and some other POST APIs in your tools, always analyze your tools to see what can better serve the user\n\nYou should be also useful to help the user to configure your tools:\nMost of your tools are API connections, except the MCP Server\n\nFor the user to set the MCP correctly they must go for the Recrutei ATS, Configurations > Marketplace > Find the last option in the page called \"MCP\" > click the blue button on the right, called \"Integrate now\". After clicking that button, the page that opens has a list of MCP connections already created, where they can edit the name or delete, but they can not copy the token again. If the user does not have the token or/and the URL, they must create a new MCP token, in the blue button \"Generate new MCP token\". In this modal the user can write the name of the connection and select the expiration date, between 1 day, 1 week, 1 month, 6 months and 1 year. When the token is generate, it will apear in the new modal that opened at the top, but, to use in automations, they just need the URL (the fifith option in the screen), because the URL already has the token in it. The connection works for SSE and HTTP Streamable. The URL will be something like: https://mcp.recrutei.com.br/sse-token-\n\nThe MCP can have some troubles to execute list_candidates_by_stage, so here is some informations that can help execute this function in the best way:\n\nThe field \"pipes\" is a list of integers for identifying stages in the selection process. You can get this information execution the search for a vacancy, and getting the field \"pipeVacancy.pipe.pipe_stages\"\n\nNow, to set the API tools, the user needs their \"user token\" . The endpoint that can get this token is already as a tool, but it needs configuration as well. To configure the token API, the user needs to go to Recrutei ATS, Configuration > API and than copy the x-api-key and x-api-secret and insert as fields in the headers of the node of the API tool node. After this configuration, the user can request to you to get their token.\n\nTo the rest of the API tools, the only configuration that the user must do is to insert the token obtained by the tool in the Authorization field, on the headers.\n\nYou must always assume that the user does not have so much knowledge about APIs, automations, AIs, etc. Therefore, you must always communcate in the most explicative way, and avoid to say tecnical terms, use them only when there is no other way to explain something (one example of it is when the user needs help to configure the tools and APIs, so you can not avoid to say \"API\" or \"token\" and other tecnical terms.\n\nYou can also help the user to configure the Slack nodes, one is to receive a message and it serves as prompt message, and the other is to send the agent answer into a Slack channel, for those two to work the user needs a Slack APP in their workspace\n\nIf you can not help with something, refer the user to a documentation, as in the Slack documentation, n8n documentation or the Recrutei API documentation: https://developers.recrutei.com.br/docs/getting-started"
        },
        "promptType": "define"
      },
      "notesInFlow": true,
      "retryOnFail": true,
      "typeVersion": 3
    },
    {
      "id": "52c0f8f6-9cb1-46a5-a90b-cb9d48fb1625",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "notes": "This node makes the memory of the agent, it stores the data of each channel of your Slack Workspace",
      "position": [
        352,
        144
      ],
      "parameters": {
        "sessionKey": "={{ $('Separates the message').item.json.channel }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 20
      },
      "notesInFlow": true,
      "typeVersion": 1.3
    },
    {
      "id": "b5cceb41-4ec4-4e95-8ee4-80b14be714e0",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        -272,
        432
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Separates the message').item.json.channel }}"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "caeb30e1-4b7f-479a-80d1-8f408032d0ef",
      "name": "MCP Client",
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "position": [
        304,
        464
      ],
      "parameters": {
        "options": {},
        "endpointUrl": "[your_mcp_url]"
      },
      "typeVersion": 1.2
    },
    {
      "id": "714ff115-a6e7-4603-ad4c-d1848b1cb391",
      "name": "Get token",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        400,
        464
      ],
      "parameters": {
        "url": "https://api.recrutei.com.br/api/v1/login-api",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "email",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `This must be filled with the user's email`, 'string') }}"
            },
            {
              "name": "password",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `This must be filled with the user's password`, 'string') }}"
            }
          ]
        },
        "toolDescription": "This API allows the user to get their token, that allows the user to use others APIs, but to get the token the user needs to input their Recrutei's email and password, the token comes in the field \"token\" in the response of this tool\n\nYou should return to the user the value in the field \"token\"",
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "[your_x-api-key]"
            },
            {
              "name": "x-api-secret",
              "value": "[our_x-api-secret]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "7125d43b-2ce7-4a5f-8758-35e4afbbc5ba",
      "name": "Create a comment in a vacancy",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        672,
        416
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The Endpoint for this API is:\nhttps://api.recrutei.com.br/api/v2/vacancycomments/[vacancy_id]/comments\n\nFor this API to work you must fill the vacancy id in the middle of the endpoint, just as informed\n\nBe very cautious with this API`, 'string') }}",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `This field is the text that will be created as a comment, it is the message the user wants to pass forward`, 'string') }}"
            },
            {
              "name": "idVacancy",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `This must be filled with the id of the vacancy that the comment will be created`, 'string') }}"
            },
            {
              "name": "private",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters2_Value', `This field is boolean, that means it is only true or false, and both of them have a meaning:\ntrue: it means the comment will be private\nfalse: it means the comment will be public`, 'string') }}"
            }
          ]
        },
        "toolDescription": "This API allows the agent to create a comment on a specific job vacancy in the Recrutei platform.\n\nUse this tool when the user or the workflow needs to register notes, observations, feedback, or automated messages related to a vacancy, such as internal remarks, process updates, or AI-generated insights.\n\nThe tool sends a comment text linked to a vacancy ID and can define whether the comment is public or private, ensuring important information is stored in the vacancy history.\n\nThis endpoint should be used whenever the agent needs to persist contextual information about a vacancy inside Recrutei instead of only responding in chat.",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            },
            {
              "name": "content-type",
              "value": "multipart/form-data"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "7c6644d5-0c68-4670-bcc3-ee23441dc609",
      "name": "Listing vacancy comments",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        816,
        416
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The endpoint for this API is:\nhttps://api.recrutei.com.br/api/v2/vacancycomments/[vacancy_id]/comments\n\nThe vacancy id must be filled in the URL in the informed area`, 'string') }}",
        "options": {},
        "sendHeaders": true,
        "toolDescription": "This tool must be used when the user wants to see the comment there is in a vacancy, it can also serve as a middle tool, that others tools need to perform an action",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "db650ba4-9162-4394-b446-21b1e65b3277",
      "name": "Deleting a comment on a vacancy",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        960,
        416
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The endpoint for this API is:\nhttps://api.recrutei.com.br/api/v2/vacancycomments/[vacancy_id]/comments/[comment_id]\n\nYou must fill the vacancy id and the comment id in the informed area\n\nYou can get the comment id listing the comment from a vacancy and matching it for what the user specified`, 'string') }}",
        "method": "DELETE",
        "options": {},
        "sendHeaders": true,
        "toolDescription": "This tool must be used when the user wants to delete a created comment",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "49ddcb13-e6bc-474f-92cb-4eba10209ea3",
      "name": "Listing answers in a comment",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        1216,
        448
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The endpoint for this API is:\nhttps://api.recrutei.com.br/api/v2/vacancycomments/[idVacancy]/comments/[idComment]/answers\n\nYou must fill the vacancy id and the comment id in the informed area\n\nYou can get the comment id listing the comment from a vacancy and matching it for what the user specified`, 'string') }}",
        "options": {},
        "sendHeaders": true,
        "toolDescription": "This tool must be used when the user wants to list answers in a comment made in a vacancy",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "35b902e6-2c44-49c4-8f6c-5cc3f96b5027",
      "name": "Answering a comment",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        1344,
        448
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The endpoint for this API is:\nhttps://api.recrutei.com.br/api/v2/vacancycomments/[vacancy_id]/comments/[comment_id]/answers\n\nYou must fill the vacancy id and the comment id in the informed area\n\nYou can get the comment id listing the comment from a vacancy and matching it for what the user specified`, 'string') }}",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "idVacancy",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `Must be filled with the vacancy id`, 'string') }}"
            },
            {
              "name": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `comment id that the answer in going to be linked, it can be obtained listing the comments`, 'string') }}"
            },
            {
              "name": "text",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters2_Value', `The content of the answer`, 'string') }}"
            }
          ]
        },
        "toolDescription": "This tool must be used when the user wants to answer a comment in a vacancy",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "dd1996af-2bc6-42e7-82c9-72002767ad48",
      "name": "Creating a prospect candidate in a vacancy",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        1072,
        128
      ],
      "parameters": {
        "url": "https://api.recrutei.com.br/api/v2/prospects",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "prospect_acquisition_channel_id",
              "value": "8"
            },
            {
              "name": "name",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `The full name of the candidate`, 'string') }}"
            },
            {
              "name": "pipe_stage_id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters2_Value', `The pipe stage id in the pipeline that the candidate will be insert, it can be obtained in the MCP`, 'string') }}"
            },
            {
              "name": "vacancy_id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters3_Value', `Must be filled with the vacancy id`, 'string') }}"
            },
            {
              "name": "email",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters4_Value', `Must be filled with the e-mail address of the candidate`, 'string') }}"
            },
            {
              "name": "telephone",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters5_Value', `Must be filled with the phone number of the candidate`, 'string') }}"
            }
          ]
        },
        "toolDescription": "This tool must be used when the user wants to create a prospect candidate in a vacancy\n\nThis is usefull when the user have a external candidate in mind that did not applied for the vacancy yet",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            },
            {
              "name": "Content-type",
              "value": "multipart/form-data"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "a91d845b-e425-4185-bfc6-4e0a179731d8",
      "name": "Creating a tag in a candidate",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        816,
        -160
      ],
      "parameters": {
        "url": "https://api.recrutei.com.br/api/v2/tags/talent\t",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "application_id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `application id of the candidate, it can be obtained listing the candidates`, 'string') }}"
            },
            {
              "name": "color",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `It is not a mandatory field, but it can be filled if the user wants to define a color for the tag, in hexadecimal\n\nyou should help the user by translating the color they say to hexadecimal, usually they will not know how hexadecimal works`, 'string') }}"
            },
            {
              "name": "key",
              "value": "generic"
            },
            {
              "name": "talent_id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters3_Value', `This must be filled with the talent id, it can be obtained by listing the candidates`, 'string') }}"
            },
            {
              "name": "value",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters4_Value', `This must be filled with the name of the tag, the actual value that is going to be created in the tag`, 'string') }}"
            }
          ]
        },
        "toolDescription": "This tool can be used when the user wants too insert a tag in a candidate",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "d281e9fd-364e-4c11-ba41-d326f4ec323a",
      "name": "Listing created tags",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        976,
        -160
      ],
      "parameters": {
        "url": "https://api.recrutei.com.br/api/v2/tags/available-values",
        "options": {},
        "sendHeaders": true,
        "toolDescription": "This tool can be used to list all the tags that has been created in the user's team at Recrutei ATS\n\nIt can be usefull to insert a tag that already exists, instead of creating it again",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "e1dfb2b1-2f7e-4bd5-ac8b-10d183a68a5b",
      "name": "Listing candidates tags",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        1136,
        -160
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The endpoint for this API is:\nhttps://api.recrutei.com.br/api/v2/tags/talents/{talent_id}\n\nThe talent id must be filled in the informed area, this id can be obtained by listing candidates`, 'string') }}",
        "options": {},
        "sendHeaders": true,
        "toolDescription": "This tool can be used to list all of the candidates already inserted tags",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "04e6fdc5-644d-49d0-86aa-e59a82bd4a9f",
      "name": "Deleting candidate tags",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        1280,
        -160
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The endpoint for this API is:\nhttps://api.recrutei.com.br/api/v2/tags/talents/{id_tag}\n\nThe tag id must be filled in the informed area, this id can be obtained by listing candidate's tags`, 'string') }}",
        "method": "DELETE",
        "options": {},
        "sendHeaders": true,
        "toolDescription": "This tool can be used to list all of the candidates already inserted tags",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [your_token]"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "4222f751-a317-4aad-8eb2-87a6867030cc",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -448
      ],
      "parameters": {
        "width": 1040,
        "height": 336,
        "content": "## Overview: Recrutei ATS - Ultimate Internal AI Agent\nThis workflow transforms Slack into a powerful command center for recruitment. Using an AI Agent (LangChain) integrated with the Recrutei ATS API, your team can manage candidates, vacancies, and tags directly through Slack messages.\n\n## Setup Instructions\n1- **Slack Trigger:** Connect your Slack account and invite the bot to your desired channel.\n2- **OpenAI:** Configure your API Key. This agent uses GPT-4.1 for high-reasoning capabilities.\n3- **HTTP Request Tools:** Every \"Tool\" node (Pink nodes) needs your Recrutei API Token. \n   - Replace the `Authorization` header with your `Bearer YOUR_TOKEN_HERE`.\n   - Update the Base URL if necessary.\n4- **Slack Post:** Ensure the bot has permissions to write in the channel.\n\nThe agent can help you to configure the workflow, just connect the Chat Trigger Node in it, more informations, access the notes in the AI Agente Node"
      },
      "typeVersion": 1
    },
    {
      "id": "635fb5ca-ee6f-473e-84ca-3e3fdea1cc52",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -96
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 384,
        "content": "## Input & Context\nCaptures the incoming message from Slack. The \"Edit Fields\" node cleans and prepares the user's text prompt, ensuring the AI Agent receives the input in the correct format to start processing."
      },
      "typeVersion": 1
    },
    {
      "id": "b6fbafb4-9535-45ac-8f31-935f69d9e567",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        -96
      ],
      "parameters": {
        "color": 6,
        "width": 544,
        "height": 384,
        "content": "## The AI Brain\nThis section powers the agent's reasoning. It combines the AI Agent to orchestrate the use of tools, Window Buffer Memory to maintain conversation context (history), and the OpenAI Model to interpret the recruiter's intent."
      },
      "typeVersion": 1
    },
    {
      "id": "995b1924-e7fc-4b9f-bd33-e3fdaf54eb74",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -288
      ],
      "parameters": {
        "color": 7,
        "width": 784,
        "height": 304,
        "content": "## Toolset: Tag Management\nEnables the AI to organize your ATS data by creating, listing, or deleting tags dynamically based on user requests."
      },
      "typeVersion": 1
    },
    {
      "id": "c78486d6-4153-4013-b4c0-77fa20739774",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 320,
        "content": "## Toolset: MCP& Token\nThese tools allow the agent to fetch real-time data from Recrutei, such as active vacancies, specific candidate details, or lists of applicants for a specific role, and others. The Get token node makes a easier way for the user to get their token"
      },
      "typeVersion": 1
    },
    {
      "id": "0dd3d029-d4a3-47f5-929b-8c6b85f0f8b5",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 320,
        "content": "## Toolset: Vacancy Comment Management\nThese tools allow the agent to make complex action involving comments on vacancies"
      },
      "typeVersion": 1
    },
    {
      "id": "a38bd2ea-6a69-4304-bcbf-1971c617b1fc",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 320,
        "content": "## Toolset: Comment's Answer Management\nThese tools allows the agent to make answers in vacancies's comments and also listing them"
      },
      "typeVersion": 1
    },
    {
      "id": "fa1fe9f9-72c9-435f-be2f-0c7b5ecaa9d3",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        32
      ],
      "parameters": {
        "color": 7,
        "width": 784,
        "height": 256,
        "content": "## Toolset: Candidate Prospection \nThis tool allows the agent to create a candidate in a vacancy as a prospect, which means that it will have limited informatons, but it is usefull if the recruiter finds a good candidate in a external environment"
      },
      "typeVersion": 1
    },
    {
      "id": "96580433-9184-4df3-b437-5c90639fc8eb",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 320,
        "content": "## Response Delivery\nFinally, the agent sends its generated response back to the original Slack thread, completing the interaction loop."
      },
      "typeVersion": 1
    },
    {
      "id": "f55da79c-b1d8-4ffd-aaa4-7bc66432b756",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        224,
        144
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "3db64a26-1504-411a-9b20-a5dbe6971ed1",
  "connections": {
    "OpenAI": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get token": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "MCP Client": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Slack Trigger": {
      "main": [
        [
          {
            "node": "Separates the message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Answering a comment": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Listing created tags": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Separates the message": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Deleting candidate tags": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Listing candidates tags": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Listing vacancy comments": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Listing answers in a comment": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Create a comment in a vacancy": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Creating a tag in a candidate": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Deleting a comment on a vacancy": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Creating a prospect candidate in a vacancy": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

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

Pro

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

About this workflow

This workflow transforms Slack into a powerful command center for recruitment. Using an AI Agent (LangChain) integrated with the Recrutei ATS API and MCP, your team can manage candidates, vacancies, tags and a lot more directly through Slack messages.

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

This n8n template builds a WhatsApp support copilot that answers **order status and product availability** from Shopify using LLM "agents," then replies to the customer in WhatsApp or routes to human

WhatsApp Trigger, Memory Buffer Window, OpenRouter Chat +7
AI & RAG

Meet Troy, your intelligent personal assistant that seamlessly manages your Google Calendar and Tasks through Telegram. This workflow combines AI-powered natural language processing with MCP (Model Co

Mcp Trigger, Google Calendar Tool, Google Tasks Tool +7
AI & RAG

This workflow implements role-based access control for AI agent tools using Port as the single source of truth for permissions. Different users get access to different tools based on their roles, with

OpenAI Chat, Tool Calculator, Slack Trigger +7
AI & RAG

🔗 Slack + Bitly UTM Generator — Powered by OpenAI

Slack Trigger, Agent, OpenAI Chat +6
AI & RAG

This workflow provides a comprehensive weather reporting system with two main functionalities: a scheduled daily summary and an interactive AI agent for dynamic queries.

HTTP Request, Gmail, Slack +5