Tool reference
37 email tools. What each one does.
This is the whole surface: 16 email tools that only read, 9 that change something you can change back, and 12 your AI client stops and asks about first. A calendar, an address book or Team Access each bring tools of their own on top, up to 69 in all, and every one is listed here with what it does and where it refuses.
- Tools Up to 69
- Messages a call Up to 500
- Calls a day 5 free, 1,000 on Pro

The split
What your AI client asks you about
Every tool tells your AI client what it will do to your mailbox. Beside its name and arguments, each one carries an annotation, a label in the protocol: it only reads, it makes a change you can put back, or it can't be undone or reaches beyond the mailbox. Your client reads that label and decides whether to run the tool quietly or stop and ask you first.
That's why this page is grouped the way it is. Grouping by reading, writing and filing describes the product. Grouping by what your client will interrupt you for describes what is about to happen in your inbox. The second is the one that helps before you connect a mailbox.
- 16 email tools only read. Nothing in the mailbox changes when they run.
- 9 make a change you can undo. A flag can be cleared, a message marked read can be marked unread, and a draft can be deleted from Drafts.
- 12 can't be undone, or reach someone else. These are the ones your client stops on. Archiving is among them: it's the same act as moving a message, under a friendlier name.
The calendar tools are split the same way, by the same annotations. Blocking or moving your own time can be undone. Deleting an event can't, and nor can anything that emails another person, an invitation included, because sent mail can't be recalled. Your client asks before those.
Reading a message never marks it read. Every read tool
that opens a folder opens it read-only, and fetches with
BODY.PEEK, the IMAP command that deliberately leaves the
Seen flag alone.
That costs an extra round trip on every fetch, and most integrations don't pay it. It's why an assistant going through your inbox here doesn't quietly clear the unread markers you rely on. Marking read is a separate tool, and needs a separate instruction.
Clients differ in how strictly they follow the annotations, and some ask about more than others. The annotation is the fact; your own client's behaviour is the thing to check. In the same way, its connector settings, not our list, decide whether it can reach a remote server at all.

