100+ integrations are ready to connect to your AI.Connect your first MCP

Outlook Mail MCP server for your AI

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

Which emails from this week are still unread, and which of them need a reply from me?

Supported Outlook Mail tools

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_read

Run 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_draft

Create a draft message (nothing is sent).

outlook_mail_create_reply_draft

Create a reply draft to the sender (nothing is sent), already threaded with the original.

outlook_mail_delete_message

Delete a message: it moves to Deleted Items (it can be recovered there).

outlook_mail_forward_message

Forward a message now.

outlook_mail_forward_with_attachments

Forward 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_conversation

Read a whole email thread, oldest first: each message's sender, recipients, date and its own new text (without the quoted history).

outlook_mail_get_message

Read 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_overview

A 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_messages

List the messages in one folder.

outlook_mail_list_messages

List messages across the whole mailbox (every folder, newest first).

outlook_mail_move_message

Move a message to another folder (archive it, file it, or move it out of Junk).

outlook_mail_move_messages

Move up to 50 messages to a folder in one call (archive them, file them, move them out of Junk).

outlook_mail_reply_all_to_message

Reply to the sender and every recipient now.

outlook_mail_reply_to_message

Reply to the sender now (threaded with the original, saved in Sent Items).

outlook_mail_reply_with_attachments

