m365-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | Host for HTTP transport. | |
| MCP_PORT | No | Port for HTTP transport. | |
| MCP_TRANSPORT | No | Transport mode: 'http' for Streamable HTTP, default 'stdio'. | |
| MCP_AUTH_TOKEN | No | Bearer token for HTTP transport authentication. | |
| MCP_AUTH_METHOD | No | Authentication method for HTTP transport: 'bearer'. | |
| M365_MCP_CACHE_KEY | No | Encryption key for cache. Used when system keyring is unavailable. | |
| M365_MCP_CLIENT_ID | Yes | Your Azure App Registration Application ID | |
| M365_MCP_TENANT_ID | No | Tenant ID for work/school accounts. Use 'consumers' for personal accounts. | |
| M365_MCP_CACHE_WARMING | No | Enable cache warming (true/false). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| m365_listA | Browse items of one type in a known place: emails in a mail folder, events in a time window, calendars, contacts, contact folders, mail folders, inbox rules, or files in a OneDrive folder (optionally as a tree). Use this when you know where to look. Use m365_search to find items by text, and m365_get when you already have an ID. Returns compact items plus next_cursor for more. |
| m365_getA | Read one item whose ID you already have: an email with its body, an event with attendees, a contact, a mail or contact folder, an inbox rule, a calendar, a OneDrive item's details, or the status of a copy started with drive_copy (resource='operation'). Use m365_list or m365_search to find IDs. Use m365_get_content to download files or attachments. Returns the item. |
| m365_searchA | Find emails, events, contacts or OneDrive files by free text when you do not know where they are. Search one type or several at once. Do not use it to browse a folder (m365_list) or open a known ID (m365_get). Returns matching items labelled by resource, newest first, plus next_cursor. |
| m365_get_contentA | Get the content of an item rather than its details: save a OneDrive file or an email attachment to a local file (mode='download'), get a temporary download link for a OneDrive file (mode='download_url'), or export a contact as a vCard (mode='vcard'). Writes to the local disk only inside the allowed folders. Use m365_get for item details. |
| m365_createA | Create a mail folder, calendar, contact, contact folder or OneDrive folder. Supply the sub-object that matches resource. Not for emails (email_create_draft), events (calendar_create_event), inbox rules (email_rule_manage) or uploading files (drive_upload). Returns the created item. |
| m365_updateA | Change properties of an existing email, mail folder, contact or OneDrive item: mark read or unread, flag, set importance or categories, Focused/Other, rename folders and files, or edit contact details. Supply the *_changes object that matches resource. Not for events (calendar_update_event), inbox rules (email_rule_manage) or file contents (drive_upload). Returns the changed field names. |
| m365_moveA | Move an email, mail folder, contact or OneDrive item to another folder. Moving an email to 'archive' archives it; moving a contact places it in a contact folder. Moved emails and contacts get a new ID, which is returned: use it for later calls. |
| m365_deleteA | Delete one email, mail folder, inbox rule, event, calendar, contact, contact folder or OneDrive item. Always requires confirm=true after the user approves. Deleting a meeting you organise sends cancellations to its attendees. OneDrive items go to the recycle bin. Returns what happened and whether it can be recovered. |
| email_create_draftA | Create an unsent email draft to review, then send later with email_send(mode='draft'). Sends nothing. Returns the draft ID. |
| email_sendA | Send an email now: a new message (mode='new') or a draft you created earlier (mode='draft'). Requires confirm=true after the user approves the recipients and content. Cannot be undone. Never infer recipients. |
| email_replyA | Reply to an email, either to the sender only (mode='sender') or to everyone on it (mode='all'). Requires confirm=true after the user approves the reply. Returns the conversation the reply joined. |
| email_forwardA | Forward an email to recipients the user names, with an optional note. Requires confirm=true after the user approves. Never infer recipients from other context. |
| calendar_create_eventA | Add an event to your calendar. With attendees, Outlook emails them an invitation, so confirm=true is then required. Without attendees it is a private appointment and needs no confirmation. Returns the event. |
| calendar_update_eventA | Change an event's time, title, location, description, reminder or attendees. If the event has attendees, or you add some, Outlook emails them an update, so confirm=true is then required. Returns the updated event. |
| calendar_respondA | Accept, tentatively accept or decline a meeting invitation, optionally proposing a new time (with tentative or decline). When a response is emailed to the organiser (the default), confirm=true is required. |
| calendar_find_availabilityA | Show when you are busy in your own calendar during a time range and, given slot_minutes, suggest free slots of that length within your working hours. Personal accounts cannot see other people's availability, so this covers your calendar only. |
| drive_uploadA | Upload a local file to OneDrive, as a new file (parent_id or parent_path) or by replacing an existing file's contents (item_id). Reads from the local disk, inside the allowed folders only. Returns the OneDrive item. |
| drive_copyA | Copy a OneDrive file or folder to another folder. Copying runs in the background: this returns an operation_id to check with m365_get(resource='operation'). |
| drive_shareA | Share a OneDrive file or folder by link (mode='link') or by inviting named people (mode='invite'). A view or edit link works for anyone who has it. Always requires confirm=true after the user approves who gets access. Returns the link or the invitation results. |
| email_folder_mark_all_readA | Mark every unread message in one mail folder as read, up to max_messages per call. If remaining_unread is above zero, call again. Use m365_update for a single message. |
| email_folder_emptyA | Delete all messages in one mail folder, such as Junk Email or Deleted Items, up to max_messages per call. Subfolders are kept. Requires confirm=true after the user approves. Deleted messages cannot be restored with these tools. |
| email_rule_manageA | Create, change, enable or disable, or reorder an Inbox rule. Rules that forward, redirect or delete mail require confirm=true because they act silently on future mail. Read rules with m365_list or m365_get; delete one with m365_delete. Returns the rule. |
| calendar_forwardA | Forward a meeting invitation to people the user names, with an optional note. Requires confirm=true after the user approves. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 23 tools
Tools are largely distinct and descriptions explicitly cross-reference each other (e.g. m365_create says 'not for emails... use email_create_draft'). However, resource CRUD is split awkwardly: events are created via calendar_create_event, updated via calendar_update_event, but deleted only through the generic m365_delete, which an agent may not find. Overlaps like m365_get vs m365_get_content and m365_update vs calendar_update_event are clarified in text but still require careful reading.
Consistent resource_action pattern throughout: generic m365_* verbs (list, get, search, create, update, move, delete) plus resource-prefixed families (email_, calendar_, drive_). The dual scheme (generic m365_ for cross-resource CRUD vs resource-prefixed for specialized ops) is a deliberate and readable convention, with only minor variance like m365_get_content.
23 tools is on the heavier side but justified by three distinct domains (email, calendar, Drive) each needing their own specialized operations on top of the shared generic CRUD set. No obvious redundant tools beyond the intentional generic/specific split.
Strong lifecycle coverage across email (send, draft, reply, forward, move, delete, rules, folder ops), calendar (create, update, respond, availability, forward), and OneDrive (upload, copy, share, download, create/move/delete). Minor gaps: no calendar_delete_event (only generic m365_delete) and no dedicated attachment-listing operation, but core workflows are covered.