CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Outlook MCP

mpalermiti/outlook-mcp
1551 toolsSTDIOregistry active
Summary

A comprehensive personal Outlook integration via Microsoft Graph API with 62 tools spanning mail, calendar, contacts, to-do lists, and drafts. Supports all the operations you'd expect: reading and searching messages, managing Focused Inbox classification, sending and replying to mail, creating calendar events with recurring expansion, CRUD on contacts and tasks, plus batch operations and attachment handling including large file upload sessions. Designed for personal Microsoft accounts only (Outlook.com, Hotmail, Live), not Entra ID work accounts. You bring your own Azure app registration, tokens live in your OS keyring, and there's optional read-only mode plus granular category permissions. Built for agent builders who need typed MCP tool schemas instead of parsing CLI stdout.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

51 tools
OUTLOOK_ADD_EVENT_ATTACHMENTAdds an attachment to a specific Outlook calendar event. Use when you need to attach a file or nested item to an existing event.6 params

Adds an attachment to a specific Outlook calendar event. Use when you need to attach a file or nested item to an existing event.

Parameters* required
itemobject
The nested item payload; required when '@odata.type' is itemAttachment.
namestring
The display name of the attachment.
user_idstring
The user's email address or 'me' for the authenticated user.default: me
event_idstring
The unique identifier of the calendar event to which the attachment will be added.
odata_typestring
Attachment type: '#microsoft.graph.fileAttachment' requires 'contentBytes'; '#microsoft.graph.itemAttachment' requires 'item'.one of #microsoft.graph.fileAttachment · #microsoft.graph.itemAttachment
contentBytesstring
Base64-encoded file contents; required when '@odata.type' is fileAttachment.
OUTLOOK_ADD_MAIL_ATTACHMENTTool to add an attachment to an email message. Use when you have a message ID and need to attach a small (<3 MB) file or reference.10 params

Tool to add an attachment to an email message. Use when you have a message ID and need to attach a small (<3 MB) file or reference.

Parameters* required
itemobject
Embedded item (e.g., message, event) for itemAttachment; must include its own '@odata.type'.
namestring
Display name of the attachment (e.g., file name).
user_idstring
The user's principal name or 'me' for the authenticated user.default: me
isInlineboolean
Set to true if the attachment should appear inline in the message body.
contentIdstring
Content ID for inline attachments, used in HTML body references.
message_idstring
Unique identifier of the email message to attach to.
odata_typestring
The OData type of the attachment. For file attachments, use '#microsoft.graph.fileAttachment'.
contentTypestring
MIME type of the attachment (e.g., 'application/pdf').
contentBytesstring
Base64-encoded content of the file attachment (max size 3 MB).
contentLocationstring
URL location or path for reference attachments.
OUTLOOK_CALENDAR_CREATE_EVENTCreates a new Outlook calendar event, ensuring `start_datetime` is chronologically before `end_datetime`.13 params

Creates a new Outlook calendar event, ensuring `start_datetime` is chronologically before `end_datetime`.

Parameters* required
bodystring
The body of the event. This can be in plain text or HTML format, as specified by the 'is_html' field.
is_htmlboolean
Specifies whether the 'body' content is HTML. Set to true for HTML content; otherwise, it's treated as plain text.default: false
show_asstring
The status to show on the calendar for the duration of the event. Valid values are: 'free', 'tentative', 'busy', 'oof' (out of office), 'workingElsewhere', 'unknown'.default: busy
subjectstring
The subject of the calendar event.
user_idstring
The UPN (User Principal Name) or object ID of the user whose calendar the event will be created in. Use 'me' for the currently authenticated user.default: me
locationstring
The physical location of the event.default:
time_zonestring
The time zone for the start and end times of the event. Uses Windows time zone names (e.g., 'Pacific Standard Time') or IANA time zone names (e.g., 'America/Los_Angeles'). UTC is also a valid input.
categoriesarray
A list of categories associated with the event. These categories must already exist in the user's mailbox.
end_datetimestring
The end date and time of the event in ISO 8601 format. Time zone is specified in 'time_zone'.
attendees_infoarray
A list of attendees for the event. Each attendee object requires an 'email'. 'name' and 'type' ('required', 'optional', 'resource') are optional.
start_datetimestring
The start date and time of the event in ISO 8601 format. Time zone is specified in 'time_zone'.
is_online_meetingboolean
Set to true to indicate that the event is an online meeting. This will automatically generate an online meeting link if 'online_meeting_provider' is set (e.g., a Microsoft Teams link).default: false
online_meeting_providerstring
Specifies the online meeting provider. Currently, only 'teamsForBusiness' is supported. If 'is_online_meeting' is true and this is set, a meeting link for the provider will be created.
OUTLOOK_CREATE_ATTACHMENT_UPLOAD_SESSIONTool to create an upload session for large (>3 MB) message attachments. Use when you need to upload attachments in chunks.3 params

Tool to create an upload session for large (>3 MB) message attachments. Use when you need to upload attachments in chunks.

Parameters* required
user_idstring
User ID or user principal name; use 'me' for the signed-in user.default: me
message_idstring
The unique identifier of the message to attach to.
attachmentItemobject
AttachmentItem object describing the attachment in the upload session.
OUTLOOK_CREATE_CALENDARTool to create a new calendar in the signed-in user's mailbox. Use when organizing events into a separate calendar.4 params

Tool to create a new calendar in the signed-in user's mailbox. Use when organizing events into a separate calendar.

Parameters* required
namestring
The display name of the new calendar.
colorstring
The theme color to assign to the calendar. Supported values: auto, lightBlue, lightGreen, lightOrange, lightGray, lightYellow, lightTeal, lightPink, lightBrown, lightPurple, lightRed.one of auto · lightBlue · lightGreen · lightOrange · lightGray · lightYellow
user_idstring
The UPN (User Principal Name) or object ID of the user where the calendar will be created. Use 'me' for the signed-in user.default: me
hexColorstring
An optional hexadecimal color code for the calendar in the format '#RRGGBB'.
OUTLOOK_CREATE_CONTACTCreates a new contact in a Microsoft Outlook user's contacts folder.15 params

Creates a new contact in a Microsoft Outlook user's contacts folder.

Parameters* required
notesstring
Personal notes about the contact. These notes are stored as 'personalNotes' in the Outlook contact details.default:
surnamestring
The contact's surname (last name).default:
user_idstring
Identifier for the user whose contact list will be modified. Use 'me' for the authenticated user, or provide the user's principal name (e.g., 'user@example.com').default: me
birthdaystring
The contact's birthday in 'YYYY-MM-DD' format. The time component will be set to midnight UTC (e.g., '1990-01-01' becomes '1990-01-01T00:00:00Z' in the API request).default:
jobTitlestring
The contact's job title.default:
givenNamestring
The contact's given (first) name.default:
homePhonestring
The contact's home phone number. If provided, this will be stored in Outlook as a list containing this single number.default:
categoriesarray
A list of categories to assign to the contact.
departmentstring
The department the contact belongs to within their company.default:
companyNamestring
The name of the company the contact is associated with.default:
displayNamestring
The contact's display name, typically their full name.default:
mobilePhonestring
The contact's mobile phone number.default:
businessPhonesarray
A list of business phone numbers for the contact. Each number should be a string.
emailAddressesarray
A list of email addresses for the contact.
officeLocationstring
The contact's office location.default:
OUTLOOK_CREATE_CONTACT_FOLDERTool to create a new contact folder in the user's mailbox. Use when needing to organize contacts into custom folders.3 params

Tool to create a new contact folder in the user's mailbox. Use when needing to organize contacts into custom folders.

Parameters* required
user_idstring
The user's principal name or object ID. Use 'me' for the authenticated user.default: me
displayNamestring
The display name of the new contact folder.
parentFolderIdstring
The ID of the parent contact folder. If omitted, created under the default contacts folder.
OUTLOOK_CREATE_DRAFTCreates an Outlook email draft with subject, body, recipients, and an optional attachment. Supports creating drafts as part of existing conversation threads by specifying a conversationId; attachments require a name, mimetype, and content.8 params

Creates an Outlook email draft with subject, body, recipients, and an optional attachment. Supports creating drafts as part of existing conversation threads by specifying a conversationId; attachments require a name, mimetype, and content.

Parameters* required
bodystring
Content of the email draft; use `is_html` to specify if HTML or plain text.
is_htmlboolean
Specifies if the `body` is HTML. If `False`, `body` is plain text.default: false
subjectstring
Subject line for the email draft.
attachmentstring
Optional file to attach. If provided, must include the file's content, name, and mimetype.
cc_recipientsarray
Optional list of CC (carbon copy) recipient email addresses.
to_recipientsarray
List of primary 'To' recipient email addresses.
bcc_recipientsarray
Optional list of BCC (blind carbon copy) recipient email addresses.
conversation_idstring
Optional conversation ID to create the draft as part of an existing email conversation thread. If provided, the draft will be part of the specified conversation instead of starting a new one.
OUTLOOK_CREATE_DRAFT_REPLYCreates a draft reply in the specified user's Outlook mailbox to an existing message (identified by a valid `message_id`), optionally including a `comment` and CC/BCC recipients.5 params

