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) |
Capabilities
Features and capabilities supported by this server
| 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 | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jspv/msgraph-email-calendar-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server