New: routines
The tools behind email routines
A routine is cheap enough to run every morning because its question about the whole mailbox is one call, not a search followed by a read of every result. These answer it. They only read, nothing they look at is marked read, and you can ask them yourself in any conversation; a routine is what asks them for you, at the time you chose.
-
What has come in?
Mail from people as conversations, and automatic mail counted apart, for a stretch of time you choose.
Routines that run it Morning brief, Bills and invoices, Your own routine
-
Who is waiting on a reply from me?
Everyone whose latest message you have not answered, oldest first, newsletters left out.
Routines that run it Replies waiting, Your own routine
-
What have I sent that nobody answered?
Oldest first, with how long each has waited and how often you have chased it.
Routines that run it Waiting on, Your own routine
Reference
The 37 email tools, by what they change
Every email tool this server registers, taken from its own registration code, and every mailbox has all of them. Which ones a connection may call is set by its permission level. A tool that isn't on this list can't be called by any client, however it's asked.
Each row also names the capability it belongs to, so the filing tools are still easy to find in a list ordered by consent. A Microsoft 365 mailbox gets 21 calendar tools on top of these.
Nothing in the mailbox changes
Your client can run these without stopping to ask, because there is nothing to undo afterwards. Reading a message does not even mark it read: every one of these that opens a folder opens it read-only and fetches with BODY.PEEK, the IMAP command that deliberately leaves the Seen flag alone. That costs an extra round trip, and most integrations do not pay it.
-
list_mailboxesReadLists every folder in the mailbox with the role the server reports for each. Roles come from the server's own LIST flags rather than from folder names, so it works on an account whose Sent folder is not called Sent.
-
list_emailsReadLists the most recent messages in a folder, newest first, each with the first line or 2 of what it says.
How it behaves: list_emails
- The quoted history and the signature are taken off, so the preview is the new part rather than the tail of a thread you have already read.
- That is what makes "what has come in?" a single question: without it, finding out which messages matter meant opening every one of them.
- It is a preview and not the message, capped at about 200 characters, and reading it marks nothing as read.
-
read_emailReadOpens one message in full, with its body, recipients and attachments. Does not mark it read, and exposes the sender's Reply-To header where there is one, because that is where a reply will actually go.
-
read_attachmentReadReads what is inside one or more attached files, however many are on the message, in one call.
How it behaves: read_attachment
- A PDF comes back as text page by page, a Word document with its tables kept as tables, a spreadsheet as one block of rows per sheet with the formulas already worked out, and plain text, CSV, HTML and a forwarded message as what they say.
- A PowerPoint deck comes back slide by slide.
- A photo comes back as a picture the assistant can look at, shrunk to fit if it is a big one, and a scanned PDF comes back as pictures of its pages, a few at a time, so a signed letter or a photographed receipt can be read the way a person reads it.
- A zip, an RTF, an old .doc or an Outlook .msg comes back as a sentence saying so, with the download link still there for those.
- What a file is comes from its first bytes rather than from what the sender's program called it.
- Long documents come back in windows the assistant can page through, reading never marks the message read, and the file is read from your mailbox and kept nowhere.
-
read_threadReadReads a whole conversation in one call, oldest first, from any single message in it. Long threads are capped and the result says so rather than quietly returning the newest few.
-
catch_upReadAnswers "what has come in?" for a stretch of time in one call: the last day unless you say otherwise, or since a time you name, up to a week back.
Routines that run it Morning brief, Bills and invoices, Your own routine
How it behaves: catch_up
- Mail from people comes back as conversations, each with its latest message, a preview, how many are unread and whether you have already replied, checked against your Sent folder as well as the replied mark.
- Newsletters and automatic mail, such as receipts, alerts and account notices, are listed separately with just the sender and subject, and everything is counted, so a long list never hides how much arrived.
- It tells people from the rest by how a message was sent, never by reading what it says, and it marks nothing as read.
-
waiting_onReadLists what you sent that nobody has answered, oldest first, with how long each has waited and how many times you have already chased it.
Routines that run it Waiting on, Your own routine
How it behaves: waiting_on
- By default it looks at the last 2 weeks and leaves out anything under 3 days old.
- A reply counts wherever it landed, in the inbox, the archive or All Mail on Gmail, and one from a mail program that drops the usual reply details still counts when it comes from the person you wrote to under the same subject.
- An out-of-office, a read receipt or a bounce is not an answer, so a message that only got one of those is still listed.
- Mail you sent to yourself or to no-reply addresses is left out, and you can name people or whole domains never to list.
-
owed_repliesReadLists the people waiting on a reply from you, oldest first, over the last week unless you say otherwise: in each conversation, everyone whose latest message you have not answered, so replying to one of 3 people who answered the same email leaves the other 2 on the list.
Routines that run it Replies waiting, Your own routine
How it behaves: owed_replies
- Newsletters and automatic mail never appear.
- It can keep to mail sent to you directly rather than copied to you, and it shows whether each one is still unread.
- Whether a message really needs an answer is left to you and your assistant: this answers who is waiting.
-
search_emailsReadSearches up to 25 folders in one call, by sender, recipient, subject, body, date range, read state, flag state and whether a message has been answered. Results are capped, and the response reports the total, the number returned and whether it capped.
-
select_emailsReadPicks out up to 500 emails at once for a clear-out: from one sender, from up to 20 senders, by subject or date, or everything in a folder. It shows who they are from, how many, how many are unread or flagged, the dates and a few subjects, so you can be told what will change before your AI deletes, files or marks them.
-
find_contactReadResolves a person's email address from the mailbox's own history, and from the mailbox owner's own address book where one is connected.
How it behaves: find_contact
- A card from the book ranks first, because the owner put that person there themselves, and it comes back with every address, the phone numbers, the postal addresses with their postcodes, the employer and the job title, so "what is Bob's number" and "what is Bob's address" are answered by the same call.
- Among the mailbox's own evidence, an address you have sent to outranks one that merely arrived from somebody using that name, because a display name on inbound mail can say anything.
- The mailbox half of a find_contact search reads each folder's most recent 3,000 messages, and says so in one sentence when a folder held more; a person last in touch with before that is not in the mailbox half of the result, and the book still has them if they are in it.
- Both sources are read on every call, and a book that will not open is named in the answer rather than silently left out.
-
check_bouncesCheckFinds messages that came back undelivered, in Inbox and Junk, and says whether each failure is permanent or temporary. Resending fixes one of those and duplicates the other.
-
check_deliverabilityCheckChecks the SPF, DKIM, DMARC and MX records of the connected mailbox's own domain. It says when a DMARC record is set to p=none and is therefore doing nothing, and it keeps a failed lookup apart from a missing record.
-
check_uploadCheckLooks for what an upload link received, and hands the assistant a reference to each file so it can attach them. Says plainly when nothing has arrived yet, which usually means the upload is not finished rather than that anything failed.
-
check_receiptsCheckFinds the confirmations that came back for messages you sent: a delivery confirmation, meaning the recipient's server accepted it, and a read receipt, meaning their mail program reported it was opened.
How it behaves: check_receipts
- It says in the result that a missing receipt is evidence of nothing, because most mail programs never send one and most people decline when asked.
- A receipt reporting that a message was deleted unopened is reported as exactly that.
-
list_identitiesSendLists the addresses this mailbox is allowed to send as, and says which one is used when none is named.
How it behaves: list_identities
- Aliases are added by the mailbox owner in their account rather than through the connector, and each carries its own name and signature.
- It opens no connection and changes nothing.
Changes something you can change back
A flag can be cleared, a message marked read can be marked unread, and a draft sits in Drafts until you send or delete it. Whether your client asks before running one of these is its decision rather than ours, and clients differ.
-
create_upload_linkFileProduces a one-off link for putting a file from your own computer into the mailbox, for when it is not already there and has no web address.
How it behaves: create_upload_link
- No sign-in: an assistant that can run commands uploads to it directly, and one that cannot hands you the link to drop files on.
- The files land in your own Drafts as a draft you can open, keep or delete.
-
create_folderFileCreates a folder, applying the server's own hierarchy and naming rules, and subscribes it so mail clients that list only subscribed folders actually show it.
-
draft_emailSendSaves a message to the real Drafts folder without sending it, so it appears in Outlook or webmail to edit, send or delete. A real draft, not a record of one.
-
draft_replySendSaves a reply to Drafts instead of sending it, with the original quoted underneath and the hidden headers that attach it to the conversation.
How it behaves: draft_reply
- That second part is why it is a separate tool: a draft written as an ordinary message can carry a "Re:" subject and still arrive as a brand new conversation, and nobody notices until the thread does not group.
- This is the one to use when you want to read a reply over before it goes.
- The message it answers is not marked as replied to, because it has not been yet.
-
draft_forwardSendSaves a forward to Drafts instead of sending it, carrying the original message and its files exactly as a sent forward would.
How it behaves: draft_forward
- A forward is the message where reading it over first matters most, because the part you are passing on is not yours.
- It names the files travelling with it, and names any the size limit would not take, which is worth more here than on a send: you still have time to do something about a missing one.
- The original is not marked as forwarded, because it has not been.
-
mark_readFlagMarks up to 500 messages read in one call. This is the deliberate act; reading a message never does it.
-
mark_unreadFlagMarks up to 500 messages unread again in one call.
-
flag_emailFlagSets the flag or star marker that Outlook and Gmail show, on up to 500 messages in one call.
-
unflag_emailFlagClears that flag or star marker, on up to 500 messages in one call.
Irreversible, or seen by somebody else
A sent message cannot be recalled and a moved message is no longer where it was, so hosts prompt before these run. No mail is destroyed here: deleting moves a message to Trash exactly as pressing Delete in Outlook would, and there is deliberately no tool that empties a folder.
The single exception is not mail at all. Updating a draft removes the version it replaces, because the alternative is a bin filling up with drafts you abandoned, and the new version is saved before the old one goes.
-
move_emailFileMoves up to 500 messages to another folder in one call, using the IMAP MOVE command, so read state, flags and the original dates all survive the move.
-
delete_emailFileMoves up to 500 messages to Trash in one call, exactly as pressing Delete would. Recoverable: nothing on this surface erases mail permanently.
-
archive_emailFileArchives up to 500 messages in one call, filing them where that mailbox's own Archive button files them.
How it behaves: archive_email
- An archive is a role the mail server gives a folder rather than a name, and the 3 services disagree about it: Microsoft 365 has a folder called Archive, most IMAP hosts have none until something makes one, and Gmail has no archive folder at all, because archiving there means the message stops being in the inbox and carries on living in All Mail.
- Asking for a folder called "Archive" is what fails on 2 of those 3.
- Read state, flags and the original dates all survive, so an archived backlog keeps the dates it arrived on.
- If the mailbox has no archive folder, one is created and subscribed so it shows up in your mail client, and the reply says so.
-
mark_junkFileMoves up to 500 messages into the junk folder in one call, which is what reporting spam does in a mail client.
How it behaves: mark_junk
- The move is also what teaches the filter, because Microsoft 365, Gmail and IMAP hosts running spam training all learn from their own junk folder, and that is why every mail client implements the button this way.
- The folder is resolved by its role rather than its name, since it is Junk Email on Microsoft 365, Spam on Gmail and Junk on most IMAP hosts.
- It refuses messages that are already in there, and creates a junk folder if the mailbox has none.
-
not_junkFileTakes up to 500 messages back out of the junk folder and returns them to the inbox, or to a folder you name.
How it behaves: not_junk
- The reverse of marking junk, for when the filter got it wrong.
- There is no source folder to pass, because the junk folder is the only place a message it can act on can be, and that also removes the commonest way to get this wrong: a message reference only means something inside the folder it came from.
- Read state, flags and the original dates survive, so a rescued message keeps the date it arrived rather than looking like it came in today.
- On a mailbox with no junk folder it says so rather than creating an empty one.
-
update_draftSendRewrites a draft that is already in the Drafts folder, so changing your mind about the wording replaces the draft rather than leaving the old version behind.
How it behaves: update_draft
- IMAP cannot edit a message in place, so this saves the new version and removes the previous one, which is what your own mail client does when you edit a draft and save it.
- The alternative would put every abandoned version in your bin.
- The files already attached and the hidden headers that hold a reply in its conversation both survive the edit.
- It is grouped with the destructive tools because the version it replaces is gone rather than recoverable, and your assistant should ask before it runs.
-
rename_folderFileRenames a folder and moves it under a different parent in one operation, the way a mail client's folder editor does. Sub-folders travel with it, and their subscriptions are carried across.
-
delete_folderFileDeletes a folder, and refuses one that still holds messages or has sub-folders inside it. It unsubscribes as well as deleting, so no phantom folder is left behind.
-
send_emailSendSends a new message from the connected address, or from any alias on the mailbox when one is named, with files attached if any are passed. Exactly one copy is filed in the real Sent folder.
-
send_draftSendSends a draft that is already in Drafts, exactly as it stands, as pressing Send in Outlook would.
How it behaves: send_draft
- One copy is filed in Sent and the draft leaves Drafts.
- Edit it as often as you like first: it goes as it is at the moment it is sent.
- A draft waiting for a colleague's approval is refused.
-
reply_emailReplyReplies inside the original thread, quotes the original below the new text, files a copy in Sent and marks the original answered. A Reply-To pointing somewhere the message did not come from is refused until the caller names that address.
-
forward_emailForwardForwards a message, carrying the original's attachments and inline images, under the forwarded-message block a real mail client produces. A carried file that will not fit the 20 MB message ceiling is reported as skipped by name. Recipients are exactly the addresses supplied.
A capped result says that it capped
2 of the read tools can match more than fits in one answer, and both say so. They don't hand back the first few and let the model assume that was everything.
A search reports the total it matched, the number it returned and whether it capped. Checked against a folder of 500 messages, it reported a total of 500, 50 returned, and capped set true. Reading a thread works the same way, and trims the quoted text of earlier replies so one paragraph isn't repeated 12 times.
Connected separately
The 21 calendar tools
Connect a calendar and your AI client is handed these as well. Until one is connected you get none of them, and your client is told nothing about a diary this mailbox does not have.
-
3 ways to a diary.
Connect a Microsoft 365 mailbox and approve calendar access, and these come with the contact tools below on its Outlook contacts: 63 tools in all, or 69 where the account also holds Team Access.
Every other mailbox can take either of 2 routes, whoever hosts the mail. Sign in to Google for a Google calendar: it needs a sign-in of its own, because an app password can't reach a diary. Or give the address of a CalDAV calendar server, which Fastmail, iCloud, Nextcloud and most mail hosts run. On Fastmail and iCloud the same app password opens the mail and the diary.
-
An absent tool beats one that always refuses.
One that is certain to fail still spends a call against your daily allowance to say so, still invites the model to try again a different way, and still advertises something you didn't buy. So the server reads what your connection actually covers and registers to match, and the list your client shows you is the list that will work.
-
The number below is a ceiling, not a promise.
Microsoft 365 answers for all of them. Google answers for the permissions you approved, and never offers the out-of-office, the counter-proposal, forwarding an invitation, reminders or categories: Google has something close to several of those, and an exact equivalent of none.
A calendar server reached by its address answers for as many as it implements, asked when the calendar connects rather than assumed: one will send invitations and report who is free, another only stores events. 2 customers on the same protocol can be offered different lists, and each list is the one that works.
-
Your own timezone, and unknown is never free.
Every time comes back in your mailbox's own timezone, stated rather than assumed, because a diary answer with an unstated timezone is a wrong answer waiting for a plane journey.
When somebody's free/busy can't be read, the answer is unknown, never free. Microsoft reports those one attendee at a time inside an otherwise successful response, which is how an integration ends up booking over an afternoon it couldn't see.
Nothing in the mailbox changes
Your client can run these without stopping to ask. They read the diary and the mailbox's own settings, and nothing in either changes. What comes back about other people is their busy and free blocks, never the subjects of their meetings.
-
list_calendarsRead the diaryLists every calendar the mailbox can see, including shared ones, and reports the mailbox's timezone and working hours.
How it behaves: list_calendars
- A calendar that can be read and not written to is marked as such, so nothing is offered that would then be refused.
- This is the call that makes every other time on this surface statable: without the timezone, "three o'clock" is a guess.
-
list_eventsRead the diaryLists what is in the diary between 2 dates, newest first within the window.
How it behaves: list_events
- A recurring meeting appears on every date it falls on, each one carrying the id of the series it belongs to.
- Each event says whether the mailbox owner organises it and how many people are invited, so a block of your own time is never mistaken for a meeting.
- A capped result says it capped.
-
read_eventRead the diaryOpens one event in full: everybody invited and how each of them answered, the recurrence written out in words rather than as a rule, the join link for an online meeting, the body, the categories and the reminder. It says whether you are holding one date of a series or the series itself, which is what decides what a later change would apply to.
-
search_eventsRead the diaryFinds events between 2 dates by free text, matched against the subject, the location and the organiser. It always searches a window, because a diary has no end: given none, it looks 90 days either side of today, and the result repeats back the window it searched so the answer can be trusted or widened.
-
check_availabilityFind a timeAsks when a group of people are free, returning busy blocks rather than what is in their diaries. Somebody whose calendar cannot be read comes back as unknown and never as free: those are different answers, and treating the first as the second is how a meeting gets booked over somebody's afternoon.
-
find_meeting_timesFind a timeAsks Microsoft for times a meeting would actually fit, ranked, honouring each attendee's working hours and each one's answer to whether they are needed. Where no time works it says which attendees are the reason, rather than returning nothing.
-
list_categoriesReminders and categoriesLists the categories this mailbox has defined, with the colour Outlook shows for each, so an event can be filed under the labels its owner already uses instead of new ones invented by an assistant.
-
read_out_of_officeOut of officeReads the out-of-office reply as it currently stands: whether it is on, the period it runs for if it is scheduled, and both messages - the one people inside your organisation get and the one everybody else gets.
Changes something you can change back
These change something in your own diary, and every change can be changed again. None of them emails anybody: blocking your own time, changing it, snoozing or dismissing your own reminders, and turning your out-of-office off. A tool that would put mail in somebody else's inbox is not in this group, whatever its name sounds like.
-
create_eventBook your own timeBlocks time in your own calendar, optionally repeating daily, weekly or monthly, with a reminder, a category and a show-as state. Nobody is invited and no email is sent: this is the tool for your own time, and inviting people is a different tool that says so.
-
update_eventBook your own timeChanges an event you own - the time, the subject, the location, the reminder. Where the event is part of a series it requires you to say whether the change is to this occurrence or to the whole series, and will not guess, because guessing wrong rewrites a year of Mondays.
-
clear_out_of_officeOut of officeTurns the out-of-office reply off, and says what it was set to before it was cleared.
-
snooze_reminderReminders and categoriesSnoozes an event's reminder until a time you state, the way pressing Snooze in Outlook does.
-
dismiss_reminderReminders and categoriesDismisses an event's reminder so it does not fire again.
Irreversible, or seen by somebody else
Every tool that emails another person in your name, and the one deletion that can't be undone. An invitation, an update, a cancellation, a forwarded invitation, an answer, a counter-proposal and an out-of-office reply all land in somebody else's inbox and can't be recalled, so a compliant client asks you first.
Deleting an event refuses outright the moment anybody else is invited, and points to the tool that cancels a meeting properly instead. So an invitation is never quietly removed from your own diary while everybody else keeps holding the time.
-
delete_eventBook your own timeDeletes an event nobody else was invited to. It refuses the moment anybody is on it and names the tool that cancels a meeting properly instead, so an invitation is never removed from your own diary while everybody else keeps holding the time.
-
schedule_meetingMeet other peopleInvites people to a meeting, optionally as an online meeting with a join link, marking each attendee required or optional. Real invitations go out from your address, so the result says who received one. Repeating the same request does not create a second meeting.
-
update_meetingMeet other peopleChanges a meeting other people are on, and tells them. Moving the time or adding an attendee sends the update Outlook would send, and the result names everybody it reached rather than reporting a bare success.
-
cancel_meetingMeet other peopleCancels a meeting and emails everybody invited, with a message if you want one. This is the only correct way to remove a meeting other people hold, and it cannot be taken back once the cancellations are out.
-
respond_to_invitationAnswer invitationsAccepts, tentatively accepts or declines an invitation, with an optional note to the organiser, and lets you choose whether the organiser is told at all - which is the difference between declining a meeting and declining it publicly.
-
propose_new_timeAnswer invitationsDeclines an invitation and suggests a different time in the same action, which is the answer most people actually want to give. Where the organiser has turned proposals off, that is reported plainly instead of being attempted and failing.
-
forward_eventMeet other peopleForwards an invitation to somebody who was not on it, with a comment. The organiser is told, exactly as Outlook tells them, so nobody is quietly added to a meeting.
-
set_out_of_officeOut of officeTurns on the out-of-office reply, either indefinitely or for a date range, with a different message for people outside your organisation. It is the same setting Outlook writes, so it appears in Outlook and turns itself off at the end of the period.
A series is not one of its dates
A weekly meeting is 2 different things at once: the series, and each Tuesday it lands on. Outlook keeps them apart and so does this. Changing an occurrence needs you to say which you meant, and it will not guess, because guessing wrong rewrites a year of Tuesdays and the person finds out in a meeting they no longer have.
Where the account holds Team Access
The 6 Team tools, where the account holds Team Access
Every mailbox of an account that holds Team Access registers these as well, and a mailbox on an account without a tier never sees them. They exist so that 2 colleagues, each with their own assistant, do not both answer the same message, and so that a person whose connection may draft but not send can still get a reply out through the owner.
- A hold is a keyword on your own mail server. A claim puts one keyword on the message and an approval request puts one on the draft, 2 keywords in all, and a colleague's assistant sees them through the same fetch of flags it already makes to know whether a message is read.
- Who holds it is our record, never the content. Who holds the message, or who asked, is a record of ours: the mailbox, the folder, the message and the person, never a subject, an address or a line of the body, so it is still true that no message content is stored here.
- A moved message keeps its hold. A message moved in a mail client keeps its keyword and leaves that record behind, so it reads as held by someone until it is released or taken over. Nothing here moves a message or marks it read.
- Said plainly where a server cannot. A server that does not accept custom keywords is told so by every one of these rather than pretended at, and a mail client may not display a keyword it did not set.
Two things the ordinary tools do on a Team mailbox and on no other:
list_emails and search_emails say who holds
each message, and a reply, forward or draft reply to a message somebody
else holds opens with one sentence naming them and still does the work.
The Team
Access guide walks a claim and an approval through end to end.
Nothing in the mailbox changes
Only looks. It lists the drafts waiting for the owner, and it waits for the Send and delete level even so, because the person it exists for is the approver.
-
list_pending_approvalsApprovalsLists every draft carrying an approval request, newest first: who asked, by name, when (the draft's own date on the server), the recipients, the subject and a preview. It only looks, and the activity screen counts it as a read; it still waits for the Send and delete level, because the person it exists for is the approver, and a connection that may not send has nothing to do with a list of drafts waiting to be sent.
Changes something you can change back
Each of these puts a keyword on a message or a draft, and each can be undone: a claim is released, an assignment is taken over, and a request is cleared by sending or by deleting the draft. Nothing leaves the mailbox.
-
claim_emailClaimsPuts the caller's claim on a set of messages, so colleagues sharing the mailbox see who is dealing with each.
How it behaves: claim_email
- A message somebody else already holds is left alone and the result names them; with force set, the claim is taken over and the result says whose was taken.
- Claiming a message you already hold changes nothing.
- The claim is a keyword the mail server stores on the message, and who holds it is a record of ours that names the message and the person and nothing of the message's contents; nothing is moved and nothing is marked read.
-
release_emailClaimsClears the caller's own claims on a set of messages. Somebody else's claim is left alone and named unless force is set, and a message nobody held is reported rather than treated as an error.
-
assign_emailClaimsPuts a named person's claim on a set of messages.
How it behaves: assign_email
- The person is an address, or a name as the owner entered it; a name that could mean 2 people, or matches nobody, is refused with the people who could have been meant.
- It takes over an existing claim and says whose.
- Only the owner and the people active on that mailbox can be assigned to.
-
request_approvalApprovalsMarks a draft in Drafts as waiting for the owner to approve and send it.
How it behaves: request_approval
- Only a message flagged as a draft, and only in the folder the server flags as Drafts.
- The draft stays there, unsent and editable; because editing a draft replaces it, an edit through update_draft changes its id and the request is asked for again on the new one.
- The result carries the draft's subject and recipients and says that the owner's assistant will see it under pending approvals.
Irreversible, or seen by somebody else
Sends a draft somebody asked the owner to approve, through the same path as any send: one Sent copy, the draft's own attachments and threading, and the draft removed from Drafts as a mail client removes one it has sent. A sent message cannot be recalled, so a compliant client asks first.
-
approve_and_sendApprovalsSends a draft that carries an approval request, through the ordinary send path: exactly one Sent copy, the draft's own attachments and threading headers, and the draft's own From address as the identity, refused by name if it is one the mailbox cannot send as.
How it behaves: approve_and_send
- It removes the draft from Drafts as a mail client does after sending one, and clears the request.
- A draft nobody asked about is refused as not pending.
- A sent message cannot be recalled, so a compliant client asks first.
Where the mailbox has an address book
The 5 contact tools, where the mailbox has an address book
Where a mailbox has an address book, every connection to it gets these tools as well: the one that opens a card, and the ones that write, where the book can be written to. A mailbox with no book is handed none of them and told nothing about them.
| Question | A CardDAV book | Outlook contacts | Google contacts |
|---|---|---|---|
| How it connects | On a mailbox that connects with a password, its own step in the control panel: the address of your CardDAV contacts server. Setting up CardDAV | A Microsoft 365 mailbox brings its Outlook contacts with the mail, on the same sign-in, so there is no address to give and nothing to connect. Microsoft 365 set-up | On a mailbox that connects with a password, a Google sign-in of its own, from the mailbox's Connection tab in the control panel. Google contacts set-up |
| Can it be written to | Only where the book's sign-in may write, which the server checks when the book connects. A book that can only be read offers the read alone. | Always. | Always. |
| What we keep | The book's address and a credential for it, sealed as a calendar's are, and that is the whole of it. | Nothing beyond the Microsoft grant the mailbox already had. | The token Google issued, sealed as the calendar's is. |
| Photos | Never read into an answer: a look-up does not request one and discards one the server sends anyway. On a card you ask it to correct, the photograph passes through in memory for that one request and is written back exactly as it was, never shown to the assistant and never held. | A contact's photo is never requested on Outlook contacts, on a look-up or a correction. | A contact's photo is never requested on Google contacts, on a look-up or a correction, and a correction leaves the photo and the labels exactly as they were. |
| Adding a card | A new card is written under a fresh id of its own, with a precondition that nothing already sits at that address, so it can never write over a card that is there. | A new card is one request to Microsoft, which mints the card's id, so there is nothing to be already taken and nothing to write over. | A new card is one request to Google, which mints the card's id, so there is nothing to be already taken and nothing to write over. |
| Importing a contacts file | Each imported card is written once under the id the export gave it or, where the export wrote none, a fingerprint of the card's own text, so a card already in the book is skipped and running the same file again adds nothing. | An imported card is skipped where the folder already holds its first email address (Microsoft mints the ids, so there is no card id to land on twice), a card with no email address is added every time, and a group card is not imported. | An imported card is skipped where the book already holds its first email address (Google mints the ids, as Microsoft does), a card with no email address is added every time, a group card is not imported, and the rest go to Google in batches rather than one at a time. |
Nothing about a contact is written down here
- Asked, answered and forgotten. When your assistant asks for a person, our server asks your contacts server, Microsoft or Google that one question, keeps the answer in memory for about 10 minutes so the next question is quick, and then forgets it.
- No name, address or phone number in any record. No table, no file, no log line and no audit row carries one. The record of a contact call holds the tool name, the outcome and, for each argument, a redaction mark or a count of how many addresses, phone numbers or cards were involved.
A card is written only where you asked, and only once
- Each write needs its level. On a book that allows it, a connection at Draft and file can add a card, correct one and import a contacts file, and one at Send and delete can delete one. Each is written to your own contacts server, Outlook contacts or Google contacts, so it shows in your phone and your mail client exactly as if you had typed it there.
- Never over another device's change. A correction or a delete is written against the revision of the card as it was just read, on every route, and refused rather than written over when another device changed it in the meantime.
- Edited, never rebuilt. A correction changes only the fields it names and leaves the photo, the birthday and every line it does not know about as they were.
- Adding is the one write not to repeat. A second call files a second card, and the tool says so to the assistant.
Where Outlook contacts and Google contacts read differently
- On a Microsoft mailbox the fields this server names come across (name, emails, phones, postal addresses, company, job title, note); a birthday, a photo, a web address or the categories in the export do not, and a card with two postal addresses of one type keeps the first of each, since Outlook holds one home, one work and one other address.
- An email address on an Outlook contact carries no type (home, work), and a phone number typed as other is filed as a work number, because those are the fields Microsoft offers.
- The books are the default Contacts folder, the user's own top-level contact folders and their child folders one level deep, at most 30 in all, every one writable; a folder nested deeper, or shared or delegated by another user, is not among them.
- On Google contacts the same named fields come across, each email address and phone number keeping its type; a birthday, a photo, a web address or the categories in the export do not.
- Google contacts are one book, named Google Contacts: Google's labels are tags on a person rather than folders, so a label is not a book of its own to search or file into.
- Google's "Other contacts", the addresses Gmail collects by itself from people you have written to, are not reached, because they sit behind a second permission that is not asked for; find_contact finds those people in the mailbox's own history instead.
What find_contact gains from a book
- Your own book ranks first. A person in your address book ranks above anybody found in the mailbox's history, and comes back with every address, the phone numbers, the postal addresses with their postcodes, the employer and the job title.
- Search by name, not by town. A postal address is a field you read and write, never a search term: a search still matches names, nicknames, email addresses and employers, so "who do we know in Glasgow" is not a question it answers.
- The mailbox half has a window. The mailbox half of a find_contact search reads each folder's most recent 3,000 messages, and says so in one sentence when a folder held more; a person last in touch with before that is not in the mailbox half of the result, and the book still has them if they are in it.
The tools below are for the whole card once the person is found, and for changing it.
Nothing in the mailbox changes
Only looks. It opens one card from your own address book by the reference a search handed back, and nothing in the book or the mailbox changes when it runs.
-
read_contactFind a person, read a cardOpens one contact from the mailbox owner's own address book, by the reference a find_contact result carried: every name, every email address with its type, every phone number with its type, the postal addresses with their type (home, work or other), each with street, town, county or region, postcode and country, the employer, the job title and the note, and which book it is in.
How it behaves: read_contact
- Photos are never read into an answer (a look-up does not request one), and the answer says so.
- It does not search; find_contact does that, and this is the call for the whole card once the person is found.
- A reference that names no card, or a card deleted from another device since, is answered with a sentence rather than an error, and nothing about the card is written down: it is held in memory for about 10 minutes and then forgotten, as every contact is.
Changes something you can change back
Each of these changes your own address book, on a book that can be written to (a CardDAV book whose sign-in allows it; Outlook contacts and Google contacts always), and each can be put back: a card added or imported can be deleted, and a card corrected can be corrected again. The change appears in your phone and your mail client exactly as if you had typed it there.
-
create_contactAdd, correct, deleteAdds a new card to the mailbox owner's own address book: a full name, and optionally given and family names, a nickname, email addresses and phone numbers each with a type, postal addresses each typed home, work or other with street, town, county or region, postcode and country (up to 5; on Outlook one of each type, an untyped one filed as other), the employer, a job title and a note.
How it behaves: create_contact
- On a CardDAV book a new card is written under a fresh id of its own, with a precondition that nothing already sits at that address, so it can never write over a card that is there.
- On Outlook contacts a new card is one request to Microsoft, which mints the card's id, so there is nothing to be already taken and nothing to write over.
- On Google contacts a new card is one request to Google, which mints the card's id, so there is nothing to be already taken and nothing to write over.
- The card appears in your own contacts app exactly as if typed there, with the name split the way the app splits it.
- An email address on an Outlook contact carries no type (home, work), and a phone number typed as other is filed as a work number, because those are the fields Microsoft offers.
- It is not a tool to repeat: a second call files a second card, so its own description tells the assistant to call it once, to check with find_contact after a timeout rather than try again, and to search first so a person already in the book is not added twice.
- Where more than one book can be written to, the assistant names one; it is refused rather than left to guess.
-
update_contactAdd, correct, deleteCorrects one card in the mailbox owner's own address book, by the reference a find_contact or read_contact result carried, changing only the fields named: a field left out is kept, a field set to nothing is cleared, and the lists of email addresses, phone numbers and postal addresses are each replaced whole, so the assistant reads the card first and sends the full list back with the change made.
How it behaves: update_contact
- The card is always read again from your server before it is written, and the change is written against that revision: a card another device edited in the meantime is refused rather than written over, and the assistant is told to read it again.
- The photo, the birthday and every line the tool does not know about survive untouched, because the card is edited rather than rebuilt from the fields this server understands.
- A card cannot lose its name.
-
import_contactsImport a contacts fileAdds every card in a vCard export to the mailbox owner's own address book, from a file that is already in the mailbox: the assistant reads the message the file is attached to and passes the attachment's reference, exactly as read_email handed it out, or the reference an upload link's check_upload handed out for a file dropped there.
How it behaves: import_contacts
- That is the only way in; a web address or a pasted copy of the file is not accepted, and the bytes live in the server's memory for the one call.
- Each card is written once, a few at a time, and a card already earlier in the same file is skipped.
- On a CardDAV book each imported card is written once under the id the export gave it or, where the export wrote none, a fingerprint of the card's own text, so a card already in the book is skipped and running the same file again adds nothing.
- A card a CardDAV book is already known to hold is skipped without a write, so a re-run of a large file picks up where the last one stopped.
- On Outlook contacts an imported card is skipped where the folder already holds its first email address (Microsoft mints the ids, so there is no card id to land on twice), a card with no email address is added every time, and a group card is not imported.
- On a Microsoft mailbox the fields this server names come across (name, emails, phones, postal addresses, company, job title, note); a birthday, a photo, a web address or the categories in the export do not, and a card with two postal addresses of one type keeps the first of each, since Outlook holds one home, one work and one other address.
- On Google contacts an imported card is skipped where the book already holds its first email address (Google mints the ids, as Microsoft does), a card with no email address is added every time, a group card is not imported, and the rest go to Google in batches rather than one at a time.
- On Google contacts the same named fields come across, each email address and phone number keeping its type; a birthday, a photo, a web address or the categories in the export do not.
- Up to 500 cards and 2 MB a file, a larger export in parts; a long import stops itself with its counts after 40 seconds, or as soon as the server asks for less traffic, and says so, and the next run continues where it stopped.
- A file is read in the character set its attachment declares, so an export with accents lands with them; one that declares none and is not UTF-8 is refused before the book is asked, and a vCard 2.1 export, which Outlook desktop still writes, is refused with a sentence naming the fix.
- The answer is counts (created, already there, failed, skipped) and the first 25 names created, never the cards; a server that did not answer is reported in a fixed sentence that names no card; and where more than one book can be written to the assistant names one.
Irreversible, or seen by somebody else
Removes a card from your own address book for everyone who uses it, and cannot be undone, so a compliant client asks first, naming the person.
-
delete_contactAdd, correct, deleteRemoves one card from the mailbox owner's own address book, by the reference a find_contact or read_contact result carried.
How it behaves: delete_contact
- The card is read again from your server first, so the answer names who was deleted, and the delete is written against that revision: a card another device changed since it was read is refused rather than removed.
- It deletes the card for everyone who uses that address book and cannot be undone, which is why it carries the destructive annotation, sits at the same permission level as deleting a message and an event, and a compliant client stops and asks, naming the person, before it runs.
Permission levels
What a connection may call: 3 levels and a calendar switch
Every connection an AI client makes by signing in carries a permission level. You choose it on the consent screen when you approve the connection. You can change it later in the control panel, on the mailbox's Connector tab, without reconnecting, and the change applies on the client's next call. It decides which of the tools above that connection is shown and may call.
Each level contains the one before it, and a switch decides whether the calendar tools come too. Levels are per connection, so one client can be Read only while another sends, on the same mailbox. Under every connection sits the mailbox's own limit, set by its owner, which no connection and no pasted access token can exceed.
Read only
Listing, reading, searching, picking out emails for a clear-out, catching up on what came in and who is waiting on a reply, finding an address, the addresses the mailbox may send as, and the checks on bounces, receipts, deliverability and an upload link. Nothing in the mailbox changes when any of these runs, and there is no tool on the connection that could change it.
Email tools
list_mailboxeslist_identitieslist_emailsread_emailread_attachmentread_threadsearch_emailsselect_emailsfind_contactcatch_upwaiting_onowed_repliescheck_bouncescheck_deliverabilitycheck_receiptscheck_upload
Calendar, when the switch is on
list_calendarslist_eventsread_eventsearch_eventscheck_availabilityfind_meeting_timesread_out_of_officelist_categories
Team, where the account holds it
- none at this level
Contacts, with an address book
read_contact
Draft and file
Everything Read only can do, plus drafting a message, a reply or a forward, editing a draft, filing, archiving, junk in and out, flagging, marking read or unread, creating a folder and minting an upload link.
A draft it saves is sent by the owner from their own mail client; nothing reaches anybody outside the mailbox and nothing is deleted for good. On the calendar: the owner's own time, reminders, and turning the out-of-office off. On an address book that can be written to: adding a card, correcting one, and importing a contacts file.
Adds to Read only
create_foldercreate_upload_linkmark_readmark_unreadflag_emailunflag_emaildraft_emaildraft_replydraft_forwardupdate_draftmove_emailarchive_emailmark_junknot_junk
Calendar, when the switch is on
create_eventupdate_eventclear_out_of_officesnooze_reminderdismiss_reminder
Team, where the account holds it
claim_emailrelease_emailassign_emailrequest_approval
Contacts, with an address book
create_contactupdate_contactimport_contacts
Send and delete
Everything Draft and file can do, plus sending, replying and forwarding, deleting a message to Trash, and deleting or renaming a folder. On the calendar it adds every tool that puts mail in somebody else's inbox in the owner's name, and deleting an event. On an address book, deleting a card. This is what every connection approved before 13 September 2026 was set to, because it is what every connection could already do.
Adds to Draft and file
send_emailreply_emailforward_emailsend_draftdelete_emaildelete_folderrename_folder
Calendar, when the switch is on
delete_eventschedule_meetingupdate_meetingcancel_meetingrespond_to_invitationpropose_new_timeforward_eventset_out_of_office
Team, where the account holds it
list_pending_approvalsapprove_and_send
Contacts, with an address book
delete_contact
-
The level is enforced by the server, on every call, before the call is metered.
A connection below Send and delete is shown only its level's tools, so the model is never offered
send_emailand never spends a turn finding out it can't use it.A call for a tool outside the level is refused as an ordinary tool result, not as a broken connector. It costs none of the mailbox's daily allowance, and it appears in the activity log as a failed call with "Not allowed on this connection" in front of the reason. The sentence the assistant is handed names the level and where to change it, so it can pass the refusal on instead of retrying:
This connection to sales@acme.com is "Draft and file", so it can prepare this but cannot send, delete or rename. The mailbox owner can change that in the control panel under the mailbox's Connector tab.
-
The calendar is a switch, not a fourth level.
Off, and the connection is handed no calendar tool whatever its level. On, and it gets the calendar tools its level reaches. A mailbox with no calendar connected stores the switch as off whatever was asked, because there's nothing for it to switch.
A calendar tool called on a connection without one gets its own sentence, ahead of any level:
This connection to sales@acme.com does not include the calendar. The mailbox owner can add it in the control panel under the mailbox's Connector tab.
-
The address book is neither a switch nor a level.
Whether a mailbox has one is a fact about the mailbox, set by its owner when they connect a book. So the contact tools are on every connection to that mailbox at whatever level reaches them, and a mailbox with no book registers none. Connecting the book is the consent; disconnecting it removes the tools on the next call.
-
The mailbox's own limit is a second layer under every connection.
Every mailbox carries a limit, set by its owner in the control panel on the mailbox's Connector tab. It's one of the 3 levels above, Send and delete unless you lower it, and a calendar switch, on unless you turn it off. It is the most any AI client may do with that mailbox.
What a connection can actually do is the lower of its own level and the limit, and it has the calendar only when both say so. A connection may be set below the limit, never above it. Approving a connection, or inviting a person under Team Access, at a level the limit doesn't reach is refused by the server, whatever a screen showed.
-
Lowering the limit caps every connection above it on its next call.
Raising it again gives each of them back exactly what was chosen, because nothing was rewritten. When the limit is what refused a call, the sentence names the limit rather than the connection, and the activity log's note ends "(mailbox limit)", so the assistant sends you to the control that changes it:
This mailbox is limited to "Read only" in the control panel, so no connection can send from it. The mailbox owner can change that under the mailbox's Connector tab.
-
An access token takes the mailbox's limit as its level.
Some clients take the mailbox's access token as a bearer token rather than signing in: that's how Cline, Goose, LibreChat and n8n connect. Such a client gets the limit as its level, and the limit's calendar switch.
With the limit at its default of Send and delete with the calendar on, the token reaches every tool above, which is what it did before the limit existed. A mailbox limited to Read only hands its token a read-only connection like any other, and a refusal on a token always names the limit.
Every connection approved before 13 September 2026 was set to Send and delete with the calendar on, which is what it could already do, so nothing was narrowed without you. The security page shows where the level and the limit sit among the other protections, and what they don't do.
Batching
500 messages in one call
Every tool that changes messages takes a set rather than a single message, and it will take up to 500 of them at once.
That is mark_read, mark_unread,
flag_email, unflag_email,
move_email and delete_email. Filing a
morning's inbox of 40 messages is one call rather than 40, and
clearing a year of newsletters is one call rather than several hundred.
Under a plan with a daily ceiling that is the whole difference between a limit you meet and one you never see. Free is 5 MCP calls a day and Pro is 1,000 a day, both per mailbox, and Pro is a published ceiling rather than an unlimited plan. Pro is £2.92 a month, paid annually at £34.99 + VAT, per mailbox; the pricing page states both ceilings and the same figures.
- mark_read, 500 messages 340 ms
- flag_email, 500 messages 252 ms
- move_email, 500 messages 187 ms
- delete_email, 500 messages 175 ms
Those 4 were timed on 27 August 2026 against a real server, at 500 messages a call, and they are the reason the batch limit is worth having rather than a number in a specification.
A request for 501 is refused rather than quietly truncated. Acting on the first 500 of 501 and reporting success is the failure that actually matters at a ceiling: you would have no way of knowing which message was left behind, and the report would tell you nothing was.
Partial failure is named the same way. IMAP has no transaction, so a batch really can half-work, and every result lists which messages succeeded and which did not and why, rather than returning a clean success. Verified live with one real message and 499 that did not exist: it did the real work, said so, and named what it could not touch.
What this looks like in practice is covered by the guide to triaging a full inbox and the guide to filing and folders, which also explains why a move keeps the read state, the flags and the original date instead of stamping everything with today's.
Batching is the part you can only judge on your own mailbox. The free tier is 5 MCP calls a day, with no card, and one of them will file a few hundred messages.
Delivery
Email that bounced, and what to do next
A send is reported successful when the sending server accepts the message, which is not the same as delivered.
Delivery happens minutes later, on somebody else's server, and if it fails the bounce comes back as an ordinary message in your inbox long after the send tool answered. Every mail system works this way. Most tools stop at the acceptance and leave the rest to you.
check_bounces is the tool that goes and looks. A panel
listing bounces is something nobody opens. An assistant noticing, inside
the same conversation, that the quote you sent an hour ago came straight
back is the part worth having.
Each result says which kind of failure it was, and the 2 want opposite responses. An assistant told only that something bounced gets one of them wrong, and it is a coin flip which.
| Failure | What it means | What resending does |
|---|---|---|
| Permanent | The address is wrong, or the mailbox no longer exists. | Nothing. The same message comes back again. |
| Temporary | The receiving server was busy and the sending server is still retrying. | Delivers the message twice. |
Junk is scanned as well as Inbox, by default. A bounce is automated mail arriving from an unfamiliar server with no prior correspondence, which is close to a description of what a spam filter is built to catch, so searching only the inbox would miss the ones you most need to see.
It was proven on real bounces, not on test fixtures. On 27 August 2026 it was run end to end against bounces from a real mail transfer agent, the server software that actually delivers mail.
That distinction isn't pedantry. A parser and the fixtures that test it, written by the same person in the same afternoon, agree with each other whether or not either agrees with a real mail server. 16 unit tests passed while the tool couldn't read a bounce from the mail server this project itself sends through. It was found by sending mail that couldn't be delivered, then reading the mailbox with something other than the tool under test.
Addressing
Finding an email address: your own history, and your address book
find_contact resolves a person's email address out of the
mailbox's own history, from a name or part of one, and out of your own
address book where one is connected.
There is no address book of ours behind it and nothing is uploaded anywhere: it is your own mail, searched, and your own contacts server, asked.
The interesting part is the order it puts the candidates in. A person you put in your own address book comes first, and an address you have sent to always outranks one that merely arrived from somebody using that name.
| Signal | Rank | Why it ranks there |
|---|---|---|
| A person in your own address book | First, where a book is connected | You put them there yourself, and the card carries the address to use. |
| An address you have sent to | Next | Nobody but you can put an entry in your Sent folder. |
| An address that arrived using that name | Last | A display name on inbound mail can say anything the sender likes. |
| 2 candidates carrying the same signal | Recency decides | The more recent correspondence is the one still in use. |
That is a security property rather than a convenience. Anyone can put any display name they like on a message they send you, and plenty of people do it deliberately. Nobody can put an entry in your Sent folder. Rank those 2 the other way round and an assistant asked to reply to a colleague addresses the mail to whoever last impersonated one.
reply_email guards the same corner from the other
side. It takes the recipients from the original message: its
Reply-To header where the sender set one, and
From otherwise.
If a message carries a Reply-To pointing somewhere it didn't
come from, the tool refuses to send until the caller names that address
explicitly. That's the exact shape of a common phishing technique: mail
that looks like it came from someone you know, with the replies quietly
routed elsewhere.
The security page sets out what is held, what is encrypted and what is never stored.
Reputation
SPF, DKIM and DMARC on your own domain
check_deliverability reads the 4 DNS records that decide
whether the servers you send to believe your mail is really yours. It
checks the connected mailbox's own domain and only that domain: it
cannot look anyone else's up, which is deliberate.
| Record | What it decides | Where it lives |
|---|---|---|
| SPF | Which servers are allowed to send using your domain. | A TXT record on the domain itself. |
| DKIM | Whether a message really left your domain unaltered, proved by a signature. | A TXT record on a selector subdomain, which is why a check has to know the selector to find it. |
| DMARC | What a receiving server should do when SPF or DKIM fails. | A TXT record at _dmarc on the domain. |
| MX | Where mail addressed to your domain is delivered. | The domain's own MX records. |
A DMARC record can pass and still do nothing
A DMARC record set to p=none is present, valid, and
instructs receiving servers to take no action at all when a message
fails. It passes every checkbox a deliverability checker has. The tool
says so in a note instead of showing it as a pass, because a green
tick there is worse than no check: it tells you a thing is protected
when what you have is a record that reports and enforces nothing.
The second trap is quieter. A DKIM key the check could not find is reported as a failed lookup rather than as a missing record, because those mean opposite things and the tool keeps them apart. A key may simply be published under a selector the check does not know about, and telling you that your signing is missing when it is working is how somebody ends up rebuilding a mail setup that was fine.
None of this is unique to us as information. What is different is that an assistant can ask for it in the middle of working out why a customer never replied, rather than you opening a separate tool and pasting a domain into it.
Limits
What these tools will not do
37 is the whole list, so everything absent from it is absent on purpose. These are the ones people ask for.
-
No send-later of its own, and no rules
Our server holds no email to send later, and nothing files or answers mail on its own. Your AI can send a draft at a set time from a scheduled task in its own app. A routine reads, drafts or flags; it never sends.
-
Results are capped
Search results and long threads are capped. The response reports the total, the number returned and whether it capped, but a very broad search will meet the cap.
-
20 MB a message
Attachments are capped at 20 MB per message in total across every file attached, which is our limit rather than a provider's.
-
Search is literal
Search is substring matching over IMAP. There is no stemming and no ranking, so a search for invoices does not find a message that only ever says invoice.
-
Your own domain only
The deliverability check reads the connected mailbox's own domain only. It will not look up a customer's domain, or a competitor's.
-
Folders with mail in them
Deleting a folder is refused while it still holds messages or has sub-folders inside it. There is no Trash to recover a folder from, and what reaches this tool is a model acting on a sentence rather than a person looking at the folder.
-
Deleted mail is gone
It cannot recover mail that has already been deleted.
-
Not a backup tool
It does not back up, export or migrate a mailbox, and there is no tool that copies your mail anywhere. Archiving a message files it in your own Archive folder, which is filing rather than a backup.
-
A calendar has to be connected separately
Calendar tools appear once a diary is connected, which is its own step: calendar access approved on a Microsoft 365 sign-in, a Google sign-in for Google Calendar, or the address of a CalDAV calendar server. A mailbox with none of the 3 gets the email tools and no calendar tools at all.
-
Contacts are looked up, never copied
Your address book stays where it is.
Where the mailbox has one (its Outlook contacts on a Microsoft 365 sign-in; on a mailbox that uses a password, your Google contacts by a Google sign-in of their own, or a CardDAV book you connect by its address), a person is looked up in it when you ask, held in memory for about 10 minutes, and forgotten: nothing about a contact is written to a database, a file or a log of ours.
On a mailbox with no book, addresses are resolved from the mailbox's own history. There is no file store either: an attachment is read and sent on the message it belongs to rather than kept anywhere as a document of its own.
-
Unknown is not free
When somebody's calendar cannot be read, the answer is unknown rather than free. Free/busy across organisations depends on an arrangement between them, and a name that comes back blank has told you nothing.
-
No room browsing
It cannot list the meeting rooms an organisation has. Reading a room directory needs a permission only an IT administrator can approve, and asking every customer for that to power one convenience is the wrong trade. A room with an email address can still be invited and its free/busy checked, exactly like a person.
-
No files on calendar events
Files attached to a calendar event are not read or written yet. Attachments on email are, and event attachments are a separate piece of work rather than an oversight.
-
No Exchange shared or delegated mailboxes
A Microsoft 365 shared or delegated mailbox, the kind with no sign-in of its own that Outlook reaches through Full Access or Send As, cannot be connected. A mailbox you own can be shared with named people through Team Access, which is a different thing: each person gets their own connection at a level you set.
A shared CALENDAR is different again and is supported on Microsoft 365: one that has been shared with you can be read, and written to where the person who shared it allowed that.
-
Every mailbox has a ceiling
Every mailbox has a daily ceiling on MCP calls: 5 a day on Free and 1,000 a day on Pro, per mailbox, in any rolling 24 hours. A Pro mailbox shared through Team Access grows by 1,000 for each person active on it, so one shared with 2 people has 3,000. Pro is a published limit, not an unlimited plan.
-
Only this server's tools
These limits describe the tools this server registers. Another vendor's mail MCP server has a different list, and the only way to know theirs is to read it.
Where the figures on this page come from
The timings, the attachment behaviour and the batch ceiling were measured while the engine was built, against a live mailbox of 26,930 messages across 6.63 GB. How it works gives each measurement with the method beside it, and follows one request from your sentence to your mailbox and back. If a claim here cannot be checked on your own mail with a free account, it should not be here.
Questions
Questions about the tools
How many tools are there, and what does each kind do?
37 email tools on every mailbox. A connected calendar adds up to 21, and an address book up to 5 contact tools: 63 at most on a Microsoft 365 mailbox with its calendar and Outlook contacts. Team Access adds 6 claim and approval tools, up to 69 in all. Of the email tools, 16 only read, 9 make a change you can undo, and 12 can't be undone or reach someone else, so your AI client asks first.
How does my AI client know which tools to check with me about first?
Every tool carries an annotation saying whether it only reads, makes a reversible change, or does something irreversible. Your client reads those annotations and decides whether to run a tool quietly or stop and ask you. That is why the reference is organised by what a tool changes rather than by topic. Clients differ in how strictly they apply it, so the annotation is the fact and your client's behaviour is the thing to check.
Can I give an AI client read-only access to my mailbox?
Yes, in 2 places. Each connection gets a permission level when you approve it: at Read only it can list, read and search (16 of the 37 email tools) and change nothing. Change it later in the control panel, on the mailbox's Connector tab, without reconnecting. The mailbox also has its own limit there, which no connection can exceed: set it to Read only and every AI client is read-only, even one using the access token. The server enforces both.
How many messages can it act on in one call?
Up to 500. Marking read or unread, flagging, unflagging, moving, archiving, reporting spam, rescuing it and deleting all take a set of messages, so filing a morning's inbox of 40 is one call, not 40. A request for 501 is refused, not quietly cut to the first 500. If part of a batch fails, the result names which messages didn't work and why. IMAP has no transaction, so a batch really can half-work.
Can it archive email, and where does an archived message go?
Yes, and it goes wherever your own mail client's Archive button would put it. Microsoft 365 has a folder called Archive. Many IMAP hosts have none, so one is created and subscribed for you, and it shows in Outlook. Gmail has no archive folder: the message leaves your inbox and lives on in All Mail. The reply names the folder it used. Read state, flags and the original dates survive, so an archived backlog keeps the dates it arrived on.
Can it report spam, and does that actually teach the filter?
Yes to both. Reporting spam moves the message into your junk folder, as your mail client's spam button does. Microsoft 365, Gmail and IMAP hosts with spam training learn from that folder, so the move is what teaches the filter. No "junk" keyword is set: few servers read one, and a refusal would make a working move look like a failure. If the filter gets one wrong, rescuing it returns it to the inbox with its original date.
When new tools are added, do I have to remove the connector and add it again?
No. Your AI client doesn't store the tool list when you connect. It asks the server at the start of each session, so a new tool appears in your next conversation, on the connector you already have. If a chat was left open across the change, start a new one. Nothing you set changes either. A new tool is placed in a permission level by hand before it's offered, so a connection you set to read only stays read only.
Can it delete my email permanently?
No. Deleting a message moves it to Trash, exactly as pressing Delete in Outlook would, and you can take it back out. There is no tool that empties a folder and no tool that purges Trash, deliberately. Deleting a folder is refused outright while that folder still holds messages or has sub-folders inside it, and the refusal says what to do instead.
Why is changing a draft listed as destructive?
Because IMAP can't edit a message once it exists. "Edit this draft" really means saving the new version and removing the old one, which is what Outlook does too. The old version is gone, not in Trash, so your bin doesn't fill with every wording you rejected. It only ever touches unsent drafts, and the new version is saved first, so a failure leaves 2 drafts, never none. It sends nothing, but it's marked so your client asks you first.
Does it tell me when a message I sent bounced?
Not on its own: nothing watches your mail as it arrives. Ask, and it looks in Inbox and Junk, because a bounce often looks like spam. A send counts as successful when the sending server accepts it, which isn't the same as delivered, and a bounce can arrive minutes later. It says whether each failure is permanent or temporary. That matters: a wrong address will bounce again, and resending a delayed message delivers it twice.
Does forwarding keep the original attachments?
Yes, including inline images, and the result names the files it sent. Anything you attach yourself goes in addition to the original's files rather than instead of them. The ceiling is 20 MB for the whole message rather than per file, so 3 files of 7 MB each are refused, and a carried file too large to fit is reported as skipped by name so you know the recipient will not get it.
Which attachments can it read, and which does it refuse?
read_attachment reads PDF, Word, PowerPoint, Excel, plain text, CSV, HTML and forwarded messages as text, and JPEG, PNG and GIF images as pictures. A scanned page comes back as a picture, up to 4 pages a call. Up to 20 files fit in one call. A file is judged by its first bytes, not its name. A zip, an RTF, an old .doc or .xls, or anything over 25 MB gets a sentence saying so, and its download link.
Can it check whether my own domain is set up to be trusted?
Yes. It checks the SPF, DKIM, DMARC and MX records of the connected mailbox's own domain, and only that one. 2 results deserve a careful read. A DMARC record at p=none passes every checkbox but tells receiving servers to do nothing, so the tool flags it rather than showing a pass. And a DKIM key it can't find is a failed lookup, not a missing record: it may be published under a selector the check doesn't know.
Can it schedule a message to send later?
Yes, through your AI. Save the email as a draft, then ask Claude or ChatGPT something like "send my draft to Tom on Monday at 8". Your AI schedules that as a task in its own app, and at that time sends the draft exactly as it stands, edits and all. Our server doesn't hold the email, so it goes when your AI's task runs, and ChatGPT may ask you to approve the send first.
Which mailboxes get the calendar tools?
3 kinds. A Microsoft 365 mailbox, once its owner approves calendar access when connecting. Any mailbox with a Google calendar, connected by a Google sign-in of its own, because an app password can't reach a diary. And any mailbox whose owner gives the address of a CalDAV calendar server, which Fastmail, iCloud, Nextcloud and most mail hosts run. A mailbox with no calendar gets no calendar tools at all, rather than tools that would refuse.
Will it book a meeting over somebody who is busy?
Not on an answer it couldn't read. If a person's free/busy can't be seen, because they're in another organisation or never granted permission, they come back as unknown, and unknown is never treated as free. Microsoft reports those one attendee at a time inside an otherwise successful reply, which is how an integration ends up booking over an afternoon it couldn't see. For everyone else it gets busy and free blocks, never meeting subjects.
Can it change a whole recurring meeting by accident?
It will not guess. A weekly meeting is 2 things at once, the series and each date it falls on, and Outlook keeps them apart. So does this: changing an event that is part of a series requires you to say which you meant, and there is no default. Reading the diary shows a repeating meeting on every date it falls on, the way Outlook does, with the id of the series each occurrence belongs to.
Will it email people without me knowing?
Every tool that puts a message in somebody else's inbox says so in its description, names the recipients in its result, and is marked so your AI client asks first. Inviting people to a meeting, rescheduling or cancelling one, and forwarding or answering an invitation all send email from your address. Blocking your own time sends nothing. Deleting an event refuses if anybody else is invited, so it's never removed from your diary while they keep the time.
Keep going
Read next
37 tools, on your own mail.
A list is a list until it runs against a real mailbox. 5 calls a day free, on any mailbox, with no card.