Connect Your AI Agent with Microsoft Outlook Email for Slack

Integrate Microsoft Outlook Email MCP server into your Slack workspace for instant access to your AI agent.

No credit card neededOr, book a demo
Documentation
Back to MCP Servers
Microsoft Outlook Email
Microsoft Outlook Email
Microsoft Outlook lets you bring all your email accounts and calendars in one convenient spot.

Categories

Communication

Available Tools

Tools that your AI agent can use through this MCP server to interact with Microsoft Outlook Email

Update Contact

Update an existing contact, See the docs

Send Email

Send a new email, reply to an existing message, or save a draft — all in one tool. Omit inReplyToMessageId to send a new email. Provide inReplyToMessageId to reply to an existing message (threads correctly). Set isDraft: true to save to Drafts instead of sending immediately. Attach files by passing URLs or /tmp paths to files. Example (send new): send-email(recipients=["[email protected]"], subject="Hello", content="Hi there") Example (reply): send-email(inReplyToMessageId="AAMk...", content="Thanks for your note") Example (draft): send-email(recipients=["[email protected]"], subject="Weekly report", content="...", isDraft=true) Use Find Email to locate a message id before replying. See the documentation

Save Contact

Create or update an Outlook contact (upsert). Omit contactId to create a new contact; provide contactId to update an existing one. Use Find Contacts first to look up a contact's id before updating. Example (create): save-contact(givenName="Cosmo", surname="Kramer", emailAddresses=["[email protected]"]) → creates contact, returns new contact object with id. Example (update): save-contact(contactId="AQMk...", businessPhones=["+1-555-0100"]) → patches the existing contact. See the create documentation See the update documentation

Reply to Email

Reply to an email in Microsoft Outlook. See the documentation

Remove Label from Email

Removes a label/category from an email in Microsoft Outlook. See the documentation

Move Email to Folder

Moves an email to the specified folder in Microsoft Outlook. See the documentation

Modify Email

Apply one or more state mutations to an email message: mark read/unread, add/remove categories, move to a folder, or change the flag status. All params except messageId are optional — only the ones you provide are applied. Use Find Email to obtain a message id before modifying. Recipes: Mark read: isRead: true | Mark unread: isRead: false Add category: addCategories: ["Follow Up"] | Remove category: removeCategories: ["Follow Up"] Move to archive: destinationFolderId: "archive" | Move to inbox: destinationFolderId: "inbox" Flag: flagStatus: "flagged" | Unflag: flagStatus: "notFlagged" | Mark complete: flagStatus: "complete" Example: modify-email(messageId="AAMk...", isRead=true) → marks the message as read. Example: modify-email(messageId="AAMk...", addCategories=["Eval-Seinfeld"], destinationFolderId="archive") → adds a category AND moves to archive in a single call. See the documentation

List Shared Folders

Retrieves mail folders from a shared or delegated mailbox. Returns each folder's id, displayName, parentFolderId, childFolderCount, totalItemCount, and unreadItemCount. Use this action to resolve a shared mailbox folder display name to its ID — set Display Name to filter by exact name. Use Get Shared Folder instead when you already have the folder ID. See the documentation

List Labels

Get all the labels/categories that have been defined for a user. See the documentation

List Important Mail

Get the most important mail from the user's Inbox. See the documentation

List Folders

Retrieves mail folders for the authenticated user. Returns each folder's id, displayName, parentFolderId, childFolderCount, totalItemCount, and unreadItemCount. Use this action to resolve a folder display name to its ID — set Display Name to filter by exact name. Use Get Folder instead when you already have the folder ID. See the documentation

List Folder IDs to Monitor Options

Retrieves available options for the Folder IDs to Monitor field.

List Contacts

Get a contact collection from the default contacts folder, See the documentation

List Contact Options

Retrieves available options for the Contact field.

Get Shared Folder