Creates a draft reply in the specified user's Outlook mailbox to an existing message (identified by a valid `message_id`), optionally including a `comment` and CC/BCC recipients.

Parameters* required
commentstring
Plain text comment to include in the body of the reply draft.
user_idstring
User's mailbox identifier (email or 'me') for the original message and new draft location.default: me
cc_emailsarray
List of email addresses to add as CC recipients to the draft reply.
bcc_emailsarray
List of email addresses to add as BCC recipients to the draft reply.
message_idstring
Unique ID of the message to reply to, typically obtained from actions like 'List Messages' or 'Get Message'.
OUTLOOK_CREATE_EMAIL_RULECreate email rule filter with conditions and actions5 params

Create email rule filter with conditions and actions

Parameters* required
actionsobject
Actions to take when the rule conditions are met.
sequenceinteger
Order in which the rule is executed (lower numbers execute first).default: 1
isEnabledboolean
Whether the rule is enabled.default: true
conditionsobject
Conditions that must be met for the rule to apply.
displayNamestring
Display name for the email rule.
OUTLOOK_CREATE_MAIL_FOLDERTool to create a new mail folder. Use when you need to organize email into a new folder.3 params

Tool to create a new mail folder. Use when you need to organize email into a new folder.

Parameters* required
user_idstring
Identifier for the user whose mailbox the folder will be created in. Use 'me' for the authenticated user or provide the user's principal name or ID.default: me
isHiddenboolean
Indicates whether the new folder is hidden. Default is false. Once set, this property cannot be updated.default: false
displayNamestring
The display name of the new mail folder.
OUTLOOK_CREATE_MASTER_CATEGORYTool to create a new category in the user's master category list. Use after selecting a unique display name.2 params

Tool to create a new category in the user's master category list. Use after selecting a unique display name.

Parameters* required
colorstring
A pre-set color constant for the category. Allowed values: preset0 through preset24.one of preset0 · preset1 · preset2 · preset3 · preset4 · preset5
displayNamestring
Unique name that identifies the category in the user's mailbox.
OUTLOOK_DELETE_CONTACTPermanently deletes an existing contact, using its `contact_id` (obtainable via 'List User Contacts' or 'Get Contact'), from the Outlook contacts of the user specified by `user_id`.2 params

Permanently deletes an existing contact, using its `contact_id` (obtainable via 'List User Contacts' or 'Get Contact'), from the Outlook contacts of the user specified by `user_id`.

Parameters* required
user_idstring
The UPN (User Principal Name) or ID of the user; use 'me' for the signed-in user.default: me
contact_idstring
Identifier of the contact to be deleted, typically obtained from 'List User Contacts' or 'Get Contact'.
OUTLOOK_DELETE_EMAIL_RULEDelete an email rule1 params

Delete an email rule

Parameters* required
ruleIdstring
ID of the email rule to delete.
OUTLOOK_DELETE_EVENTDeletes an existing calendar event, identified by its unique `event_id`, from a specified user's Microsoft Outlook calendar, with an option to send cancellation notifications to attendees.3 params

Deletes an existing calendar event, identified by its unique `event_id`, from a specified user's Microsoft Outlook calendar, with an option to send cancellation notifications to attendees.

Parameters* required
user_idstring
User's email address or 'me' for the current user.default: me
event_idstring
Unique identifier of the calendar event to delete, typically obtained from event listing or retrieval actions.
send_notificationsboolean
If `True`, sends cancellation notifications to event attendees upon deletion.default: true
OUTLOOK_DELETE_MAIL_FOLDERDelete a mail folder from the user's mailbox. Use when you need to remove an existing mail folder.2 params

Delete a mail folder from the user's mailbox. Use when you need to remove an existing mail folder.

Parameters* required
user_idstring
Identifier for the user whose mailbox contains the folder to delete. Use 'me' for the authenticated user or provide the user's principal name or ID.default: me
folder_idstring
The unique identifier or well-known name of the mail folder to delete (e.g., folder ID or 'Drafts', 'SentItems').
OUTLOOK_DOWNLOAD_OUTLOOK_ATTACHMENTDownloads a specific file attachment from an email message in a Microsoft Outlook mailbox; the attachment must contain 'contentBytes' (binary data) and not be a link or embedded item.4 params

Downloads a specific file attachment from an email message in a Microsoft Outlook mailbox; the attachment must contain 'contentBytes' (binary data) and not be a link or embedded item.

Parameters* required
user_idstring
The user's UPN (User Principal Name) or 'me' for the authenticated user. This identifies the mailbox where the message is located.default: me
file_namestring
The desired filename for the downloaded attachment. This name will be assigned to the `FileDownloadable` object.
message_idstring
The unique identifier of the email message that contains the attachment to be downloaded. This ID is typically obtained when listing or retrieving messages.
attachment_idstring
The unique identifier of the attachment to be downloaded. This ID is typically obtained from the message's details when an email message object is retrieved.
OUTLOOK_GET_CALENDAR_VIEWGet events ACTIVE during a time window (includes multi-day events). Use for "what's on my calendar today/this week" or availability checks. Returns events overlapping the time range. For keyword search or filters by category, use OUTLOOK_LIST_EVENTS instead.7 params

Get events ACTIVE during a time window (includes multi-day events). Use for "what's on my calendar today/this week" or availability checks. Returns events overlapping the time range. For keyword search or filters by category, use OUTLOOK_LIST_EVENTS instead.

Parameters* required
topinteger
Maximum number of events to retrieve. Default is 100.default: 100
selectarray
List of specific event properties to return (e.g., ['subject', 'start', 'end']). If omitted, returns default properties.
user_idstring
Email address of the target user (or 'me' for authenticated user).default: me
timezonestring
IANA or Windows timezone for event times (e.g., 'America/New_York'). Defaults to UTC.default: UTC
calendar_idstring
Optional ID of a specific calendar to query. If not provided, uses the primary calendar. Get calendar IDs using LIST_CALENDARS action.
end_datetimestring
End of the time window in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ). Events active during this window will be returned.
start_datetimestring
Start of the time window in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ). Events active during this window will be returned.
OUTLOOK_GET_CONTACTRetrieves a specific Outlook contact by its `contact_id` from the contacts of a specified `user_id` (defaults to 'me' for the authenticated user).2 params

Retrieves a specific Outlook contact by its `contact_id` from the contacts of a specified `user_id` (defaults to 'me' for the authenticated user).

Parameters* required
user_idstring
User's principal name (e.g., 'AdeleV@contoso.onmicrosoft.com') or 'me' for the authenticated user. Using 'me' is recommended for accessing one's own contacts.default: me
contact_idstring
Unique identifier for the contact within the specified user's Outlook address book.
OUTLOOK_GET_CONTACT_FOLDERSTool to retrieve a list of contact folders in the signed-in user's mailbox. Use after authentication when you need to browse or select among contact folders.7 params

Tool to retrieve a list of contact folders in the signed-in user's mailbox. Use after authentication when you need to browse or select among contact folders.

Parameters* required
topinteger
Maximum number of contact folders to return.
skipinteger
Number of contact folders to skip for pagination.
expandarray
Related entities to expand inline, e.g., ['contacts'].
filterstring
OData filter expression, e.g., startswith(displayName,'A').
selectarray
List of properties to include in the response, e.g., ['id','displayName'].
orderbyarray
List of properties to order results by, e.g., ['displayName asc'].
user_idstring
User principal name or ID. Use 'me' for the authenticated user.default: me
OUTLOOK_GET_EVENTRetrieves the full details of a specific calendar event by its ID from a user's Outlook calendar, provided the event exists.2 params

Retrieves the full details of a specific calendar event by its ID from a user's Outlook calendar, provided the event exists.

Parameters* required
user_idstring
The user's primary SMTP address, user principal name (UPN), or the alias 'me' (for the signed-in user) to identify the calendar owner.default: me
event_idstring
The unique identifier of the calendar event to retrieve.
OUTLOOK_GET_MAILBOX_SETTINGSTool to retrieve mailbox settings. Use when you need to view settings such as automatic replies, time zone, and working hours for the signed-in or specified user.3 params

Tool to retrieve mailbox settings. Use when you need to view settings such as automatic replies, time zone, and working hours for the signed-in or specified user.

