msgraph-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MICROSOFT_SCOPES | No | Space-separated delegated permissions (default: User.Read Mail.ReadWrite Mail.Send Calendars.ReadWrite Calendars.ReadWrite.Shared People.Read) | |
| MICROSOFT_CLIENT_ID | Yes | Azure app registration client ID (required) | |
| MICROSOFT_TENANT_ID | No | Tenant ID: 'organizations', 'common', or a specific tenant GUID (default: common) | |
| MAX_ATTACHMENT_INLINE_SIZE | No | Max attachment size (bytes) for inline base64 (default: 1572864) | |
| MICROSOFT_TOKEN_CACHE_PATH | No | Path to the local MSAL token cache (default: .data/msal_token_cache.json) |
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
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| auth_statusA | Show current Microsoft auth configuration and cached accounts. When running inside the MCP Lambda wrapper framework, reports framework-managed authentication status instead of local MSAL state. |
| start_authA | Start Microsoft authentication. In Lambda mode, returns an OAuth authorization URL. In local mode, starts the device-code flow. |
| finish_authA | Complete Microsoft authentication after user approval. In Lambda mode, this is not needed — call auth_status instead. In local mode, completes the device-code flow. |
| list_foldersA | List mail folders. Pass parent_folder_id to list subfolders (check child_folder_count to know if subfolders exist). |
| list_messagesA | List recent mail messages from a folder, newest first. Pass |
| get_messageB | Get a full read-only view of a specific mail message. |
| update_messageB | Update message properties: read/unread, follow-up flag (flagged/complete/notFlagged), or color categories. |
| move_messageC | Move a message to another folder. Requires Mail.ReadWrite permission. |
| delete_messageC | Delete a message or move it to Deleted Items. Requires Mail.ReadWrite permission. |
| search_messagesC | Search messages using Microsoft Graph message search. |
| bulk_manage_messagesA | Bulk-manage messages with filtering. Supports dry-run, delete, move, and mark-read actions. By default ( The response reports coverage honestly: |
| list_calendarsB | List readable calendars. Pass user_id for shared calendars (e.g. another user's email or object ID). |
| list_eventsC | List events from a calendar in a time range. Pass user_id for shared calendars. |
| get_eventB | Get full details for a specific calendar event. Pass user_id for shared calendars. |
| send_messageA | Compose and send an email (no attachments). Defaults to dry-run (preview only). Set dry_run=False to actually send. To send with attachments, use create_draft + add_attachment_to_draft + manage_draft instead. |
| reply_to_messageA | Reply to a message. Defaults to dry-run (preview only). Set dry_run=False to actually send. |
| forward_messageA | Forward a message. Defaults to dry-run (preview only). Set dry_run=False to actually send. |
| create_draftB | Create a draft email (saved to Drafts folder). Use this when you need to add attachments before sending, or want to build a message over multiple steps. Then use manage_draft to send. |
| manage_draftA | Update and/or send a previously created draft. Provide fields to update, set send=True to send. Use after create_draft and optionally add_attachment_to_draft. |
| get_attachmentsA | Get attachments for a message. Without attachment_id: list all metadata. With attachment_id: download that attachment (base64 if under 1.5 MB). |
| add_attachment_to_draftC | Attach a file (base64-encoded) to a draft message. |
| create_folderB | Create a new mail folder, optionally under a parent folder. |
| list_aliasesC | List email aliases (send-from addresses) for the authenticated user. |
| create_eventB | Create a new calendar event. Pass user_id for shared calendars. |
| update_eventC | Update an existing calendar event. Pass user_id for shared calendars. |
| delete_eventB | Delete or cancel a calendar event. Pass user_id for shared calendars. |
| respond_to_eventC | Respond to a meeting invite. Pass user_id for shared calendars. |
| check_availabilityB | Check calendar availability. mode='free_busy': get free/busy schedule. mode='suggest': suggest meeting times. |
| search_peopleB | Search for people by name to find their email addresses. |
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 29 tools
Each tool targets a distinct operation (get vs list vs create vs delete vs reply vs forward, etc.) within clear subdomains (mail, calendar, auth, people). No two tools serve the same purpose, and descriptions clarify subtle differences like send_message vs reply_to_message.
Virtually all tools follow a consistent verb_noun snake_case pattern (e.g., list_messages, create_event, delete_message). The only slight deviation is auth_status (no verb), but it's a common idiom for status checks and does not break the overall pattern.
With 29 tools, the set is slightly large but well-justified by the breadth of the Microsoft Graph API (mail, calendar, people, auth). Each tool fills a specific need, and no tools feel redundant. It's just above the typical well-scoped range (3-15) but still cohesive.
The toolset covers the core CRUD operations for mail and calendar, plus search, bulk actions, and check availability. Minor gaps exist (e.g., sending attachments directly without draft flow, no contact management beyond search), but these are acceptable workarounds for the common use case.