outlook_mail_ batch_ readRun up to 20 read (GET) requests in one Microsoft Graph $batch, e.g. several messages by id: [{ "url": "/me/messages/ID1?$select=subject,from,bodyPreview" }, ...].
Find the emails that still need an answer, reply in the thread with the file attached, move a client's mail into its folder, and switch on your out of office before a trip.
PopMCPOutlook Mail
All of Outlook mail in Microsoft Graph for a signed-in mailbox, from messages, drafts and attachments to folders, rules, categories and contacts, plus the mailbox events PopMCP can watch.
126 tools in the full catalog: 62 read and 64 write. 42 load by default, and the rest are found with tool search.
outlook_mail_ batch_ readRun up to 20 read (GET) requests in one Microsoft Graph $batch, e.g. several messages by id: [{ "url": "/me/messages/ID1?$select=subject,from,bodyPreview" }, ...].
outlook_mail_ create_ draftCreate a draft message (nothing is sent).
outlook_mail_ create_ reply_ draftCreate a reply draft to the sender (nothing is sent), already threaded with the original.
outlook_mail_ delete_ messageDelete a message: it moves to Deleted Items (it can be recovered there).
outlook_mail_ forward_ messageForward a message now.
outlook_mail_ forward_ with_ attachmentsForward a message with extra files attached: creates the forward draft (the original's attachments come along), adds the files, then sends it, or leaves it as a draft with draftOnly.
outlook_mail_ get_ conversationRead a whole email thread, oldest first: each message's sender, recipients, date and its own new text (without the quoted history).
outlook_mail_ get_ messageRead one message: sender, recipients, subject, the body (as plain text by default; bodyFormat html for HTML), dates, flags and the list of its attachments.
outlook_mail_ inbox_ overviewA quick look at the mailbox: Inbox unread and total counts, how many messages are flagged, the newest unread messages (compact), and whether automatic replies (out of office) are on.
outlook_mail_ list_ folder_ messagesList the messages in one folder.
outlook_mail_ list_ messagesList messages across the whole mailbox (every folder, newest first).
outlook_mail_ move_ messageMove a message to another folder (archive it, file it, or move it out of Junk).
outlook_mail_ move_ messagesMove up to 50 messages to a folder in one call (archive them, file them, move them out of Junk).
outlook_mail_ reply_ all_ to_ messageReply to the sender and every recipient now.
outlook_mail_ reply_ to_ messageReply to the sender now (threaded with the original, saved in Sent Items).
outlook_mail_ reply_ with_ attachmentsReply (or reply all) to a message with files attached: creates the threaded reply draft, adds the files (any size up to 150 MB each), then sends it, or leaves it as a draft with draftOnly.
outlook_mail_ search_ messagesFind messages: by words (sender, subject and body), sender, recipient, subject, folder (name or path), date range, unread, flagged, attachments or importance.
outlook_mail_ send_ draftSend a draft.
outlook_mail_ send_ emailSend a new email (or save it as a draft with draftOnly: true), with attachments of any size up to 150 MB each: small ones go with the message, large ones are uploaded in parts.
outlook_mail_ update_ messageChange a message: mark read or unread, flag it, set categories or importance, or edit a draft's subject, body and recipients.
outlook_mail_ update_ messagesChange up to 50 messages at once: mark read or unread, flag or complete, set or add categories (names from outlook_mail_list_categories), set importance.
outlook_mail_ create_ folderCreate a top-level mail folder.
outlook_mail_ find_ folderFind a mail folder by name or path and get its id, path, unread and total counts.
outlook_mail_ get_ folderOne mail folder with its unreadItemCount, totalItemCount and childFolderCount.
outlook_mail_ list_ child_ foldersList the subfolders of a mail folder.
outlook_mail_ list_ foldersList the top-level mail folders (Inbox, Drafts, Sent Items, Deleted Items, Archive, Junk Email and your own) with unreadItemCount and totalItemCount.
outlook_mail_ create_ contactCreate an Outlook contact.
outlook_mail_ get_ contactOne contact with every detail.
outlook_mail_ list_ contactsList the user's Outlook contacts (default contact folder): names, email addresses, phones, company.
outlook_mail_ update_ contactChange a contact: send only the fields that change.
outlook_mail_ add_ attachmentAttach a file under 3 MB (or another Outlook item, or a link) to a draft.
outlook_mail_ get_ attachmentOne attachment with its content: a file's contentBytes (base64), an attached message or event (with $expand=microsoft.graph.itemattachment/item), or a link.
outlook_mail_ list_ attachmentsList a message's attachments: id, name, contentType, size, isInline (file contents are left out).
outlook_mail_ read_ attachmentRead an attachment: the text of documents (Word .docx, PowerPoint .pptx, Excel .xlsx, .txt, .csv, .html, .json, .ics), an attached email (its sender, subject and body), or an image (returned as the image).
outlook_mail_ create_ message_ ruleCreate an Inbox rule that files, flags, categorizes, deletes or forwards incoming mail.
outlook_mail_ get_ mailbox_ settingsMailbox settings: automatic replies (out of office), time zone, language, date and time format, working hours, and the mailbox purpose (user or shared).
outlook_mail_ list_ categoriesList the user's Outlook categories (name and color).
outlook_mail_ list_ message_ rulesList the Inbox rules (what each one matches and does, in the order they run).
outlook_mail_ set_ automatic_ repliesTurn automatic replies (out of office) on, off, or on for a period, with the reply text.
outlook_mail_ update_ mailbox_ settingsChange mailbox settings: automatic replies, time zone, language, date and time format, working hours.
outlook_mail_ get_ profileThe signed-in user's profile: displayName, mail, userPrincipalName, id, jobTitle, preferredLanguage.
outlook_mail_ find_ peopleFind people the user works or corresponds with, ranked by relevance: colleagues, frequent contacts and saved contacts.
outlook_mail_ copy_ messageCopy a message to another folder; returns the copy.
outlook_mail_ count_ folder_ messagesCount the messages in a folder; with $filter=isRead eq false, the unread ones.
outlook_mail_ count_ messagesCount messages across the mailbox; with $filter (e.g. isRead eq false) counts only matching ones.
outlook_mail_ create_ draft_ from_ mimeCreate a draft from a complete MIME message (an .eml), base64-encoded.
outlook_mail_ create_ draft_ in_ folderCreate a message in a specific folder (a draft unless the folder is not Drafts, which files a copy there).
outlook_mail_ create_ forward_ draftCreate a draft that forwards the message (nothing is sent).
outlook_mail_ create_ reply_ all_ draftCreate a reply-all draft (nothing is sent).
outlook_mail_ get_ mail_ tipsBefore sending, check recipients: automatic replies (out of office), full mailboxes, external recipients, moderation, delivery restrictions, maximum message size.
outlook_mail_ get_ message_ mimeThe message as raw MIME (RFC 822 text, the .eml format), with every header.
outlook_mail_ list_ folder_ message_ changesMessages added, changed or deleted in one folder since the last call (change tracking).
outlook_mail_ permanently_ delete_ messageDelete a message for good (it skips Deleted Items and cannot be restored by the user).
outlook_mail_ send_ mailSend a new message in Graph's own shape { message, saveToSentItems }.
outlook_mail_ send_ mime_ messageSend a complete MIME message (an .eml), base64-encoded.
outlook_mail_ count_ contact_ child_ foldersCount the folders inside a contact folder.
outlook_mail_ count_ contact_ foldersCount the contact folders.
outlook_mail_ count_ folder_ contactsCount the contacts in one contact folder.
outlook_mail_ create_ contact_ child_ folderCreate a folder inside a contact folder.
outlook_mail_ create_ contact_ folderCreate a contact folder.
outlook_mail_ create_ contact_ in_ folderCreate a contact in a specific contact folder.
outlook_mail_ delete_ contact_ folderDelete a contact folder and its contacts.
outlook_mail_ get_ contact_ folderOne contact folder.
outlook_mail_ list_ contact_ child_ foldersList the folders inside a contact folder.
outlook_mail_ list_ contact_ folder_ changesContact folders added, changed or removed since the last call; pass the @odata.deltaLink as cursor next time.
outlook_mail_ list_ contact_ foldersList the contact folders.
outlook_mail_ list_ folder_ contact_ changesContacts added, changed or removed in one contact folder since the last call; pass the @odata.deltaLink as cursor next time.
outlook_mail_ list_ folder_ contactsList the contacts in one contact folder.
outlook_mail_ permanently_ delete_ contact_ folderDelete a contact folder and its contacts for good.
outlook_mail_ update_ contact_ folderRename a contact folder.
outlook_mail_ copy_ folderCopy a folder (with its contents) into another folder.
outlook_mail_ count_ child_ foldersCount the subfolders of a mail folder.
outlook_mail_ count_ foldersCount the top-level mail folders.
outlook_mail_ create_ child_ folderCreate a folder inside another folder, or a search folder.
outlook_mail_ delete_ folderDelete a mail folder and everything in it (it moves to Deleted Items).
outlook_mail_ list_ folder_ changesFolders added, changed or removed since the last call (change tracking).
outlook_mail_ move_ folderMove a folder (with its contents) into another folder.
outlook_mail_ permanently_ delete_ folderDelete a folder and its contents for good (they skip Deleted Items).
outlook_mail_ update_ folderRename a mail folder.
outlook_mail_ count_ contact_ extensionsCount the open extensions on a contact.
outlook_mail_ count_ message_ extensionsCount the open extensions on a message.
outlook_mail_ create_ contact_ extensionStore custom app data on a contact as an open extension.
outlook_mail_ create_ message_ extensionStore custom app data on a message as an open extension.
outlook_mail_ delete_ contact_ extensionRemove an open extension from a contact.
outlook_mail_ delete_ message_ extensionRemove an open extension from a message.
outlook_mail_ get_ contact_ extensionRead one open extension on a contact.
outlook_mail_ get_ message_ extensionRead one open extension on a message.
outlook_mail_ list_ contact_ extensionsList the open extensions (custom app data) on a contact.
outlook_mail_ list_ message_ extensionsList the open extensions (custom app data) stored on a message.
outlook_mail_ update_ contact_ extensionChange the data of an open extension on a contact.
outlook_mail_ update_ message_ extensionChange the data of an open extension on a message.
outlook_mail_ count_ contactsCount the contacts in the default contact folder.
outlook_mail_ delete_ contactDelete a contact (it moves to Deleted Items).
outlook_mail_ get_ contact_ photoA contact's photo, returned as an image.
outlook_mail_ get_ contact_ photo_ infoA contact photo's size and type.
outlook_mail_ permanently_ delete_ contactDelete a contact for good.
outlook_mail_ set_ contact_ photoUpload a contact's photo (JPEG or PNG, base64).
outlook_mail_ count_ attachmentsCount a message's attachments (inline images included).
outlook_mail_ create_ attachment_ upload_ sessionStart uploading a file of 3 MB to 150 MB to a draft.
outlook_mail_ delete_ attachmentRemove an attachment from a draft.
outlook_mail_ get_ attachment_ rawThe raw content of an attachment: a file's bytes, or an attached message as MIME (.eml) text.
outlook_mail_ count_ categoriesCount the user's Outlook categories.
outlook_mail_ count_ focused_ inbox_ overridesCount the Focused Inbox sender overrides.
outlook_mail_ count_ message_ rulesCount the Inbox rules.
outlook_mail_ create_ categoryCreate an Outlook category with a color.
outlook_mail_ create_ focused_ inbox_ overrideAlways put a sender's mail in Focused (or in Other).
outlook_mail_ create_ subscriptionAsk Microsoft to call an HTTPS webhook when mail or contacts change (new message in the Inbox, for example).
outlook_mail_ delete_ categoryDelete an Outlook category from the list (messages keep the name as plain text).
outlook_mail_ delete_ focused_ inbox_ overrideRemove a sender override (Outlook goes back to sorting that sender itself).
outlook_mail_ delete_ message_ ruleDelete an Inbox rule.
outlook_mail_ delete_ subscriptionStop a change-notification subscription.
outlook_mail_ get_ categoryOne Outlook category.
outlook_mail_ get_ focused_ inbox_ overrideOne Focused Inbox sender override.
outlook_mail_ get_ message_ ruleOne Inbox rule.
outlook_mail_ get_ subscriptionOne change-notification subscription.
outlook_mail_ list_ focused_ inbox_ overridesList the senders whose mail always goes to Focused or to Other in the Focused Inbox.
outlook_mail_ list_ subscriptionsList the change-notification subscriptions this app holds for the signed-in user.
outlook_mail_ list_ supported_ languagesThe languages the mailbox supports (locale codes for mailbox settings).
outlook_mail_ list_ supported_ time_ zonesThe time zones the mailbox supports (Windows names), for mailbox settings and automatic replies.
outlook_mail_ list_ supported_ time_ zones_ in_ standardThe supported time zones in one naming standard: timeZoneStandard Windows or Iana.
outlook_mail_ reauthorize_ subscriptionReauthorize a subscription after Microsoft sent a reauthorizationRequired lifecycle notification.
outlook_mail_ renew_ subscriptionExtend a subscription (new expirationDateTime, at most 10,080 minutes ahead for Outlook) or change its notificationUrl.
outlook_mail_ update_ categoryChange a category's color (its name cannot be changed).
outlook_mail_ update_ focused_ inbox_ overrideSwitch a sender override between Focused and Other.
outlook_mail_ update_ message_ ruleChange an Inbox rule: rename it, turn it on or off, change its order, conditions or actions.
outlook_mail_ translate_ idsConvert Outlook item ids between formats (Graph REST ids, immutable ids, EWS ids, entry ids), up to 1000 at once.
Authorize once, then an endpoint your client signs into. Nothing to deploy, and nothing to install on the Outlook Mail side.
Register an app in the Microsoft Entra admin center with Any Entra ID Tenant + Personal Microsoft accounts, add PopMCP's Redirect URI under Authentication as a Web platform, copy the Application (client) ID and a client secret Value into PopMCP, then click Sign in with Microsoft and approve access on Microsoft's own page.
00001111-aaaa-2222-bbbb-3333cccc4444••••••••••••3f7aLeave empty unless your app is single tenantsend_email, reply_to_message, forward_message and delete_message act the moment the AI calls them. New connections start read-only, only clients ticked on the PopMCP consent screen reach your mailbox, and other mailboxes stay out of reach unless you allow shared mailboxes.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Outlook Mail credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Which emails from this week are still unread, and which of them need a reply from me?
outlook_mail_search_messagesok
Then just ask for the work
“Which emails from this week are still unread, and which of them need a reply from me?”
“Reply to Priya's contract email with the signed PDF attached”
“What does the contract attached to Acme's latest email say about payment terms?”
“File every newsletter in my inbox older than a month into Archive and mark them read”
“Turn on my out of office from Friday until next Monday and point people to Sam”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Outlook Mail behind an AI client.
Sign in with Microsoft and approve access on Microsoft's own page, so your password never reaches PopMCP. Today that sign-in runs through an app you register once in the Microsoft Entra admin center: pick Any Entra ID Tenant + Personal Microsoft accounts, add PopMCP's Redirect URI under Authentication as a Web platform, then copy the Application (client) ID and a client secret Value into the connect form. Tokens renew on their own after that.
Yes. Work or school accounts on Microsoft 365 and personal Microsoft accounts (Outlook.com, Hotmail, Live) both connect, as long as the app allows personal accounts. The mailbox has to live in Exchange Online: a mailbox on an on-premises Exchange server, or an account with no mailbox, is refused at connect time with a sentence that says so. Shared mailboxes need a work or school account.
Yes, two ways, both under More options and both for work or school accounts. Enter the shared mailbox's address and the whole connection becomes that mailbox, refusing any other. Or tick Shared and delegated mailboxes, and tools take a mailbox input for any mailbox your account can open. Either way an Exchange admin must have given your account Full Access to read and Send As to send.
Many organizations only let people approve apps from verified publishers, or none at all. Outlook Mail asks only for permissions that need no administrator by Microsoft's rules, but your organization's settings win. An admin approves once for everyone: in the Entra admin center open Entra ID, Enterprise apps, pick the app, then Permissions and Grant admin consent. Personal Outlook.com accounts never need an admin.
Yes. send_email, reply_with_attachments and forward_with_attachments take files up to 150 MB each: files under 3 MB go with the message and larger ones are uploaded in parts through Microsoft's upload sessions. Your mailbox's own limit still applies when the message is sent: Exchange Online defaults to 35 MB per message, which an admin can raise, and Outlook.com is lower. read_attachment reads Word, Excel, PowerPoint and text files, and returns images as images.
16 in total. Instant notifications for an email received, changed, deleted or sent, and a contact created. Polling for an email from a watched sender, one with an attachment and one marked high importance. Change detection for an email flagged, a draft saved, a new folder, Inbox rule or color category, a Focused Inbox sender rule and automatic replies turned on or off. One threshold fires when unread Inbox mail climbs above the number you set.
46 everyday tools load by default, including the 12 that do several steps at once: search_messages, send_email, move_messages, update_messages, read_attachment, get_conversation, inbox_overview and more. All 114 operations stay reachable through search_tools, describe_tool and raw_operation, 56 that read and 58 that write, from Inbox rules and Focused Inbox to contact folders, change tracking and MIME.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect Outlook Mail in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Outlook Mail on the consent screen. The Outlook Mail tools are then available in that session, and no Outlook Mail credential is stored on your machine.
Loading 126 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 42-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 126 here. A trigger is something PopMCP watches for you: 16 Outlook Mail events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Outlook Mail.
Launch a hosted MCP endpoint for Outlook Mail, keep tool access under control, and start testing real workflow prompts right away.