# Outlook Mail MCP connector

The Outlook Mail connector lets Claude, ChatGPT, Cursor and other AI clients read, search, draft, send, reply to and file email inside each person's own Outlook Mail mailbox, with every action restricted per person and recorded in an audit log.

Source: https://elaichi.ai/connectors/outlook/

## Facts

| | |
| --- | --- |
| Application | Outlook Mail |
| Category | Email |
| AI tools | 37 |
| Authentication | Connects over OAuth |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 37 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Outlook Mail is connected

- Summarize unread messages in the support inbox from yesterday.
- Find messages from Acme about the renewal contract.
- Draft a reply to the latest message from Priya.

## Connect Outlook Mail in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Outlook Mail.
2. Optionally set Share with, then press Connect.
3. Approve it in Outlook Mail. Outlook Mail's own window opens. Whoever approves it decides what this connection can reach.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Outlook Mail tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Outlook Mail to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Outlook Mail to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Outlook Mail to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Outlook Mail to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Outlook Mail tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Outlook Mail through Elaichi

### Catch up on a prospect before the call

Sales. Ask for every message from a prospect this quarter and get a short summary of where the conversation stands. Have a follow-up drafted in Outlook Mail so it is waiting for you to send after the call.

### Turn a customer's email into an answer

Support. Pull up the customer's message and its attachments, draft a reply that answers what they actually asked, and move the thread into the resolved folder once it is handled.

### Forward candidate emails to the interviewer

Recruiting. Find the messages a candidate has sent, resume included, and forward them to the hiring manager with a note on what to look at. Nobody has to hunt through the inbox by hand.

### Collect every invoice sitting in the inbox

Finance. Search Outlook Mail for messages with invoices attached, download the attachments, and move the messages into a month-end folder so nothing is missed at close.

### Keep vendor and project mail organized

Operations. Create folders by vendor or project and move messages into them as they arrive. A cluttered inbox becomes something the whole team can work from.

### Draft replies for a full inbox

Executive assistants. Go through the unread messages, draft a reply to each one in the right tone, and leave them as drafts in Outlook Mail to review before anything goes out.

## Frequently asked questions

### How do I connect Outlook Mail to Claude?

It takes two steps. In Elaichi, choose Outlook Mail and sign in with your Microsoft account the same way you would sign in to Outlook on the web; there is no client ID or secret to generate and nothing to register with Microsoft. Then in Claude, open Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Claude will ask you to sign in to Elaichi, and Outlook Mail is available from then on.

### Does Outlook Mail work with ChatGPT and Cursor as well as Claude?

Yes. Once Outlook Mail is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Outlook Mail once and every client you use picks it up, so there is nothing to redo per app.

### What can an AI agent actually do with my Outlook Mail data?

With Outlook Mail connected, an agent can search your mailbox, read a message or a whole thread, summarize it, and draft, send, reply, reply all or forward on your behalf. It can download attachments, move messages into folders, and create or rename folders to keep things organized. Because Outlook Mail offers a lot of actions, short concrete asks such as "find last week's emails from Acme with attachments" work better than long instructions.

### Does connecting Outlook Mail give the AI access to my whole mailbox?

The AI sees exactly what the person who signed in to Outlook Mail can see, and nothing more. If you cannot open a shared mailbox or another person's folders in Outlook Mail, neither can the agent working as you. Elaichi can narrow that access further, for example to reading only, but it can never widen it beyond what Outlook Mail already allows you.

### Can my team share one Outlook Mail connection?

Yes. One person connects Outlook Mail in Elaichi and shares the connection with a team, and nobody else ever handles a password or token. Each teammate still signs in to Elaichi as themselves, so every message read, sent or moved through that shared Outlook Mail connection is recorded under their own name in the audit log.

### Can I stop an agent from deleting or changing things in Outlook Mail?

Yes. Restrictions in Elaichi work per action, so you can allow reading and drafting in Outlook Mail while blocking sending, deleting messages or removing folders. A blocked action is never shown to Claude, ChatGPT, Cursor or any other client at all, so no prompt, however worded, can reach it.

### What happens to a Outlook Mail connection when someone leaves?

When a person is offboarded in Elaichi, their access to Outlook Mail through every client ends at once. If they had shared their Outlook Mail connection with a team, it keeps working for everyone else until an admin decides otherwise. Disconnecting Outlook Mail once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client in one step.

## All 37 Outlook Mail tools