Retrieve a single folder from a shared mailbox by its ID. Returns the folder's id, displayName, parentFolderId, childFolderCount, totalItemCount, and unreadItemCount. If you only have a display name and need the ID, use List Shared Folders first. See the documentation

Get Message

Fetch a single email message by its Microsoft Graph message ID, including full body and optional attachments. Use Find Email first to search for messages and obtain a message id; then call this tool to retrieve the full content. Set includeAttachments: true to expand attachment metadata — the id field of each attachment is required by Download Attachment. Example: after find-email(search="Eval-Festivus") returns a message with id: "AAMk...", call get-message(messageId="AAMk...", includeAttachments=true) to get the body text and attachment list. See the documentation

Get Folder

Retrieve a single mail folder by its ID. Returns the folder's id, displayName, parentFolderId, childFolderCount, totalItemCount, and unreadItemCount. If you only have a display name and need the ID, use List Folders first. See the documentation

Get Current User

Returns the authenticated Microsoft user's ID, display name, email, and principal name via Microsoft Graph. Call this first when the user says 'my emails', 'my inbox', or needs identity context. Use the returned id to scope queries in Find Email or identify the sender in email results. See the documentation.

Find Shared Folder Email

Search for an email in a shared folder in Microsoft Outlook. See the documentation

Find Email

Search and filter email messages in Microsoft Outlook. Returns metadata only (subject, from, date, isRead, hasAttachments, etc.) — body is excluded from list results. Use Get Message to fetch the full body or attachment details for a specific message ID. Use Get Current User first when the user says 'my email' to confirm identity. Set isRead: false to find unread messages — builds the OData filter automatically, no filter syntax required. Set folderScope: "inbox" to restrict results to the inbox only, preventing Sent/Drafts/Junk from inflating counts. Set countOnly: true to return { count: N } in a single API call without paginating — ideal for 'how many unread' queries. search and isRead can be used together — when both are set, search is automatically converted to contains(subject,...) so both constraints are applied (Graph cannot combine KQL $search with OData $filter natively). Note: this narrows the match scope to subject only, whereas a bare $search also matches body and from. countOnly cannot be combined with search. For shared mailboxes, set both userId and sharedFolderId. Example: find-email(isRead=false, folderScope="inbox", countOnly=true){ count: 47 } for unread inbox count. Example: find-email(search="Eval-Festivus", folderScope="inbox", maxResults=5) → array of messages with id, subject, from, receivedDateTime, isRead (no body — call Get Message next for body). See the documentation

Find Contacts

Search and list contacts in the authenticated user's Outlook contacts. Omit searchString to return all contacts up to maxResults. When searchString is provided, filters contacts by displayName, givenName, surname, or email address (case-sensitive substring match). Example: find-contacts(searchString="George Costanza") → returns contact record with displayName, id, emailAddresses, businessPhones. Example: find-contacts(searchString="[email protected]") → matches by email address. Use the returned contact id with Save Contact to update the contact. See the documentation

Download Attachment

Download an email attachment to /tmp. Use Find Email to locate the message, then Get Message with includeAttachments: true to get the messageId and attachment id fields. Example: after get-message(messageId="AAMk...", includeAttachments=true) returns attachments: [{ id: "AQMk...", name: "report.pdf" }], call download-attachment(messageId="AAMk...", attachmentId="AQMk...", filename="report.pdf") → writes to /tmp/report.pdf. Set convertToPdf: true to convert images, HTML, plain text, or DOCX files to PDF. For text attachments (text/*, JSON), the response includes fileContent with the decoded text (truncated at 100 KB, flagged by contentTruncated), so the content can be read directly without fetching the file. See the documentation

Create Draft Reply

Create a draft reply to an email. See the documentation

Create Draft Email

Create a draft email, See the documentation

Create Contact

Add a contact to the root Contacts folder, See the documentation

Approve Workflow

Suspend the workflow until approved by email. See the documentation

Add Label to Email

Adds a label/category to an email in Microsoft Outlook. See the documentation