Parameters* required
expandarray
OData $expand query to include related entities.
selectarray
OData $select query to specify mailbox settings properties to include.
user_idstring
The user's unique identifier or principal name. Use 'me' for the signed-in user.default: me
OUTLOOK_GET_MAIL_DELTARetrieve incremental changes (delta) of messages in a mailbox. FIRST RUN: Returns ALL messages in folder (use top=50 to limit). Response has @odata.deltaLink. SUBSEQUENT: Pass stored deltaLink to get only NEW/UPDATED/DELETED messages since last sync. Properties available: id,...7 params

Retrieve incremental changes (delta) of messages in a mailbox. FIRST RUN: Returns ALL messages in folder (use top=50 to limit). Response has @odata.deltaLink. SUBSEQUENT: Pass stored deltaLink to get only NEW/UPDATED/DELETED messages since last sync. Properties available: id,...

Parameters* required
topinteger
Maximum number of items to return per page. For first run without delta_token, use top=50 or top=100 to limit results. First delta call without token returns all messages in folder. Paginate through results using @odata.nextLink, then store @odata.deltaLink for next sync.
expandarray
List of related entities to expand (e.g. ['attachments']).
selectarray
List of message properties to include (e.g. ['subject','receivedDateTime']). Delta sync has property limitations due to response size constraints. Not available in delta: internetMessageHeaders, body (full), attachments (full content). Available: id, subject, from, toRecipients, ccRecipients, bccRecipients, receivedDateTime, sentDateTime, isRead, isDraft, importance, hasAttachments, categories, conversationId, flag, webLink, bodyPreview (first 255 chars).
user_idstring
User identifier: 'me' for the signed-in user or the user's email/UPN.default: me
folder_idstring
Mail folder identifier to scope the delta query to that folder (e.g., 'Inbox' or folder ID GUID). Defaults to Inbox when omitted.
skip_tokenstring
Skip token for paging through large result sets during initial sync. Automatically provided in response '@odata.nextLink' when there are more results. Extract from nextLink URL and pass here for next page. Keep paginating until you receive '@odata.deltaLink' instead of nextLink.
delta_tokenstring
Delta token from a previous call to get only changes since that state. If delta_token is not provided, the API returns all messages in the folder (initial sync). Use top parameter (e.g., top=50) on first run to limit results. Response includes @odata.deltaLink - extract and store this for next call to get only new changes. Subsequent calls with deltaLink return only: new messages, updated messages, deleted message IDs.
OUTLOOK_GET_MAIL_TIPSTool to retrieve mail tips such as automatic replies and mailbox full status. Use when you need to check recipient status before sending mail.3 params

Tool to retrieve mail tips such as automatic replies and mailbox full status. Use when you need to check recipient status before sending mail.

Parameters* required
user_idstring
User principal name (UPN) or 'me' for the signed-in user.default: me
EmailAddressesarray
Collection of SMTP addresses of recipients to get MailTips for.
MailTipsOptionsarray
List of mail tip types to retrieve for each recipient.
OUTLOOK_GET_MASTER_CATEGORIESTool to retrieve the user's master category list. Use when you need to get all categories defined for the user.6 params

Tool to retrieve the user's master category list. Use when you need to get all categories defined for the user.

Parameters* required
topinteger
Maximum number of master categories to return (OData $top).
skipinteger
Number of master categories to skip for pagination (OData $skip).
filterstring
OData $filter query to filter master categories.
selectarray
OData $select query to specify properties to include.
orderbyarray
OData $orderby query to order master categories by property values.
user_idstring
The user's unique identifier or principal name. Use 'me' for the signed-in user.default: me
OUTLOOK_GET_MESSAGERetrieves a specific email message by its ID from the specified user's Outlook mailbox. Use the 'select' parameter to include specific fields like 'internetMessageHeaders' for filtering automated emails.3 params

Retrieves a specific email message by its ID from the specified user's Outlook mailbox. Use the 'select' parameter to include specific fields like 'internetMessageHeaders' for filtering automated emails.

Parameters* required
selectarray
List of message properties to include in the response. Each item is a property name. MUST be provided as a list. Reduces data transfer and improves performance. Common fields: id, subject, from, toRecipients, ccRecipients, receivedDateTime, sentDateTime, body, bodyPreview, hasAttachments, webLink, internetMessageHeaders, isRead, importance, categories. Leave empty to return all fields.
user_idstring
User's email address, UPN, or 'me' for the currently authenticated user.default: me
message_idstring
Unique ID of the Outlook email message to retrieve.
OUTLOOK_GET_PROFILERetrieves the Microsoft Outlook profile for a specified user.1 params

Retrieves the Microsoft Outlook profile for a specified user.

Parameters* required
user_idstring
The user's unique identifier or principal name. Use 'me' to get the profile of the authenticated user.default: me
OUTLOOK_GET_SCHEDULERetrieves free/busy schedule information for specified email addresses within a defined time window.4 params

Retrieves free/busy schedule information for specified email addresses within a defined time window.

Parameters* required
EndTimeobject
The end date, time, and time zone for the period for which to retrieve schedules. The period can be up to 62 days.
Schedulesarray
A list of SMTP email addresses for users, distribution lists, or resources whose schedules are to be retrieved. Maximum of 20 addresses.
StartTimeobject
The start date, time, and time zone for the period for which to retrieve schedules.
availabilityViewIntervalstring
The duration of each time slot in the availability view, specified in minutes. Minimum: 5, Maximum: 1440. Default: 30.default: 30
OUTLOOK_GET_SUPPORTED_LANGUAGESTool to retrieve supported languages in the user's mailbox. Use when you need to display or select from available mailbox languages.1 params

Tool to retrieve supported languages in the user's mailbox. Use when you need to display or select from available mailbox languages.

Parameters* required
user_idstring
The user's unique identifier or principal name. Use 'me' for the signed-in user.default: me
OUTLOOK_GET_SUPPORTED_TIME_ZONESTool to retrieve supported time zones in the user's mailbox. Use when you need a list of time zones to display or choose from for event scheduling.1 params

Tool to retrieve supported time zones in the user's mailbox. Use when you need a list of time zones to display or choose from for event scheduling.

Parameters* required
timeZoneStandardstring
Specifies the time zone format to return. Supported values: 'Windows' or 'Iana'. Default is 'Windows' if not specified.one of Windows · Iana
OUTLOOK_LIST_CALENDARSTool to list calendars in the signed-in user's mailbox. Use when you need to retrieve calendars with optional OData queries.6 params

Tool to list calendars in the signed-in user's mailbox. Use when you need to retrieve calendars with optional OData queries.

Parameters* required
topinteger
Maximum number of calendars to return (OData $top).
skipinteger
Number of calendars to skip (OData $skip).
filterstring
OData filter expression (OData $filter).
selectarray
Properties to include (OData $select).
orderbyarray
Order by expressions (OData $orderby).
user_idstring
User ID or userPrincipalName. Use 'me' for the signed-in user.default: me
OUTLOOK_LIST_CONTACTSRetrieves a user's Microsoft Outlook contacts, from the default or a specified contact folder.6 params

Retrieves a user's Microsoft Outlook contacts, from the default or a specified contact folder.

Parameters* required
topinteger
Maximum number of contacts to retrieve.default: 10
filterstring
OData V4 filter expression for targeted retrieval.
selectarray
List of specific contact properties to retrieve. Each item is a property name. MUST be provided as a list. If empty, a default set of properties is returned.
orderbyarray
List of properties to sort results by. Each item is a string like 'displayName asc' or 'createdDateTime desc'. MUST be provided as a list, even for single sort criteria. 'asc' is default.
user_idstring
User Principal Name (UPN) or ID of the user. 'me' refers to the authenticated user.default: me
contact_folder_idstring
ID of a specific contact folder. If omitted, contacts are retrieved from the default contact folder.
OUTLOOK_LIST_EMAIL_RULESList all email rules from inbox1 params

List all email rules from inbox

Parameters* required
topinteger
Number of rules to retrieve. Default is 100.
OUTLOOK_LIST_EVENT_ATTACHMENTSTool to list attachments for a specific Outlook calendar event. Use when you have an event ID and need to view its attachments.7 params

Tool to list attachments for a specific Outlook calendar event. Use when you have an event ID and need to view its attachments.

Parameters* required
topinteger
Maximum number of attachments to return (OData $top).
skipinteger
Number of attachments to skip (OData $skip).
filterstring
OData filter string to filter the attachments (OData $filter).
selectarray
List of attachment properties to include (OData $select).
orderbyarray
Order by clauses to sort the results (OData $orderby).
user_idstring
The user's primary SMTP address, UPN, or 'me' for the signed-in user.default: me
event_idstring
The unique identifier of the calendar event to retrieve attachments for.
OUTLOOK_LIST_EVENTSRetrieves events from a user's Outlook calendar via Microsoft Graph API. Supports primary/secondary/shared calendars, pagination, filtering, property selection, sorting, and timezone specification. Use calendar_id to access non-primary calendars.9 params

Retrieves events from a user's Outlook calendar via Microsoft Graph API. Supports primary/secondary/shared calendars, pagination, filtering, property selection, sorting, and timezone specification. Use calendar_id to access non-primary calendars.

Parameters* required
topinteger
Maximum number of events to retrieve per page for pagination.default: 10
skipinteger
Number of initial events to bypass, used for pagination.default: 0
filterstring
OData query string to filter events (e.g., "start/dateTime ge 'YYYY-MM-DDTHH:MM:SSZ'"); string literals use single quotes.default:
selectarray
List of specific event property names to return. Each item is a property name like 'subject' or 'start'. MUST be provided as a list. If omitted, a default set of properties is returned.
orderbyarray
List of properties to sort results by. Each item is a string like 'start/dateTime desc' or 'subject asc'. MUST be provided as a list, even for single sort criteria. Use 'asc' (default) or 'desc' for order.
user_idstring
Email address of the target user (or 'me' for authenticated user), identifying the calendar for event listing.default: me
timezonestring
Preferred IANA or Windows timezone for event start/end times (e.g., 'America/New_York'); defaults to UTC if unspecified/invalid.default: UTC
calendar_idstring
Optional ID of a specific calendar to retrieve events from.If not provided, uses the primary calendar. Get calendar IDs using LIST_CALENDARS action. Useful for accessing secondary calendars, shared calendars, or team calendars.
expand_recurring_eventsboolean
When true, automatically expands recurring events to show actual occurrences within the filtered date range instead of series masters. When false (default), returns series masters as before.default: false
OUTLOOK_LIST_MAIL_FOLDERSTool to list a user's top-level mail folders. Use when you need folders like Inbox, Drafts, Sent Items; set include_hidden_folders=True to include hidden folders.2 params

Tool to list a user's top-level mail folders. Use when you need folders like Inbox, Drafts, Sent Items; set include_hidden_folders=True to include hidden folders.

Parameters* required
user_idstring
User's id, userPrincipalName, or 'me' for the signed-in user.default: me
include_hidden_foldersboolean
Include hidden mail folders (isHidden=true) when set to true.default: false
OUTLOOK_LIST_MESSAGESRetrieves a list of email messages from a specified mail folder in an Outlook mailbox, with options for filtering (including by conversationId to get all messages in a thread), pagination, and sorting; ensure 'user_id' and 'folder' are valid, and all date/time strings are in I...22 params

Retrieves a list of email messages from a specified mail folder in an Outlook mailbox, with options for filtering (including by conversationId to get all messages in a thread), pagination, and sorting; ensure 'user_id' and 'folder' are valid, and all date/time strings are in I...

Parameters* required
topinteger
Maximum number of messages to return per request (1-1000). Always check response['@odata.nextLink'] for pagination. If present, make additional requests with that URL (includes $skiptoken). Repeat until '@odata.nextLink' is absent. For large mailboxes (1000+ messages), always paginate.default: 10
skipinteger
Number of messages to skip from the beginning of the result set, for pagination.default: 0
folderstring
ID or well-known name of the mail folder. Well-known names: inbox, sentitems, drafts, deleteditems, outbox, junkemail. Or use a valid folder ID.default: inbox
selectarray
List of message properties to include. Valid properties: id, subject, from, toRecipients, ccRecipients, bccRecipients, receivedDateTime, sentDateTime, hasAttachments, importance, isRead, body, bodyPreview, categories, conversationId, conversationIndex, flag, internetMessageHeaders, parentFolderId, replyTo, sender, webLink, isDraft, isReadReceiptRequested, isDeliveryReceiptRequested, changeKey, createdDateTime, lastModifiedDateTime, inferenceClassification, size, internetMessageId. Note: attachments is not selectable.
is_readboolean
Filter by read status: 'true' for read, 'false' for unread. Unspecified means no filter by read status.
orderbyarray
List of properties to sort results by, with direction. Each item is a string like 'receivedDateTime desc' or 'subject asc'. Default is 'receivedDateTime desc'. Cannot be used with sentDateTime filters in Sent folder.
subjectstring
Filter by exact match of the subject line. Special characters like apostrophes, brackets will be automatically escaped. For complex subject searches, consider using 'Search Messages' instead.
user_idstring
Target user's email or 'me' for authenticated user. For delegated access, use shared mailbox or delegated user's email.default: me
categoriesarray
Filter by categories (case-sensitive); matches if tagged with any specified category.
importancestring
Filter by importance: 'low', 'normal', or 'high'.
from_addressstring
Filter by the sender's exact email address. NOTE: This filter is applied client-side on the returned results, not server-side.
conversationIdstring
Filter messages by conversation ID to retrieve all messages in a specific email thread.
has_attachmentsboolean
Filter by attachment presence: 'true' for messages with attachments, 'false' for those without. NOTE: This filter is applied client-side on the returned results.
subject_containsstring
Filter messages where the subject contains the specified case-insensitive substring. NOTE: This filter is applied client-side on the returned results. For better performance, use 'Search Messages' instead.
subject_endswithstring
Filter messages where the subject ends with the specified case-insensitive string. NOTE: This filter is applied client-side on the returned results. For better performance, use 'Search Messages' instead.
sent_date_time_gtstring
Filter messages sent after this ISO 8601 timestamp.
sent_date_time_ltstring
Filter messages sent before this ISO 8601 timestamp.
subject_startswithstring
Filter messages where the subject starts with the specified case-insensitive string.
received_date_time_gestring
Filter messages received on or after this ISO 8601 timestamp.
received_date_time_gtstring
Filter messages received after this ISO 8601 timestamp (e.g., '2023-01-01T00:00:00Z').
received_date_time_lestring
Filter messages received on or before this ISO 8601 timestamp.
received_date_time_ltstring
Filter messages received before this ISO 8601 timestamp.
OUTLOOK_LIST_OUTLOOK_ATTACHMENTSLists metadata (like name, size, and type, but not `contentBytes`) for all attachments of a specified Outlook email message.2 params

Lists metadata (like name, size, and type, but not `contentBytes`) for all attachments of a specified Outlook email message.

Parameters* required
user_idstring
The unique identifier of the user. Use the user's UPN (e.g., 'AdeleV@contoso.onmicrosoft.com') or 'me' for the currently authenticated user. This specifies the mailbox to query.default: me
message_idstring
The unique identifier of the email message from which to retrieve attachments. This ID is specific to the Outlook message.
OUTLOOK_LIST_REMINDERSTool to retrieve reminders for events occurring within a specified time range. Use when you need to see upcoming reminders between two datetimes.3 params

Tool to retrieve reminders for events occurring within a specified time range. Use when you need to see upcoming reminders between two datetimes.

Parameters* required
userIdstring
User Principal Name or ID. Use 'me' to indicate the signed-in user.default: me
endDateTimestring
The end date and time in ISO 8601 format defining the window for reminders. Example: '2023-10-26T20:00:00.0000000'.
startDateTimestring
The start date and time in ISO 8601 format defining the window for reminders. Example: '2023-10-26T19:00:00.0000000'.
OUTLOOK_LIST_USERSTool to list users in Microsoft Entra ID. Use when you need to retrieve a paginated list of users, optionally filtering or selecting specific properties.4 params

Tool to list users in Microsoft Entra ID. Use when you need to retrieve a paginated list of users, optionally filtering or selecting specific properties.

Parameters* required
topinteger
Maximum number of users to return (OData $top). Default page size is 100, maximum is 999.
skipinteger
Number of users to skip (OData $skip) for pagination.
filterstring
OData filter expression to restrict returned users (OData $filter).
selectarray
List of user properties to include in the response (OData $select).
OUTLOOK_MOVE_MESSAGEMove a message to another folder within the specified user's mailbox. This creates a new copy of the message in the destination folder and removes the original message.3 params

Move a message to another folder within the specified user's mailbox. This creates a new copy of the message in the destination folder and removes the original message.

Parameters* required
user_idstring
User's email address, UPN, or 'me' for the currently authenticated user.default: me
message_idstring
Unique ID of the Outlook email message to move.
destination_idstring
The destination folder ID, or a well-known folder name (e.g., 'inbox', 'deleteditems', 'drafts', 'sentitems').
OUTLOOK_QUERY_EMAILSPrimary tool for querying Outlook emails with custom OData filters. Build precise server-side filters for dates, read status, importance, subjects, attachments, and conversations. Best for structured queries on message metadata. Returns up to 100 messages per request with pagi...7 params

Primary tool for querying Outlook emails with custom OData filters. Build precise server-side filters for dates, read status, importance, subjects, attachments, and conversations. Best for structured queries on message metadata. Returns up to 100 messages per request with pagi...