Reply (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_messages

Find messages: by words (sender, subject and body), sender, recipient, subject, folder (name or path), date range, unread, flagged, attachments or importance.

outlook_mail_send_draft

Send a draft.

outlook_mail_send_email

Send 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_message

Change a message: mark read or unread, flag it, set categories or importance, or edit a draft's subject, body and recipients.

outlook_mail_update_messages

Change 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_folder

Create a top-level mail folder.

outlook_mail_find_folder

Find a mail folder by name or path and get its id, path, unread and total counts.

outlook_mail_get_folder

One mail folder with its unreadItemCount, totalItemCount and childFolderCount.

outlook_mail_list_child_folders

List the subfolders of a mail folder.

outlook_mail_list_folders

List the top-level mail folders (Inbox, Drafts, Sent Items, Deleted Items, Archive, Junk Email and your own) with unreadItemCount and totalItemCount.

outlook_mail_create_contact

Create an Outlook contact.

outlook_mail_get_contact

One contact with every detail.

outlook_mail_list_contacts

List the user's Outlook contacts (default contact folder): names, email addresses, phones, company.

outlook_mail_update_contact

Change a contact: send only the fields that change.

outlook_mail_add_attachment

Attach a file under 3 MB (or another Outlook item, or a link) to a draft.

outlook_mail_get_attachment

One 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_attachments

List a message's attachments: id, name, contentType, size, isInline (file contents are left out).

outlook_mail_read_attachment

Read 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_rule

Create an Inbox rule that files, flags, categorizes, deletes or forwards incoming mail.

outlook_mail_get_mailbox_settings

Mailbox 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_categories

List the user's Outlook categories (name and color).

outlook_mail_list_message_rules

List the Inbox rules (what each one matches and does, in the order they run).

outlook_mail_set_automatic_replies

Turn automatic replies (out of office) on, off, or on for a period, with the reply text.

outlook_mail_update_mailbox_settings

Change mailbox settings: automatic replies, time zone, language, date and time format, working hours.

outlook_mail_get_profile

The signed-in user's profile: displayName, mail, userPrincipalName, id, jobTitle, preferredLanguage.

outlook_mail_find_people

Find people the user works or corresponds with, ranked by relevance: colleagues, frequent contacts and saved contacts.

outlook_mail_copy_message

Copy a message to another folder; returns the copy.

outlook_mail_count_folder_messages

Count the messages in a folder; with $filter=isRead eq false, the unread ones.

outlook_mail_count_messages

Count messages across the mailbox; with $filter (e.g. isRead eq false) counts only matching ones.

outlook_mail_create_draft_from_mime

Create a draft from a complete MIME message (an .eml), base64-encoded.

outlook_mail_create_draft_in_folder

Create a message in a specific folder (a draft unless the folder is not Drafts, which files a copy there).

outlook_mail_create_forward_draft

Create a draft that forwards the message (nothing is sent).

outlook_mail_create_reply_all_draft

Create a reply-all draft (nothing is sent).

outlook_mail_get_mail_tips

Before sending, check recipients: automatic replies (out of office), full mailboxes, external recipients, moderation, delivery restrictions, maximum message size.

outlook_mail_get_message_mime

The message as raw MIME (RFC 822 text, the .eml format), with every header.

outlook_mail_list_folder_message_changes

Messages added, changed or deleted in one folder since the last call (change tracking).

outlook_mail_permanently_delete_message

Delete a message for good (it skips Deleted Items and cannot be restored by the user).

outlook_mail_send_mail

Send a new message in Graph's own shape { message, saveToSentItems }.

outlook_mail_send_mime_message

Send a complete MIME message (an .eml), base64-encoded.

outlook_mail_count_contact_child_folders

Count the folders inside a contact folder.

outlook_mail_count_contact_folders

Count the contact folders.

outlook_mail_count_folder_contacts

Count the contacts in one contact folder.

outlook_mail_create_contact_child_folder

Create a folder inside a contact folder.

outlook_mail_create_contact_folder

Create a contact folder.

outlook_mail_create_contact_in_folder

Create a contact in a specific contact folder.

outlook_mail_delete_contact_folder

Delete a contact folder and its contacts.

outlook_mail_get_contact_folder

One contact folder.

outlook_mail_list_contact_child_folders

List the folders inside a contact folder.

outlook_mail_list_contact_folder_changes

Contact folders added, changed or removed since the last call; pass the @odata.deltaLink as cursor next time.

outlook_mail_list_contact_folders

List the contact folders.

outlook_mail_list_folder_contact_changes

Contacts added, changed or removed in one contact folder since the last call; pass the @odata.deltaLink as cursor next time.

outlook_mail_list_folder_contacts

List the contacts in one contact folder.

outlook_mail_permanently_delete_contact_folder

Delete a contact folder and its contacts for good.

outlook_mail_update_contact_folder

Rename a contact folder.

outlook_mail_copy_folder

Copy a folder (with its contents) into another folder.

outlook_mail_count_child_folders

Count the subfolders of a mail folder.

outlook_mail_count_folders

Count the top-level mail folders.

outlook_mail_create_child_folder

Create a folder inside another folder, or a search folder.

outlook_mail_delete_folder

Delete a mail folder and everything in it (it moves to Deleted Items).

outlook_mail_list_folder_changes

Folders added, changed or removed since the last call (change tracking).

outlook_mail_move_folder

Move a folder (with its contents) into another folder.

outlook_mail_permanently_delete_folder

Delete a folder and its contents for good (they skip Deleted Items).

outlook_mail_update_folder

Rename a mail folder.

outlook_mail_count_contact_extensions

Count the open extensions on a contact.

outlook_mail_count_message_extensions

Count the open extensions on a message.

outlook_mail_create_contact_extension

Store custom app data on a contact as an open extension.

outlook_mail_create_message_extension

Store custom app data on a message as an open extension.

outlook_mail_delete_contact_extension

Remove an open extension from a contact.

outlook_mail_delete_message_extension

Remove an open extension from a message.

outlook_mail_get_contact_extension

Read one open extension on a contact.

outlook_mail_get_message_extension

Read one open extension on a message.

outlook_mail_list_contact_extensions

List the open extensions (custom app data) on a contact.

outlook_mail_list_message_extensions

List the open extensions (custom app data) stored on a message.

outlook_mail_update_contact_extension

Change the data of an open extension on a contact.

outlook_mail_update_message_extension

Change the data of an open extension on a message.

outlook_mail_count_contacts

Count the contacts in the default contact folder.

outlook_mail_delete_contact

Delete a contact (it moves to Deleted Items).

outlook_mail_get_contact_photo

A contact's photo, returned as an image.

outlook_mail_get_contact_photo_info

A contact photo's size and type.

outlook_mail_permanently_delete_contact

Delete a contact for good.

outlook_mail_set_contact_photo

Upload a contact's photo (JPEG or PNG, base64).

outlook_mail_count_attachments

Count a message's attachments (inline images included).

outlook_mail_create_attachment_upload_session

Start uploading a file of 3 MB to 150 MB to a draft.

outlook_mail_delete_attachment

Remove an attachment from a draft.

outlook_mail_get_attachment_raw

The raw content of an attachment: a file's bytes, or an attached message as MIME (.eml) text.

outlook_mail_count_categories

Count the user's Outlook categories.

outlook_mail_count_focused_inbox_overrides

Count the Focused Inbox sender overrides.

outlook_mail_count_message_rules

Count the Inbox rules.

outlook_mail_create_category

Create an Outlook category with a color.

outlook_mail_create_focused_inbox_override

Always put a sender's mail in Focused (or in Other).

outlook_mail_create_subscription

Ask Microsoft to call an HTTPS webhook when mail or contacts change (new message in the Inbox, for example).

outlook_mail_delete_category

Delete an Outlook category from the list (messages keep the name as plain text).

outlook_mail_delete_focused_inbox_override

Remove a sender override (Outlook goes back to sorting that sender itself).

outlook_mail_delete_message_rule

Delete an Inbox rule.

outlook_mail_delete_subscription

Stop a change-notification subscription.

outlook_mail_get_category

One Outlook category.

outlook_mail_get_focused_inbox_override

One Focused Inbox sender override.

outlook_mail_get_message_rule

One Inbox rule.

outlook_mail_get_subscription

One change-notification subscription.

outlook_mail_list_focused_inbox_overrides

List the senders whose mail always goes to Focused or to Other in the Focused Inbox.

outlook_mail_list_subscriptions

List the change-notification subscriptions this app holds for the signed-in user.

outlook_mail_list_supported_languages

The languages the mailbox supports (locale codes for mailbox settings).

outlook_mail_list_supported_time_zones

The time zones the mailbox supports (Windows names), for mailbox settings and automatic replies.

outlook_mail_list_supported_time_zones_in_standard

The supported time zones in one naming standard: timeZoneStandard Windows or Iana.

outlook_mail_reauthorize_subscription

Reauthorize a subscription after Microsoft sent a reauthorizationRequired lifecycle notification.

outlook_mail_renew_subscription

Extend a subscription (new expirationDateTime, at most 10,080 minutes ahead for Outlook) or change its notificationUrl.

outlook_mail_update_category

Change a category's color (its name cannot be changed).

outlook_mail_update_focused_inbox_override

Switch a sender override between Focused and Other.

outlook_mail_update_message_rule

Change an Inbox rule: rename it, turn it on or off, change its order, conditions or actions.

outlook_mail_translate_ids

Convert Outlook item ids between formats (Graph REST ids, immutable ids, EWS ids, entry ids), up to 1000 at once.

Connect Outlook Mail to Claude, ChatGPT and Claude Code

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.

Application (client) ID00001111-aaaa-2222-bbbb-3333cccc4444
Client secret Value••••••••••••3f7a
Directory (tenant) IDLeave empty unless your app is single tenant
Authorize PopMCP on Outlook MailAuthorize

Then just ask for the work

  • “Which emails from this week are still unread, and which of them need a reply from me?”

    • search_messages
    • get_conversation
  • “Reply to Priya's contract email with the signed PDF attached”

    • search_messages
    • reply_with_attachments
  • “What does the contract attached to Acme's latest email say about payment terms?”

    • search_messages
    • read_attachment
  • “File every newsletter in my inbox older than a month into Archive and mark them read”

    • search_messages
    • move_messages
    • update_messages
  • “Turn on my out of office from Friday until next Monday and point people to Sam”

    • set_automatic_replies

Use Outlook Mail from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

Outlook Mail MCP server questions

What teams ask before putting Outlook Mail behind an AI client.

How do I connect Outlook Mail to PopMCP?

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.

Does it work with personal Outlook.com accounts?

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.

Can the AI work in a shared mailbox like support@?

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.

Why does Microsoft say an administrator has to approve the app?

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.

Can the AI send email with large attachments?

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.

Which Outlook Mail events can PopMCP watch?

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.

How many Outlook Mail tools load into my AI client?

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.

Do I have to run or host the Outlook Mail MCP server myself?

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.

Which AI clients can use this MCP server?

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.

How do I connect Outlook Mail to Claude Code?

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.

Why do only 42 of the 126 tools load by default?

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.

What is the difference between a tool and a trigger?

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.

Connect Outlook Mail to your AI in minutes

Launch a hosted MCP endpoint for Outlook Mail, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP