slack.messagemcp.email.sendcalendar.freeSlot()approval.preview
← Back to projects
Case study

Slack · n8n · Azure OpenAI · Outlook MCP agents · approval workflow

5
MCP agents
Slack
Control surface
Outlook
Email + calendar
Approval
Before send
n8nSlackAzure OpenAIMCPMicrosoft OutlookSerpAPIJavaScript
Jump to proof of work

Overview

ARIA is a personal Slack-based AI assistant built in n8n. I can write a natural request in Macedonian, and ARIA coordinates Outlook contacts, calendar availability, and email drafting through specialized MCP agents.

A typical request is: write to a contact about today's lunch, apologize in a friendly tone, check my next free calendar slot, include that date, and draft the email in Romanian. ARIA prepares the message, shows the preview, and only sends after approval.

The public material explains the architecture and selected code patterns. It does not publish the original workflow JSON, Slack channel IDs, user IDs, credential names, n8n cloud URLs, or private mailbox data.

01 / Problem

The challenge

Daily admin work often crosses several tools: contacts, calendar, email, files, and language translation. Doing that manually means switching context several times for one simple request.

The challenge was to make the assistant useful without making it unsafe. It needed to understand informal instructions, use the correct tools, draft in the requested language, and still keep the user in control before anything is sent or changed.

02 / Role

My role

I built the n8n workflow architecture, the Slack entry point, the smart processor, the routing logic, the central ARIA agent, the specialized MCP workflows, and the response cleanup layer.

I also designed the safer interaction pattern: preview first, approval second, execution last.

03 / Architecture

Workflow structure

01Slack message received
02Smart Processor normalizes text, user, language, priority, and attachment context
03Smart Router separates direct commands from natural-language assistant requests
04ARIA Agent interprets the request and selects specialized tools
05Contacts MCP finds the requested person
06Calendar MCP checks availability when the request needs a free slot
07Email MCP drafts the message in the requested language
08Approval preview is shown before sending
09After approval, the action is executed and confirmed in Slack
04 / Modules

Core modules

01

Slack command interface

The user talks to ARIA inside Slack using normal language. The request can be written in Macedonian while the final email is drafted in another language, such as Romanian, German, or English.

02

Smart processor

The processor extracts message text, Slack metadata, detected language, request category, priority, date/time context, and attachment information before the AI agent receives the task.

03

Smart router

The router sends simple commands to a command center and sends natural-language operational requests to the main ARIA agent. This keeps menu/status commands separate from tool-heavy actions.

04

Specialized MCP agents

ARIA does not keep all operations inside one large workflow. Email, calendar, contacts, attachments, drafts, and folders are separated into focused MCP workflows, each responsible for one operational area.

05

Approval before sending

Email sending is not treated as a blind automation. ARIA drafts the message, shows the text for review, and only sends after the user approves. This is important for trust and safe daily use.

06

Response analyzer and cleanup

Before the final Slack response is posted, the workflow routes success and error cases separately. Successful responses are cleaned so they read like normal assistant messages instead of raw AI output.

05 / Decisions

Technical decisions

Slack as the control surface

Slack keeps the assistant available in the same place where the user already works. It also gives a natural place to show previews and confirmations before actions are executed.

Separate MCP workflows instead of one workflow

Email, contacts, calendar, attachments, drafts, and folders are split into specialized MCP agents. This makes each capability easier to test, explain, and replace without touching the full system.

Language translation is part of the workflow

The assistant can receive the instruction in one language and draft the final email in another. This matters because the user can think in Macedonian while communicating professionally in German, Romanian, English, or another target language.

Human approval is a required safety gate

The workflow is designed around preview and confirmation before sending. That prevents accidental email delivery when the assistant misunderstood a contact, date, or tone.

06 / Stack

Tech stack

n8nWorkflow orchestration, Code nodes, IF routing, Slack trigger, and MCP tool wiring
SlackUser-facing chat interface for natural-language commands and approval messages
Azure OpenAILanguage model behind the central assistant agent
MCPSpecialized tool workflows exposed to the main agent
Microsoft OutlookEmail, calendar, contacts, folders, drafts, and attachments operations
SerpAPIOptional web-search tool for external lookup tasks
JavaScriptn8n Code nodes for message normalization, routing, cleanup, and safety checks
07 / Proof

Proof / Evidence

This case study is based on a private n8n system. The public proof focuses on architecture, design decisions, and sanitized snippets. Original workflow exports, credential IDs, Slack IDs, n8n cloud endpoints, contact data, and mailbox data are not published.

Public proof shown on this page

Slack MessageSmart ProcessorSmart RouterCommand CenterARIA AgentContacts MCPCalendar MCPEmail MCPApproval PreviewSlack Confirmation

A sanitized architecture diagram showing ARIA as a Slack-based AI assistant with smart processing, routing, specialized MCP tools, approval preview, and Slack confirmation.

Live system

The actual n8n workflow canvas for the ARIA Slack multilingual executive assistant — the same flow the architecture diagram above abstracts.

Public code & documentation

Valentino-Veljanovski / slack-multilingual-executive-assistant-snippetsPublic

Sanitized n8n architecture patterns for a multilingual Slack AI assistant with Outlook email, calendar, contacts, attachments, drafts, folders, approval-based sending, and specialized MCP agent orchestration.

n8nslackazure-openaimcpoutlookcalendar-automationemail-automationhuman-approvalmultilingual-aiarchitecture-patterns
View on GitHub

Code excerpt: approval gate before sending

The important safety rule is simple: ARIA may draft an email, but sending requires explicit user approval from the preview step.

approval-gate.jsjavascript
// Approval gate pattern for email actions in a Slack assistant.
// The assistant can draft the message, but sending is blocked until
// the user confirms the preview.

function buildEmailPreview({ recipient, subject, body, targetLanguage }) {
  return {
    type: "email_preview",
    status: "awaiting_approval",
    recipient,
    subject,
    body,
    targetLanguage,
    actions: ["approve_send", "edit_draft", "cancel"],
  };
}

function canSendEmail(state) {
  return state.type === "email_preview" && state.status === "approved";
}

if (!canSendEmail(currentState)) {
  return {
    action: "show_preview",
    message: "Please review and approve the email before sending.",
  };
}

return {
  action: "send_email",
  tool: "Email Agent MCP",
  payload: currentState,
};

Full sanitized example in snippets/approval-gate.js. The repository also documents the smart processor, router, MCP agent map, and response cleanup layer.

Publication note

The public repository is a documentation and snippet reference. It does not include original workflow JSON, credential references, personal contact data, Slack workspace identifiers, tenant configuration, private n8n cloud endpoints, or mailbox content.

← Back to all projects