outlook-personal-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OUTLOOK_MCP_DEBUG | No | Set to true to log each Graph request's method, URL, and HTTP status code to stderr. Never logs tokens or message content. | false |
| OUTLOOK_MCP_AUTHORITY | No | MSAL authority URL (change only if you move to a work/school tenant) | https://login.microsoftonline.com/consumers |
| OUTLOOK_MCP_CLIENT_ID | Yes | Azure app's Application (client) ID | |
| OUTLOOK_MCP_FILE_ROOT | No | Only files under this directory can be read by add_attachment or written by download_attachment | ~/.local/share/outlook-personal-mcp/files |
| OUTLOOK_MCP_TOKEN_CACHE | No | Path to the MSAL token cache file | ~/.config/outlook-personal-mcp/token_cache.bin |
| OUTLOOK_MCP_MAX_FILE_BYTES | No | Maximum bytes allowed for local attachment reads and attachment downloads | 3145728 |
| OUTLOOK_MCP_ALLOW_PERMANENT_DELETE | No | Set to true to enable the permanent_delete tool (irreversible) | 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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whoamiA | Return the signed-in user's Microsoft account profile. |
| list_foldersA | List mail folders with unread/total counts. |
| create_folderA | Create a mail folder, optionally nested under parent_folder_id. |
| rename_folderC | Rename a mail folder. |
| delete_folderA | Delete a mail folder (moves it to Deleted Items). |
| list_messagesA | List messages (newest first). Optionally restrict to a folder or unread only. |
| search_messagesB | Full-text search across the mailbox (Graph $search). |
| get_messageA | Get a single message; include_body returns the full body text/HTML. |
| list_attachmentsA | List a message's attachments (id, name, size, contentType). |
| download_attachmentA | Download an attachment to a local file path. |
| send_mailC | Send an email. Set save_to_sent=False to skip saving to Sent Items. |
| replyC | Reply to a message (set reply_all to reply to everyone). |
| forwardA | Forward a message to recipients with an optional comment. |
| move_messageB | Move a message to another folder. |
| copy_messageC | Copy a message to another folder. |
| mark_readA | Mark a message read (read=True) or unread (read=False). |
| flag_messageB | Flag or unflag a message. |
| delete_messageA | Delete a message (moves it to Deleted Items; reversible). |
| create_draftC | Create a draft message (not sent). |
| update_draftB | Update a draft's subject and/or body. |
| add_attachmentA | Attach a local file to a draft. |
| send_draftB | Send an existing draft. |
| list_calendarsA | List the user's calendars. |
| list_eventsB | List events. If start and end (ISO 8601) are given, returns that window via calendarView. |
| search_eventsB | Search events by free text. |
| get_eventA | Get one event including body and attendees. |
| create_eventA | Create a calendar event. Times are ISO 8601 in the given time_zone. |
| update_eventA | Update fields on an existing event (only provided fields change). |
| delete_eventB | Delete/cancel a calendar event. |
| respond_eventA | Respond to a meeting invite. response is one of: accept, decline, tentative. |
| find_availabilityB | Free/busy across the given people for a time window (Graph getSchedule). |
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 31 tools
Each tool targets a distinct resource and action: folder operations are separate from message operations, and draft/attachment/calendar tools are clearly partitioned. Even overlapping tools like list_messages vs search_messages are differentiated by filtering vs full-text search. No two tools appear to do the same thing.
The vast majority follow a consistent verb_noun pattern (delete_folder, send_mail, create_event). Minor deviations like whoami and short verbs reply/forward are still intuitive and do not disrupt the overall predictable scheme.
At 31 tools, this is a relatively large surface, but the server covers two major domains (mail and calendar) with comprehensive operations. Each tool maps to a meaningful operation, so while the count is above the typical 3-15 range, it is justified by the scope and does not feel padded.
The tool set provides full lifecycle coverage for folders, messages, drafts, and calendar events: create, read, update, delete, search, and specialized actions (reply, forward, respond, find_availability). There are no obvious dead ends; every workflow from composing a draft to sending it, or from listing events to updating them, is supported.