agenticonsult logoagent i /consultDocs
Agentic infrastructureMCP servers

email

Standard mailbox operations over IMAP and SMTP — reading, search, triage, a shared queue, and an outbound path governed by approval and a master stop.

This server gives agents standard mailbox operations over IMAP and SMTP — it works with any mail provider that speaks those protocols, against a mailbox you configure with your own credentials. The 19 tools cover the whole working surface: folders, unread counts, listing and reading messages, search, the outbound actions (send, reply, forward, and saving drafts for a human to finish), mailbox management (move, delete, mark read or unread), and a local queue that an always-on inbox monitor fills — so triage work survives between sessions instead of restarting from an inbox scan every time.

The queue is what turns raw mail into a workflow. The monitor polls the mailbox without any model involvement and records new messages in a local queue; the support workflow — the support-email agent — then reads the queue, classifies each message, pulls context from your knowledge base, and drafts a reply.

Three defaults shape that loop, and reading them together is the quickest way to understand the approval model:

  • The inbox monitor is on and the agent's autorun is on. A fresh install watches the mailbox and works new mail without you switching anything on. Both are inert until a mailbox is actually connected, so a new install polls nothing and reports that it is waiting for an account rather than erroring.
  • Standing send authorization is off. Letting an agent answer someone unattended is a decision you make, not one you inherit.

Outbound: approval, and the master stop

Per-message approval is the default posture, not an absolute rule. On a fresh install a reply the agent drafts waits in Email ▸ Agent until you approve it, and that is the behavior you get without changing anything.

One switch changes it, and it is narrow by construction. email.auto_approve_drafts is a standing authorization that lets a reply-disposition draft which passed the agent's own confidence gate send immediately. Everything else still takes the per-message path: a reply that needs more information, anything classified human-only or personal, forwards, and mail from senders you have flagged. A single email routine can carry its own setting, and Email ▸ Agent shows in one readout whether anything is currently authorized to send.

The master stop. Above all of it sits Settings ▸ Terminals ▸ Agent control planes ▸ Email sending, which answers one question: right now, may mail leave this machine? With it off, email_send, email_reply and email_forward are refused while reading, searching and saving drafts keep working — so a message an agent composes waits as a draft instead of vanishing. It stops your own composer too, deliberately. Your composer does not go through the agent tool surface, but it does go through the same mail client underneath, and the stop lives inside that client. If your own Send button stops working while drafts still save and reads are fine, check this switch first.

The full model — what an agent may do unattended, which switch stops each thing, and what is recorded — lives on Autonomy and controls.

What an agent's message carries. Every send, reply and forward from this server is stamped as machine-sent, independently of any AI label the agent chooses. That stamp is a loop breaker: it is how a receiving monitor — including a second mailbox of your own — knows not to answer an automatic message automatically. Drafts carry no such stamp, because a human sends those.

How your agents use it

  • "Anything new in the support box?"email_count_unread, then email_list_messages and email_read_message for the ones that matter.
  • "Work the queue."email_queue_list for pending items, a drafted reply per message grounded in your knowledge base, your approval, then email_reply — and email_queue_update to mark the item handled.
  • "Find the thread where we discussed the license terms."email_search, then email_read_message on the hit.

Prerequisites

A mailbox of your own: server addresses, account name, and password, entered once in your settings (see the configuration reference). Credentials stay in the one settings file you own, on your machine. Reading and triage involve no model cost; drafting quality rides on your own agent subscription like any agent work.

Subscription. The email cockpit is part of Pro, and the gate covers every tool on this page — listing and searching a mailbox is the product, so there is no read-only version of it. Without an active subscription each call answers with a plain "subscription required" result naming the tier it needs and where to upgrade, and the inbox monitor stops rather than quietly filling a queue nobody can read. Both paid tiers pass. Tiers covers what each tier includes.

Tool reference

ToolParametersWhat it does
email_list_accountsList configured email accounts (id, label, email, display_name, enabled, default flag). Passwords are never returned.
email_list_foldersaccount: objectList all email folders (INBOX, Sent, Drafts, Trash, etc.).
email_count_unreadfolder: string, account: objectCount unread and total messages in a folder.
email_list_messagesfolder: string, limit: integer, offset: integer, unread_only: boolean, account: objectList email messages in a folder with headers (from, subject, date, read status). Newest first. Use offset/limit for pagination.
email_read_messageuid*: string, folder: string, mark_read: boolean, account: objectRead the full content of an email by UID. Returns body text, headers, attachment list, and threading info (Message-ID, In-Reply-To, References).
email_searchfolder: string, from_addr: string, to_addr: string, subject: string, body_text: string, since: string, before: string, unread_only: boolean, limit: integer, account: objectSearch emails by criteria: sender, recipient, subject, body text, date range, read status. Dates use DD-Mon-YYYY format (e.g., 15-Mar-2026).
email_sendto*: string, subject*: string, body*: string, cc: string, bcc: string, html: boolean, reply_to: string, account: object, ai_label: objectSend a new email. Supports plain text and HTML. IMPORTANT: All outbound email should be reviewed before sending in production.
email_replyuid*: string, body*: string, folder: string, reply_all: boolean, html: boolean, account: object, ai_label: objectReply to an email. Automatically handles In-Reply-To and References headers for proper threading. Quotes the original message.
email_forwarduid*: string, to*: string, body: string, folder: string, account: object, ai_label: objectForward an email to another recipient with optional additional message.
email_save_draftto*: string, subject*: string, body*: string, cc: string, bcc: string, html: boolean, reply_to: string, account: object, ai_label: objectCompose a NEW email and SAVE IT AS A DRAFT (Drafts folder) — it is NOT sent. Use this to stage a message for the operator to review and send later. Same fields as email_send. Returns {status, folder, subject, uid?} — the uid (UIDPLUS) lets you open the draft directly.
email_save_draft_replyuid*: string, body*: string, folder: string, reply_all: boolean, html: boolean, account: object, ai_label: objectCompose a REPLY and SAVE IT AS A DRAFT (Drafts folder) — it is NOT sent. Handles In-Reply-To/References threading and quotes the original. Same fields as email_reply.
email_save_draft_forwarduid*: string, to*: string, body: string, folder: string, account: object, ai_label: objectCompose a FORWARD and SAVE IT AS A DRAFT (Drafts folder) — it is NOT sent. Same fields as email_forward.
email_moveuid*: string, source_folder: string, target_folder*: string, account: objectMove an email to another folder.
email_deleteuid*: string, folder: string, account: objectDelete an email (moves to Trash folder if available, otherwise permanently deletes).
email_mark_readuid*: string, folder: string, account: objectMark an email as read.
email_mark_unreaduid*: string, folder: string, account: objectMark an email as unread.
email_queue_statusaccount: objectGet overview of the email processing queue: counts by status (new, processing, processed, escalated) and by classification (support, sales, personal, spam, internal).
email_queue_liststatus: string, classification: string, limit: integer, account: objectList entries in the email processing queue with optional filters.
email_queue_updateentry_id*: integer, status: string, classification: string, processed_by: string, notes: string, account: stringUpdate a queue entry: set status, classification, processing notes, or who processed it.

Where to go next

  • Agents — the support workflow that drives this server day to day
  • Autonomy and controls — the approval model, the master stop, and what gets recorded
  • Email — the cockpit itself: accounts, the agent tab, and the drafts card

On this page