Parameters* required
topinteger
Maximum number of messages to return per request (1-1000). Default is 100. IMPORTANT: For large mailboxes, always check response['@odata.nextLink'] to fetch remaining messages. Pagination example: 1) Call with top=100, 2) Check if '@odata.nextLink' exists in response, 3) If present, make a new request to that full URL (includes $skiptoken), 4) Repeat until '@odata.nextLink' is absent.default: 100
skipinteger
Number of messages to skip for pagination. NOTE: For large result sets, prefer using '@odata.nextLink' from responses instead of manual skip.default: 0
filterstring
OData $filter query string to filter email messages. Syntax: 'field operator value' combined with 'and', 'or', 'not'. **Operators:** eq, ne, lt, le, gt, ge, startswith(), endswith(), contains() (limited support), any() **Common Fields (Server-Side Filterable):** - `isRead` - Boolean: true/false - `importance` - String: 'low', 'normal', 'high' - `subject` - String (exact match or startswith) - `hasAttachments` - Boolean: true/false - `receivedDateTime`, `sentDateTime` - DateTime (ISO 8601: '2025-10-01T00:00:00Z') - `conversationId` - String (exact match) - `categories` - Array (use any() operator) - `toRecipients`, `ccRecipients`, `bccRecipients` - Arrays of recipients (use any()) - `isDraft`, `isRead`, `flag/flagStatus` - Boolean/String flags **Collection Filtering (LIMITED SUPPORT):** - ⚠️ Recipients (toRecipients, ccRecipients): NOT supported without advanced query headers **Date Filtering:** - Dates MUST be in ISO 8601 format with time zone: '2025-10-01T00:00:00Z' - Use ge (>=), gt (>), le (<=), lt (<) operators - Example: `receivedDateTime ge 2025-10-01T00:00:00Z and receivedDateTime lt 2025-10-02T00:00:00Z` **String Filtering:** - Exact match: `subject eq 'Meeting Notes'` - Starts with: `startswith(subject, '[Action Required]')` - Escape single quotes by doubling: `subject eq 'Owner''s Manual'` **Complex Nested Properties (NOT directly filterable):** - `from/emailAddress/address` - Use OUTLOOK_SEARCH_MESSAGES or client-side filtering instead - `body/content` - Use OUTLOOK_SEARCH_MESSAGES for body text search **Combining Conditions:** - AND: `isRead eq false and importance eq 'high'` - OR: `importance eq 'high' or importance eq 'low'` - NOT: `not (isRead eq true)` - Grouping: `(isRead eq false or importance eq 'high') and hasAttachments eq true`
folderstring
ID or well-known name of the mail folder. Well-known names: 'inbox', 'sentitems', 'drafts', 'deleteditems', 'outbox', 'junkemail' (case-insensitive). Or use a valid folder ID.default: inbox
selectarray
List of message properties to include in the response. Reduces data transfer and improves performance. Common fields: id, subject, from, toRecipients, ccRecipients, receivedDateTime, sentDateTime, hasAttachments, importance, isRead, body, bodyPreview, categories, conversationId, webLink, internetMessageHeaders, isDraft, flag. Leave empty to return all fields.
orderbystring
Comma-separated sort keys with direction. Format: 'field asc' or 'field desc'. Common fields: receivedDateTime, sentDateTime, subject, importance, from. NOTE: Ordering may be automatically disabled by Microsoft Graph API when using certain filters (e.g., subject exact match, conversationId) to avoid 'InefficientFilter' errors. In those cases, results will be unsorted.default: receivedDateTime desc
user_idstring
Target user's email or 'me' for authenticated user. IMPORTANT: 'me' uses the currently connected account. For cross-mailbox access, ensure you have Mail.Read or Mail.ReadWrite permissions on the target mailbox. 403 errors indicate insufficient delegated/application permissions.default: me
OUTLOOK_REPLY_EMAILSends a plain text reply to an Outlook email message, identified by `message_id`, allowing optional CC and BCC recipients.5 params

Sends a plain text reply to an Outlook email message, identified by `message_id`, allowing optional CC and BCC recipients.

Parameters* required
commentstring
The plain text body of the reply email.
user_idstring
The user's email address or 'me' to indicate the authenticated user. This specifies the mailbox from which the reply will be sent.default: me
cc_emailsarray
List of email addresses for CC recipients.
bcc_emailsarray
List of email addresses for BCC recipients.
message_idstring
The unique ID of the message to reply to. This ID can be obtained from the `OUTLOOK_LIST_MESSAGES` action.
OUTLOOK_SEARCH_MESSAGESSearch Outlook messages using powerful KQL syntax. Supports sender (from:), recipient (to:, cc:), subject, date filters (received:, sent:), attachments, and boolean logic. Only works with Microsoft 365/Enterprise accounts (no @hotmail.com/@outlook.com). Examples: 'from:user@ex...7 params

Search Outlook messages using powerful KQL syntax. Supports sender (from:), recipient (to:, cc:), subject, date filters (received:, sent:), attachments, and boolean logic. Only works with Microsoft 365/Enterprise accounts (no @hotmail.com/@outlook.com). Examples: 'from:user@ex...

Parameters* required
sizeinteger
The maximum number of search results to return per page. Use with from_index for pagination.default: 25
querystring
KQL (Keyword Query Language) search query string. Supports advanced syntax for precise searches. **Basic Syntax:** - Simple keywords: 'budget report' - Exact phrases: '"quarterly review"' - Boolean operators: 'urgent AND deadline' or 'invoice OR receipt' **Property Filters (prefix:value):** - from: Sender email - 'from:user@example.com' or 'from:example.com' - to: Recipient email - 'to:info@jcdn.nl' - cc: CC recipient - 'cc:manager@example.com' - subject: Subject line - 'subject:invoice' - received: Date received - 'received:2025-10-01' or 'received>=2025-10-01' - sent: Date sent - 'sent:2025-10-01' or 'sent>=2025-10-01' - hasattachment: Has files - 'hasattachment:yes' or 'hasattachment:no' **Date Operators:** - Exact: 'received:2025-10-01' - Greater/equal: 'received>=2025-10-01' - Less/equal: 'received<=2025-10-31' - Range: 'received:2025-10-01..2025-10-31' - Relative: 'received>today-7' (last 7 days) **Combining Filters:** - AND: 'from:user@example.com AND subject:invoice' - OR: 'to:sales@example.com OR to:support@example.com' - Complex: 'from:example.com AND (subject:urgent OR subject:important) AND received>=2025-10-01' Note: Can be empty if using fromEmail, subject, hasAttachments parameters (legacy support).default:
subjectstring
Text to search for within the message subject line. Legacy parameter - prefer using 'subject:text' in the query parameter for more control. Example: Instead of subject='invoice', use query='subject:invoice AND received>=2025-10-01'
fromEmailstring
Filter messages by sender email address or domain. Supports exact email ('user@example.com') or domain matching ('example.com'). Legacy parameter - prefer using 'from:email@example.com' in the query parameter for more flexibility. Note: Only Microsoft 365/Enterprise accounts are supported (no @hotmail.com or @outlook.com).
from_indexinteger
The 0-based starting index for pagination. To paginate: check response['value'][0]['hitsContainers'][0]['moreResultsAvailable']. If true, call again with from_index += size (e.g., 0 → 25 → 50). Message ID is in hits[]['hitId'], not hits[]['resource']['id'].default: 0
hasAttachmentsboolean
Filters messages based on the presence of attachments. Legacy parameter - prefer using 'hasattachment:yes' or 'hasattachment:no' in the query parameter.
enable_top_resultsboolean
If `true`, sorts results by relevance; otherwise, sorts by date in descending order (newest first).default: false
OUTLOOK_SEND_DRAFTTool to send an existing draft message. Use after creating a draft when you want to deliver it to recipients immediately. Example: Send a draft message with ID 'AAMkAG…'.2 params

Tool to send an existing draft message. Use after creating a draft when you want to deliver it to recipients immediately. Example: Send a draft message with ID 'AAMkAG…'.

Parameters* required
user_idstring
The user's email address or 'me' to represent the authenticated user.default: me
message_idstring
The unique identifier of the draft message to send.
OUTLOOK_SEND_EMAILSends an email with subject, body, recipients, and an optional attachment via Microsoft Graph API. Supports comma-separated email addresses in the to_email field for multiple recipients. Attachments require a non-empty file with valid name and mimetype.11 params

Sends an email with subject, body, recipients, and an optional attachment via Microsoft Graph API. Supports comma-separated email addresses in the to_email field for multiple recipients. Attachments require a non-empty file with valid name and mimetype.