Every tool below is callable through https://api.elaichi.ai/mcp once Outlook Mail is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Outlook Mail me** (List). Get the profile of the signed-in Outlook user. Returns: id, displayName, userPrincipalName, mail, jobTitle, businessPhones, givenName, surname, mobilePhone, officeLocation, and preferredLanguage. No required parameters.
- **List all Outlook Mail messages** (List). List Outlook messages for a specific user. Returns: @odata.etag, id, createdDateTime, lastModifiedDateTime, changeKey, categories, receivedDateTime, sentDateTime, hasAttachments, internetMessageId, subject, bodyPreview, importance, parentFolderId, conversationId, isDeliveryReceiptRequested, isReadReceiptRequested, isRead, isDraft, webLink, inferenceClassification, body, sender, from,…
- **Get single Outlook Mail message by ID** (Get). Get a single Outlook message by id. Returns: @odata.context, @odata.etag, id, subject, bodyPreview, parentFolderId, body, uniqueBody. Required: user_id, id.
- **Create a Outlook Mail message** (Create). Create a new Outlook message draft for a specific user. Returns the created message including id, subject, body, toRecipients, isDraft, importance, sender, and receivedDateTime. Required: user_id.
- **Update a Outlook Mail message by ID** (Update). Update properties of an Outlook message by id. Returns the updated message including id, subject, body, isRead, importance, inferenceClassification, and toRecipients. Required: user_id, id.
- **Delete a Outlook Mail message by ID** (Delete). Delete an Outlook message by id. Returns an empty 204 response on success. Required: user_id, id.
- **Outlook Mail messages send draft** (Send). Send a previously created draft message in Outlook. The sent message is saved in the Sent Items folder. Returns an empty 202 response on success. Required: user_id, message_id.
- **Outlook Mail messages send mail** (Send). Send a new email message in Outlook via the sendMail action, optionally saving it to Sent Items. The message body can be provided in JSON or MIME format. Returns an empty 202 response on success. Required: user_id, message.
- **Outlook Mail messages reply** (Reply). Reply to the sender of an Outlook message, saving the reply in the Sent Items folder. Accepts a comment and optional writable message properties such as toRecipients to add or override recipients. Returns an empty 202 response on success. Required: user_id, message_id.
- **Outlook Mail messages reply all** (Reply). Reply to all recipients of an Outlook message on behalf of a specified user. The original sender and all recipients are included automatically. Returns an empty 202 Accepted response on success. Required: user_id, message_id.
- **Outlook Mail messages forward** (Forward). Forward an Outlook message from the connected user mailbox to one or more recipients. Returns an empty 202 Accepted response on success. Required: message_id.
- **Outlook Mail messages forward as user** (Forward). Forward an Outlook message from a specific user's mailbox to one or more recipients. Returns an empty 202 Accepted response on success. Required: user_id, message_id, toRecipients.
- **Outlook Mail messages move** (Move). Move an Outlook message to a different folder by specifying a destination folder id or well-known folder name. Returns the moved message object including id, subject, receivedDateTime, parentFolderId, body, and toRecipients. Required: user_id, message_id, destinationId.
- **List all Outlook Mail search** (List). Search for content across Outlook entities such as messages and events via the Microsoft Graph search API. Returns: hitId, rank, summary, resource. Required: requests with entityTypes and query. Max 25 results per page.
- **List all Outlook Mail attachments** (List). List attachments for an Outlook message. Returns: @odata.type, id, lastModifiedDateTime, name, contentType, size, isInline, contentId, contentLocation, contentBytes, item.type for each attachment. Required: message_id.
- **Outlook Mail attachments download** (Download). Download the raw binary contents of a file or item attachment from an Outlook message. Returns the raw binary content stream of the attachment (MIME format for item attachments). Required: message_id, attachment_id. Requesting the $value of a reference attachment returns HTTP 405.
- **Get single Outlook Mail attachment by ID** (Get). Get a single attachment from a specific Outlook message, returning its metadata and content. Returns: @odata.context, @odata.type, id, lastModifiedDateTime, name, contentType, size, isInline, contentId, contentLocation, contentBytes, item.context, @odata.type, id, lastModifiedDateTime, name, contentType, size, isInline, contentId, contentLocation, contentBytes, item. Required: message_id, id.
- **Outlook Mail attachments download as user** (Download). Download the raw binary contents of a specific attachment from an Outlook user's message. Returns the raw attachment content as a binary stream — for file attachments the content type matches the original file; for item attachments (contact, event, message) the raw contents are returned in MIME format. Required: user_id, message_id, attachment_id.
- **List all Outlook Mail mail folders** (List). List all mail folders in the specified user's Outlook mailbox, including any mail search folders. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, @odata.type, isSupported, filterQuery, includeNestedFolders, sourceFolderIds, sizeInBytes. Required: user_id.
- **Get single Outlook Mail mail folder by ID** (Get). Get a single mail folder in Outlook by id. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, sizeInBytes. Required: user_id, id.
- **Create a Outlook Mail mail folder** (Create). Create a new mail folder in the root folder of the user's Outlook mailbox. Supports regular folders and search folders via @odata.type. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, @odata.type, filterQuery, includeNestedFolders, sourceFolderIds.type, filterQuery, includeNestedFolders, sourceFolderIds. Required: user_id, displayName.
- **Update a Outlook Mail mail folder by ID** (Update). Update the display name of a mail folder or the filter query of a search folder in Outlook. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, @odata.type, filterQuery.type, filterQuery. Required: user_id, id.
- **Delete a Outlook Mail mail folder by ID** (Delete). Delete a mail folder in Outlook by id. Returns an empty 204 response on success. Required: user_id, id.
- **List all Outlook Mail child folders** (List). List child mail folders under a specified parent folder in Outlook. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, @odata.type, isSupported, includeNestedFolders, sourceFolderIds, filterQuery, sizeInBytes. Required: user_id, mail_folder_id.
- **Create a Outlook Mail child folder** (Create). Create a new child mail folder under the specified parent folder in Outlook. Returns the created folder with id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden. Required: user_id, mail_folder_id, displayName.
- **Get single Outlook Mail child folder by ID** (Get). Get a single child mail folder by id in Outlook. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, @odata.type, isSupported, includeNestedFolders, sourceFolderIds, filterQuery, sizeInBytes. Required: user_id, mail_folder_id, id.
- **Delete a Outlook Mail child folder by ID** (Delete). Delete a child mail folder by id in Outlook. Returns an empty 204 response on success. Required: user_id, mail_folder_id, id.
- **Update a Outlook Mail child folder by ID** (Update). Update a child mail folder's properties by id in Outlook. Returns the updated folder with id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden. Required: user_id, mail_folder_id, id.
- **List all Outlook Mail folder messages** (List). List messages in a specific Outlook mail folder for a given user, with attachments expanded inline. Returns: @odata.etag, id, createdDateTime, lastModifiedDateTime, changeKey, categories, receivedDateTime, sentDateTime, hasAttachments, internetMessageId, subject, bodyPreview, importance, parentFolderId, conversationId, isDeliveryReceiptRequested, isReadReceiptRequested, isRead, isDraft, webLink,…
- **List all Outlook Mail users** (List). List users in Microsoft Graph. Returns a paged collection of user objects with id, displayName, mail, userPrincipalName, jobTitle, givenName, surname, and other directory profile fields for each user in the tenant. No required parameters.
- **Get single Outlook Mail user by ID** (Get). Get a single Outlook (Microsoft Graph) user by id. Returns the user object including id, displayName, givenName, mail, userPrincipalName, and businessPhones. Required: id.
- **List all Outlook Mail subscriptions** (List). List Microsoft Graph webhook subscriptions. Returns: id, resource, applicationId, changeType, clientState, notificationUrl, lifecycleNotificationUrl, expirationDateTime, creatorId, latestSupportedTlsVersion, encryptionCertificate, encryptionCertificateId, includeResourceData, notificationContentType, notificationQueryOptions, notificationUrlAppId. This method does not support OData query…
- **Get single Outlook Mail subscription by ID** (Get). Get a single Microsoft Graph webhook subscription by id. Returns: id, resource, applicationId, changeType, clientState, notificationUrl, lifecycleNotificationUrl, expirationDateTime, creatorId, latestSupportedTlsVersion, encryptionCertificate, encryptionCertificateId, includeResourceData, notificationContentType, notificationUrlAppId. Required: id.
- **Create a Outlook Mail subscription** (Create). Create a Microsoft Graph subscription to receive change notifications when subscribed resources change. Returns the created subscription including id, resource, changeType, notificationUrl, expirationDateTime, applicationId, creatorId, and latestSupportedTlsVersion. Required: changeType, notificationUrl, resource, expirationDateTime.
- **Update a Outlook Mail subscription by ID** (Update). Update a Microsoft Graph subscription's expiration time for renewal and/or notification URL for delivery. Returns the updated subscription object including id, resource, changeType, notificationUrl, expirationDateTime, and creatorId. Required: id.
- **Delete a Outlook Mail subscription by ID** (Delete). Delete a Microsoft Graph subscription by id. Returns an empty 204 response on success. Required: id.
- **Outlook Mail subscriptions reauthorize** (Action). Reauthorize a Microsoft Graph subscription by triggering a reauthorization validation request to the notification URL. Returns an empty 204 response on success. Required: subscription_id.