Parameters* required
bodystring
The content of the email body, plain text or HTML based on `is_html`.
fromstring
Optional From address to set on the message (send as/on behalf). Provide a single email address. Requires appropriate mailbox permissions.
is_htmlboolean
Specifies if the email body is HTML; `True` for HTML, `False` for plain text.default: false
subjectstring
The subject line of the email.
to_namestring
The display name of the primary recipient.
user_idstring
The user's email address or the alias 'me' to represent the authenticated user.default: me
to_emailstring
The primary recipient's email address(es). You can provide a single email or multiple emails separated by commas. For CC/BCC recipients, use the respective fields.
cc_emailsarray
List of email addresses for CC recipients. Each email should be a separate string in the array. Do NOT pass comma-separated values as a single string.
attachmentstring
Optional file to attach. If provided, its name, mimetype, and content must be valid and non-empty.
bcc_emailsarray
List of email addresses for BCC recipients. Each email should be a separate string in the array. Do NOT pass comma-separated values as a single string.
save_to_sent_itemsboolean
Indicates if the email should be saved in 'Sent Items'.default: true
OUTLOOK_UPDATE_CALENDAR_EVENTUpdates specified fields of an existing Outlook calendar event. Implementation note: To avoid unintentionally clearing properties, the action first fetches the existing event, merges only the provided fields, and then PATCHes the merged updates. Unspecified fields remain uncha...11 params

Updates specified fields of an existing Outlook calendar event. Implementation note: To avoid unintentionally clearing properties, the action first fetches the existing event, merges only the provided fields, and then PATCHes the merged updates. Unspecified fields remain uncha...

Parameters* required
bodyobject
Event body with content type ('Text' or 'HTML') and the content. If omitted, the existing body remains unchanged.
show_asstring
Availability status for the event. Valid values: 'free', 'tentative', 'busy', 'oof'. If omitted, the existing status remains unchanged.
subjectstring
New subject for the event. If provided as an empty string, the subject will be cleared. If omitted, the existing subject remains unchanged.
user_idstring
The identifier of the user whose calendar event is to be updated. Accepts the user's principal name, ID, or 'me' for the currently authenticated user.default: me
event_idstring
The unique identifier of the calendar event to be updated. This ID can be obtained from the OUTLOOK_LIST_EVENTS action.
locationobject
Event location as a dictionary. If provided, replaces the existing primary location. Omit to leave unchanged.
attendeesarray
Attendee list for the event. If provided, replaces the existing attendees. If omitted, attendees remain unchanged.
time_zonestring
Time zone for the provided start_datetime and/or end_datetime (IANA or Windows time zone names). If omitted, the existing event's time zone is used.
categoriesarray
Category names to associate with the event. If provided (even empty), replaces the existing categories. If omitted, categories remain unchanged.
end_datetimestring
New end date and time for the event. Provide together with a time zone, or the current event's time zone will be used. Must be after start_datetime if both are provided. If omitted, the end time remains unchanged.
start_datetimestring
New start date and time for the event. Provide together with a time zone, or the current event's time zone will be used. If omitted, the start time remains unchanged.
OUTLOOK_UPDATE_CONTACTUpdates an existing Outlook contact, identified by `contact_id` for the specified `user_id`, requiring at least one other field to be modified.16 params

Updates an existing Outlook contact, identified by `contact_id` for the specified `user_id`, requiring at least one other field to be modified.

Parameters* required
notesstring
Personal notes about the contact (maps to 'personalNotes' in Microsoft Graph API).default:
surnamestring
Contact's surname (last name).default:
user_idstring
User's identifier; 'me' for the signed-in user, or user's principal name/ID.default: me
birthdaystring
Contact's birthday (YYYY-MM-DD format).default:
jobTitlestring
Contact's job title.default:
givenNamestring
Contact's given (first) name.default:
categoriesarray
Categories for organizing the contact.
contact_idstring
Unique identifier of the contact to update.
departmentstring
Contact's department.default:
homePhonesarray
Contact's home phone numbers.
companyNamestring
Contact's company name.default:
displayNamestring
Contact's full display name.default:
mobilePhonestring
Contact's mobile phone number.default:
businessPhonesarray
Contact's business phone numbers.
emailAddressesarray
Contact's email addresses.
officeLocationstring
Contact's office location.default:
OUTLOOK_UPDATE_EMAILUpdates specified properties of an existing email message; `message_id` must identify a valid message within the specified `user_id`'s mailbox.9 params

Updates specified properties of an existing email message; `message_id` must identify a valid message within the specified `user_id`'s mailbox.

Parameters* required
bodyobject
New body content (Text or HTML). If omitted, the existing message body remains unchanged.
is_readboolean
Mark message as read (True) or unread (False). If omitted, read status remains unchanged.
subjectstring
New subject line. If omitted, the existing subject remains unchanged. Provide empty string to clear the subject.
user_idstring
The UPN (User Principal Name) of the user whose mailbox contains the message, or 'me' for the currently authenticated user. This determines whose message is updated.default: me
importancestring
New importance level ('low', 'normal', 'high'). If omitted, importance is set to 'normal'.default: normal
message_idstring
The unique identifier of the email message to be updated. This ID is typically obtained from listing messages or creating/sending a message.
cc_recipientsarray
List of CC recipients; replaces all existing CCs. Omitting this field removes all current CC recipients.
to_recipientsarray
List of TO recipients; replaces all existing TOs. Omitting this field removes all current TO recipients.
bcc_recipientsarray
List of BCC recipients; replaces all existing BCCs. Omitting this field removes all current BCC recipients.
OUTLOOK_UPDATE_EMAIL_RULEUpdate an existing email rule6 params

Update an existing email rule

Parameters* required
ruleIdstring
ID of the email rule to update.
actionsobject
Updated actions to take when the rule conditions are met.
sequenceinteger
Updated order in which the rule is executed (lower numbers execute first).
isEnabledboolean
Whether the rule should be enabled or disabled.
conditionsobject
Updated conditions that must be met for the rule to apply.
displayNamestring
Updated display name for the email rule.
OUTLOOK_UPDATE_MAILBOX_SETTINGSTool to update mailbox settings for the signed-in user. Use when you need to configure automatic replies, default time zone, language, or working hours. Example: schedule automatic replies for vacation.4 params

Tool to update mailbox settings for the signed-in user. Use when you need to configure automatic replies, default time zone, language, or working hours. Example: schedule automatic replies for vacation.

Parameters* required
languageobject
Locale preferences for date/time formatting.
timeZonestring
Default mailbox time zone (e.g., 'Pacific Standard Time').
workingHoursobject
Working hours configuration for the user.
automaticRepliesSettingobject
Configuration for automatic replies.

outlook-mcp

MCP server for Microsoft Outlook personal accounts via Microsoft Graph API.

PyPI Python License: MIT MCP Registry

Personal Microsoft accounts only — @outlook.com, @hotmail.com, @live.com. Work/school accounts (Entra ID) are not supported in v1.

Disclaimer: Independent open-source project. Not affiliated with, endorsed by, or supported by Microsoft Corporation. "Outlook" and "Microsoft Graph" are trademarks of Microsoft.


Who this is for

You'll like this if you're:

  • An agent builder wiring Outlook into your own infra (OpenClaw, Claude Code, Cursor, custom MCP host) and want a typed tool surface — not stdout you have to parse
  • Building on personal Microsoft accounts (Outlook.com / Hotmail / Live) and want full control: BYO Azure app, no enterprise consent flow, no shared client ID
  • Looking for real coverage — mail, calendar, contacts, to-do, drafts, folders, batch ops, threading — instead of a mail-only or calendar-only wrapper
  • Security-conscious: tokens in the OS keyring (Keychain on macOS), granular allow_categories, optional read_only mode, zero telemetry

This isn't for you if you need work/school M365 accounts (use Microsoft's official tooling — Entra ID auth and admin-consent flows are out of scope here), or if a basic mail-only client would suffice (this has 62 tools — way more than you need for "read my inbox").

How it differs from other Outlook tools you'll find

This is the only first-class MCP server in the personal-Outlook space — most alternatives are bash scripts or skill-shaped CLI wrappers the agent shells out to. That distinction matters: the agent gets typed tool schemas with structured args/returns, not stdout it has to parse. Other things you won't find elsewhere: /$batch-optimized triage (10-20× faster on bulk ops), recursive folder ops with name resolution, granular per-category permissions, multi-account support, and full attachment write paths including >3MB upload sessions for drafts.


What This Enables

Give your AI agent full Outlook access. Example prompts that just work:

  • "Summarize my unread email from the past 24 hours and flag anything time-sensitive."
  • "What's in my Focused Inbox right now? Anything in Other that looks like it belongs up top?"
  • "Any shipping updates in my inbox? Track what I'm waiting on and when it's supposed to arrive."
  • "Scan my email for upcoming subscription renewals — what's about to auto-charge in the next two weeks?"
  • "I've got a trip to Seattle next week — check my calendar for the itinerary and create a To Do task with a packing checklist."
  • "Draft a reply to the last message from my sister saying I'll call her this weekend."
  • "Move all newsletter and promotional email from this week to a 'Read Later' folder — batch 20 at a time."

The server exposes 62 discrete tools so the agent can compose its own workflow — read, triage, write, schedule, track tasks — without hardcoded macros.

Works With

  • OpenClaw — native MCP support, available via ClawHub
  • Claude Code — add to ~/.claude/settings.json under mcpServers
  • Cursor — MCP-compatible
  • Any MCP client — it's a standard stdio MCP server

Listed on the official MCP Registry as io.github.mpalermiti/outlook-mcp.


Features

62 tools across 13 categories:

  • Auth (1) -- auth status check (login is via CLI)
  • Mail Read (7) -- list inbox (with Focused Inbox filter), read message, bulk read by ID via $batch, search (KQL), list folders, delta-sync inbox changes, composed "since last call" digest across mail/events/contacts
  • Mail Write (3) -- send, reply/reply-all, forward
  • Mail Triage (9) -- move, delete (soft by default), flag, categorize, mark read/unread, reclassify (Focused Inbox), list/set/delete per-sender Focused Inbox overrides
  • Calendar Read (3) -- list events (with recurring expansion), get event details, delta-sync event changes
  • Calendar Write (4) -- create, update, delete, RSVP (accept/decline/tentative)
  • Contacts (7) -- list, search, get, create, update, delete, delta-sync changes
  • To Do (6) -- list task lists, list/create/update/complete/delete tasks
  • Drafts (5) -- list, create, update, send, delete
  • Attachments (5) -- list, download, send-with-attachments, attach-to-draft, remove-draft-attachment
  • Folder Management (3) -- create, rename, delete mail folders
  • Threading and Batch (3) -- list thread, copy message, batch triage
  • User and Admin (6) -- whoami, list calendars, list categories, mail tips, accounts

Design principles:

  • BYOID -- Bring Your Own ID. You register your own Azure AD app. No shared client ID.
  • Zero telemetry -- no analytics, no local caching, no third-party calls.
  • Token storage -- OS keyring via azure-identity (macOS Keychain, Windows Credential Store, Linux Secret Service).
  • Input validation -- all inputs validated (email, Graph IDs, OData, KQL, datetimes) before any API call.
  • Read-only mode -- set read_only: true in config to block all write operations.
  • Soft delete -- delete moves to Deleted Items by default. Hard delete requires explicit permanent: true.
  • Timezone-aware -- calendar operations respect your configured IANA timezone.

Agent-friendly shape (1.8.0)

Two pure-code upgrades that make the same 57 tools cheaper and more recoverable for AI agents:

  • Concise mode — pass concise=True to the five high-volume read tools (outlook_list_inbox, outlook_read_message, outlook_search_mail, outlook_list_events, outlook_list_thread) to drop bulky fields: full message bodies, per-event attendee lists, quoted prior-message text in threads, body previews/categories on inbox listings. Typical payload reduction ~10×. Default concise=False preserves the existing response shape — strict backward compat.

  • Structured Graph errors — every tool wraps msgraph SDK exceptions into {code, message, action} responses with operator-friendly recovery hints: re-auth on 401, ROADMAP pointer on 403/ErrorAccessDenied (known unsupported-endpoint dead-ends), re-list on 404/ErrorItemNotFound, back-off on 429, retry on 503. OutlookMCPError subclasses and validation errors pass through unchanged.


Azure AD App Registration

You need to register a free Azure AD app to get a client ID.

Prerequisites (Personal Microsoft Accounts)

Microsoft has deprecated app registration for personal accounts without an Azure AD tenant. You need to create a free Azure account first:

  1. Go to azure.microsoft.com/free and sign up with your personal @outlook.com account. Requires a credit card for identity verification but won't charge you. This creates a proper Azure AD tenant.

Register the App

  1. Go to App Registrations and sign in with your @outlook.com account.

  2. Click "+ New registration" and fill in:

    • Name: anything except Microsoft-branded terms (e.g. mp-outlook-mcp — names like "Outlook MCP" will be rejected)
    • Supported account types: select "Personal Microsoft accounts only"
    • Redirect URI: leave blank
  3. Click Register. Copy the Application (client) ID from the overview page.

  4. Go to Authentication (Preview) → Settings tab → toggle "Allow public client flows" to Yes → Save.

  5. Go to API permissions → Add a permission → Microsoft Graph → Delegated permissions → add:

    • Mail.ReadWrite, Mail.Send
    • Calendars.ReadWrite
    • Contacts.ReadWrite, Tasks.ReadWrite
    • User.Read, offline_access

No client secret is needed. The device code flow uses public client auth.


Quick Start

Install

Option A — from PyPI (recommended):

uv tool install outlook-graph-mcp
# or: pipx install outlook-graph-mcp
# or: pip install outlook-graph-mcp

Option B — from source:

git clone https://github.com/mpalermiti/outlook-mcp.git
cd outlook-mcp
uv sync

Configure

Create ~/.outlook-mcp/config.json:

{
  "client_id": "YOUR_APPLICATION_CLIENT_ID",
  "tenant_id": "consumers",
  "timezone": "America/Los_Angeles",
  "read_only": true
}

The only required field is client_id. Everything else has sensible defaults. Start with read_only: true — flip to false when you're comfortable.

Register with your MCP client

If installed from PyPI:

{
  "mcpServers": {
    "outlook": {
      "command": "outlook-mcp"
    }
  }
}

If installed from source:

{
  "mcpServers": {
    "outlook": {
      "command": "uv",
      "args": ["--directory", "/path/to/outlook-mcp", "run", "outlook-mcp"]
    }
  }
}

For OpenClaw, use the openclaw mcp CLI — it writes to mcp.servers in ~/.openclaw/openclaw.json for you:

# If installed from PyPI:
openclaw mcp set outlook '{"command":"outlook-mcp"}'

# If installed from source:
openclaw mcp set outlook '{"command":"uv","args":["--directory","/path/to/outlook-mcp","run","outlook-mcp"]}'

# Verify:
openclaw mcp list
openclaw mcp show outlook --json

Restart the OpenClaw gateway after registering. See the OpenClaw MCP docs for SSE/HTTP transport variants.

Authenticate

Run this once on the machine where the MCP server will run:

uv run outlook-mcp auth

You'll get a URL and a code. Open the URL in any browser, enter the code, and sign in with your Microsoft account. Tokens are cached in the OS keyring — the MCP server picks them up automatically.

Other CLI commands:

uv run outlook-mcp status   # Check auth status
uv run outlook-mcp logout   # Clear credentials
uv run outlook-mcp serve    # Start MCP server (default, used by OpenClaw/Claude)

Tool Reference

Auth

ToolDescription
outlook_auth_statusCheck if authenticated and whether read-only mode is active.

Note: Authentication is handled via the CLI (outlook-mcp auth), not through MCP tools. See Authenticate above.

Mail Read

ToolDescription
outlook_list_inboxList messages in a folder. folder accepts display names, well-known names, or Graph IDs. Filter by read status, sender, date range, Focused Inbox classification. Pagination via skip.
outlook_read_messageGet full message by ID. Format: text, html, or full (both). Pass include_deferred_send=True to also surface the draft's scheduled delivery time.
outlook_read_messagesBulk read up to 20 messages by ID via Graph $batch in one round-trip. Per-message shape matches outlook_read_message byte-for-byte for the same (format, concise, include_deferred_send). Partial-failure tolerant: 404s on some IDs surface in failures[] without failing the whole call. Use NOT N outlook_read_message calls.
outlook_search_mailSearch mail using KQL query. Optionally scope to a folder by name or ID.
outlook_list_foldersList mail folders with counts, parent_id, and child_count. Pass recursive=true to walk the full folder tree (subfolders included).
outlook_list_inbox_deltaList only inbox changes since the last call. First call returns a full snapshot plus a delta_token; subsequent calls (token passed back) return only added/updated/deleted items. Deletes come back as {id, is_deleted: True}. Cursor is stateless — agent persists and replays.
outlook_changes_sinceOne structured "since last call" digest composing mail/events/contacts deltas. Returns counts + urgent_flagged mail + top-5 by_sender + new/cancelled events. Each resource has an independent delta_token; stale-token recovery (HTTP 410) auto-resyncs that resource and surfaces _meta.resync. First-call snapshot is filtered to fallback_window_hours (default 24). Designed for recurring agent loops.

Mail Write

ToolDescription
outlook_send_messageSend email. Supports TO/CC/BCC, HTML body, importance level.
outlook_replyReply or reply-all to a message.
outlook_forwardForward a message to one or more recipients with optional comment.

Mail Triage

ToolDescription
outlook_move_messageMove a message to a folder by name or ID.
outlook_delete_messageDelete a message. Soft delete (Deleted Items) by default. permanent: true for hard delete.
outlook_flag_messageSet follow-up flag: flagged, complete, or notFlagged.
outlook_categorize_messageSet categories on a message.
outlook_mark_readMark a message as read or unread.
outlook_reclassify_messageMove a message between Focused Inbox and Other (focused / other).
outlook_list_inbox_overridesList Focused Inbox per-sender override rules.
outlook_set_inbox_overrideUpsert a per-sender Focused Inbox override (focused / other). Case-insensitive sender matching; PATCH-if-exists, else POST.
outlook_delete_inbox_overrideDelete a Focused Inbox override by ID.

Calendar Read

ToolDescription
outlook_list_eventsList events in a date range. Expands recurring events. Configurable via days, after, before.
outlook_get_eventGet full event details: attendees, body, online meeting URL, recurrence.
outlook_list_events_deltaList only event changes inside a window since the last call. start and end (ISO 8601) required on the first call (Graph constraint — no whole-calendar sync). Deletes come back as {id, is_deleted: True}. Cursor is stateless.

Calendar Write

ToolDescription
outlook_create_eventCreate event with location, attendees, recurrence, online meeting support.
outlook_update_eventUpdate event fields (subject, time, location, body). Only patches changed fields.
outlook_delete_eventDelete a calendar event.
outlook_rsvpRSVP to an event: accept, decline, or tentative. Optionally include a message.

Contacts

ToolDescription
outlook_list_contactsList contacts with cursor pagination.
outlook_search_contactsSearch contacts by name or email.
outlook_get_contactGet full contact details by ID.
outlook_create_contactCreate a new contact.
outlook_update_contactUpdate contact fields.
outlook_delete_contactDelete a contact.
outlook_list_contacts_deltaList only contact changes since the last call. Deletes come back as {id, is_deleted: True}. Cursor is stateless.

To Do

ToolDescription
outlook_list_task_listsList To Do lists.
outlook_list_tasksList tasks with status filter and pagination.
outlook_create_taskCreate task with due date, importance, recurrence.
outlook_update_taskUpdate task fields.
outlook_complete_taskMark task as completed.
outlook_delete_taskDelete a task.

Drafts

ToolDescription
outlook_list_draftsList draft messages with pagination.
outlook_create_draftCreate a draft. Supports scheduled delivery via deferred_send_datetime (server-side, Outlook-desktop-compatible "Delay Delivery").
outlook_update_draftUpdate draft fields. Accepts is_html=True for HTML bodies and deferred_send_datetime to set or clear the scheduled delivery time.
outlook_send_draftSend an existing draft.
outlook_delete_draftDelete a draft.

Attachments

ToolDescription
outlook_list_attachmentsList attachments on a message.
outlook_download_attachmentDownload attachment and save decoded bytes to a file.
outlook_send_with_attachmentsSend message with file attachments (auto upload session for >3MB).
outlook_attach_to_draftAdd attachments to an existing draft (auto upload session for >3MB).
outlook_remove_draft_attachmentRemove a single attachment from a draft.

Folder Management

ToolDescription
outlook_create_folderCreate mail folder (top-level or nested).
outlook_rename_folderRename a mail folder.
outlook_delete_folderDelete a mail folder (refuses well-known folders).

Threading and Batch

ToolDescription
outlook_list_threadGet all messages in a conversation thread.
outlook_copy_messageCopy a message to another folder.
outlook_batch_triageBatch move/flag/categorize/mark_read (max 20 per call). Single Graph /$batch round-trip — 10-20× faster than per-message calls for large triage.

User and Admin

ToolDescription
outlook_whoamiGet current user profile.
outlook_list_calendarsList available calendars.
outlook_list_categoriesList category definitions with colors.
outlook_get_mail_tipsPre-send check (OOF, delivery restrictions).
outlook_list_accountsList configured accounts.
outlook_switch_accountSwitch active account.

Configuration

Config lives at ~/.outlook-mcp/config.json (created with 0600 permissions).

FieldTypeDefaultDescription
client_idstringnullAzure AD application (client) ID. Required for auth.
tenant_idstring"consumers"Azure AD tenant. Use "consumers" for personal Microsoft accounts.
timezonestring"UTC"IANA timezone (e.g. "America/New_York"). Used for relative date computations in calendar tools.
read_onlyboolfalseWhen true, all write tools (send, reply, move, delete, create, update, RSVP) return an error.
allow_categorieslist[string][]Optional. Restrict write tools to specific categories (see below). Empty list = all writes allowed when read_only: false.

Granular Write Permissions (optional)

By default, read_only: false unlocks all write tools. For finer control, set allow_categories to restrict write access to specific categories. Read tools (list, search, get) are always allowed — allow_categories only narrows the write surface.

Available categories:

CategoryToolsRisk
mail_draftscreate/update/delete draftSafe — drafts only, no send
mail_triagemove, delete (soft), flag, categorize, mark read, copy, batchModerate — reversible except hard delete
mail_folderscreate/rename/delete folderModerate
mail_sendsend, reply, forward, send_draft, send_with_attachmentsDangerous — sends email on your behalf
calendar_writecreate/update/delete event, RSVPModerate — creates calendar entries
contacts_writecreate/update/delete contactModerate
todo_writecreate/update/complete/delete taskSafe — your own task list

Example policies:

Draft-only assistant (agent can compose drafts, you review and send):

{ "read_only": false, "allow_categories": ["mail_drafts", "mail_triage", "todo_write"] }

Calendar-only (agent can manage your schedule, nothing else):

{ "read_only": false, "allow_categories": ["calendar_write"] }

Full write access (agent can do everything):

{ "read_only": false }

Read-only (safest default, no writes):

{ "read_only": true }

When allow_categories is set, any tool in a non-allowed category returns a permission-denied error (PermissionDeniedError) naming the blocked category. When allow_categories is empty (or unset) and read_only is false, all write tools are permitted. read_only: true always takes precedence — if set, all writes are blocked regardless of allow_categories. Unknown category names are rejected at config load time with a validation error; only the seven names above are accepted.


Privacy and Security

  • Zero telemetry. No analytics, no tracking, no usage data collected.
  • Zero local caching. Every call goes directly to Microsoft Graph. No local email/calendar storage.
  • Zero third-party calls. The server only talks to graph.microsoft.com and login.microsoftonline.com.
  • Token storage. OAuth tokens are persisted via azure-identity's TokenCachePersistenceOptions. On macOS the OS Keychain is used; on Windows, DPAPI; on Linux with PyGObject/libsecret available, gnome-keyring. On Linux without libsecret (e.g. the isolated venv created by uv tool install), tokens fall back to a 0600 plaintext file at ~/.IdentityService/ and the MCP logs a one-time warning at startup. For encrypted storage on Linux, install python3-gi gnome-keyring libsecret-1-0 and re-create the venv with --system-site-packages.
  • No logging of sensitive data. Message bodies, recipient addresses, and tokens are never logged.
  • Config permissions. Config directory is 0700, config file is 0600. Symlinked configs are rejected.
  • Input validation. All user inputs (email addresses, Graph IDs, OData filters, KQL queries, datetimes) are validated and sanitized before reaching the Graph API.

Development

# Install dev dependencies
uv sync --extra dev

# Run tests
uv run pytest

# Lint
uv run ruff check src/ tests/

# Format
uv run ruff format src/ tests/

# Run server locally (stdio)
uv run outlook-mcp

Requirements: Python 3.10+


Roadmap

  • Inbox Rules -- list, create, delete rules
  • Advanced mail -- raw MIME export, internet message headers
  • Calendar -- cancel event (with attendee notification)
  • Checklists -- checklist items on To Do tasks
  • Enterprise (Entra ID) -- work/school account support

License

MIT. See LICENSE.

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Categories
Communication & MessagingProductivity & Office
Registryactive
Packageoutlook-graph-mcp
TransportSTDIO
UpdatedMay 23, 2026
View on GitHub

Related Communication & Messaging MCP Servers

View all →
Microsoft 365 Teams

io.github.mindstone/mcp-server-microsoft-teams

Microsoft 365 Teams via Graph: list chats, read/send messages, list teams/channels, presence.
8
Outlook Email

com.mintmcp/outlook-email

A MCP server for Outlook email that lets you search, read, and draft emails and replies.
8
Resend Email MCP

helbertparanhos/resend-email-mcp

Complete Resend email MCP: full API coverage + debug layer (deliverability, DNS, bounces).
Email Mcp

marlinjai/email-mcp

Unified email MCP server for Gmail, Outlook, iCloud, and IMAP with batch operations
13
Email (IMAP/SMTP)

io.github.mindstone/mcp-server-email-imap

Email IMAP/SMTP MCP server: iCloud, Gmail, Yahoo, Outlook, and custom IMAP providers
8
HTML Email Playbook

io.github.osamahassouna/email-playbook-mcp

Teaches AI to write HTML email that renders in Outlook, Gmail, and Apple Mail. 19 rules, 6 comps.