Microsoft Graph MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | HTTP bind host | 127.0.0.1 |
| MCP_PORT | No | HTTP bind port | 3000 |
| MCP_API_KEY | No | Bearer token required for HTTP transport | |
| MCP_TRANSPORT | No | stdio or streamable-http | stdio |
| MSGRAPH_CLOUD | No | Sovereign cloud: global, us_gov_l4, us_gov_l5, china, germany | global |
| MSGRAPH_SCOPES | No | Comma-separated extra scopes | (built-in defaults) |
| MSGRAPH_BASE_URL | No | Override Graph base URL | (from cloud) |
| MSGRAPH_TOOLSETS | No | Reserved for future per-workload gating | core |
| MSGRAPH_AUTH_MODE | No | Authentication mode. One of: interactive, device_code, client_secret, certificate, obo, managed_identity, managed_identity_user, pre_token. | interactive |
| MSGRAPH_CERT_PATH | No | Path to PEM cert (certificate mode) | |
| MSGRAPH_CLIENT_ID | No | Entra app (client) ID | |
| MSGRAPH_LOG_LEVEL | No | Python log level | WARNING |
| MSGRAPH_MAX_PAGES | No | Max pages auto-paginated per collection | 50 |
| MSGRAPH_READ_ONLY | No | true disables every write tool | false |
| MSGRAPH_TENANT_ID | No | Entra tenant ID | common |
| MSGRAPH_API_VERSION | No | v1.0 or beta | v1.0 |
| MSGRAPH_ACCESS_TOKEN | No | Pre-acquired token (pre_token) | |
| MSGRAPH_CERT_PASSWORD | No | Optional cert password | |
| MSGRAPH_CLIENT_SECRET | No | App secret (client_secret / obo) | |
| MSGRAPH_TOKEN_CACHE_PATH | No | Token cache location | ~/.msgraph-mcp/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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_sign_in_logsD | – |
| get_sign_in_logD | – |
| list_directory_audit_logsD | – |
| list_provisioning_logsD | – |
| batch_requestA | Execute up to 20 Graph requests in one round trip. requests_json: JSON array of {id, method, url, body?, headers?}. Relative URLs like '/me/messages' are relative to the selected API version. |
| list_upcoming_eventsC | List upcoming events from the user's default calendar. |
| list_events_in_rangeB | List events in a date range. Dates in ISO 8601 format. |
| get_eventD | – |
| list_event_instancesB | List instances of a recurring event in a date range. |
| list_event_attachmentsD | – |
| list_calendarsD | – |
| list_calendars_in_groupD | – |
| list_roomsD | – |
| find_meeting_timesC | Find meeting slots. attendees: semicolon-separated email addresses. |
| get_scheduleC | Get free/busy schedule. availability_views: semicolon-separated email addresses. |
| create_eventB | Create a calendar event. Dates in ISO 8601. attendees: semicolon-separated emails. |
| update_eventD | – |
| cancel_eventD | – |
| respond_to_eventC | Respond to event. response: 'tentativelyAccept', 'accept', 'decline'. |
| create_subscriptionC | Create a webhook subscription for a resource. resource: e.g. 'me/messages', 'me/events', 'me/drive/root'. |
| list_subscriptionsD | – |
| reauthorize_subscriptionB | Reauthorize an expiring subscription. |
| delete_subscriptionD | – |
| delta_queryC | Execute a delta query on a resource. resource: 'me/messages', 'me/events', 'me/contacts', 'me/drive/root'. |
| list_chatsD | – |
| get_chatD | – |
| list_chat_messagesD | – |
| list_chat_membersD | – |
| send_chat_messageC | Send a message to a chat. content_type: 'text' or 'html'. |
| create_chatA | Create a chat. chat_type: 'group' or 'oneOnOne'. members: semicolon-separated UPNs. |
| search_messagesC | Search Teams messages using Microsoft Search KQL. |
| list_contactsD | – |
| get_contactD | – |
| list_contact_foldersD | – |
| list_folder_contactsD | – |
| create_contactD | – |
| update_contactD | – |
| delete_contactD | – |
| list_managed_devicesD | – |
| get_managed_deviceD | – |
| list_directory_devicesA | List directory (Entra) devices, not Intune-managed devices. |
| list_device_configurationsD | – |
| list_compliance_policiesD | – |
| list_mobile_appsD | – |
| get_mobile_appD | – |
| get_organizationD | – |
| list_directory_rolesD | – |
| list_directory_role_membersD | – |
| list_administrative_unitsD | – |
| get_administrative_unitD | – |
| list_administrative_unit_membersD | – |
| list_org_contactsD | – |
| get_org_contactD | – |
| get_objects_by_idsC | Resolve multiple object IDs in one call. ids: comma-separated GUIDs. |
| list_worksheetsB | List worksheets in an Excel workbook stored in OneDrive/SharePoint. |
| get_used_rangeC | Get the used (data) range of a worksheet. |
| read_rangeB | Read cell values from a range. address: e.g. 'A1:C10' or 'A1'. |
| list_tablesD | – |
| list_table_rowsD | – |
| write_rangeC | Write values to a range. values_json: JSON 2D array, e.g. '[["A",1],["B",2]]'. |
| append_table_rowB | Append a row to a table. values_json: JSON 1D array of cell values. |
| update_table_rowC | Update a table row. index: 0-based row index. |
| create_tableC | Create a table from a range. address: e.g. 'A1:D10'. |
| create_sessionA | Create a persistent Excel session for batch operations. Returns session ID. |
| list_recent_filesD | – |
| list_shared_with_meD | – |
| list_root_filesD | – |
| get_fileD | – |
| get_file_contentB | Get file content (returns base64-encoded). |
| list_folder_childrenD | – |
| list_file_versionsD | – |
| list_permissionsD | – |
| search_filesD | – |
| create_folderD | – |
| upload_fileC | Upload a file. content_base64: base64-encoded file content. |
| create_upload_sessionB | Create an upload session for large files (>4MB). Returns upload URL. |
| update_fileD | – |
| delete_fileD | – |
| copy_fileD | – |
| move_fileD | – |
| create_sharing_linkB | Create a sharing link. link_type: 'view', 'edit', 'embed'. scope: 'anonymous', 'organization', 'users'. |
| revoke_sharing_linkD | – |
| list_group_drive_filesD | – |
| list_groupsD | – |
| get_groupD | – |
| list_group_membersD | – |
| list_group_ownersD | – |
| list_transitive_membersD | – |
| create_groupD | – |
| add_memberD | – |
| remove_memberD | – |
| delete_groupD | – |
| list_access_reviewsD | – |
| get_access_reviewD | – |
| list_access_packagesD | – |
| list_directory_role_assignmentsC | List Entra ID directory role assignments (PIM-adjacent). |
| list_directory_role_definitionsD | – |
| list_messagesD | – |
| get_messageD | – |
| list_attachmentsD | – |
| download_attachmentA | Get attachment content (returns base64-encoded bytes). |
| list_mail_foldersD | – |
| list_folder_messagesD | – |
| list_inbox_rulesD | – |
| send_mailC | Send email. to_recipients/cc_recipients: semicolon-separated email addresses. |
| create_draftA | Create a mail draft for user review (does not send). |
| send_draftD | – |
| reply_to_messageD | – |
| reply_all_to_messageD | – |
| forward_messageD | – |
| update_messageD | – |
| move_messageD | – |
| delete_messageD | – |
| get_mailbox_settingsD | – |
| update_mailbox_settingsC | Update mailbox settings. automatic_replies_status: 'enabled', 'disabled', or 'scheduled'. |
| delta_messagesC | Get message changes. For first call, omit delta_token. start_date_time: ISO 8601. |
| list_notebooksD | – |
| list_sectionsD | – |
| list_notebook_sectionsD | – |
| list_section_pagesD | – |
| list_section_groupsD | – |
| get_page_contentA | Get OneNote page content as HTML. |
| get_pageD | – |
| create_pageC | Create a OneNote page. html_content: HTML body content. |
| update_page_contentD | – |
| delete_pageD | – |
| copy_section_to_notebookC | Copy a section to a notebook. |
| create_online_meetingC | Create a Teams online meeting. participants: semicolon-separated emails (optional). |
| list_online_meetingsD | – |
| get_online_meetingD | – |
| list_transcriptsD | – |
| get_transcript_contentD | – |
| list_attendance_reportsD | – |
| list_meeting_recordingsD | – |
| list_all_transcriptsC | List all transcripts for a meeting. |
| people_searchB | Search people using the relevance graph (colleagues ranked by interaction). |
| list_trendingD | – |
| list_usedD | – |
| list_shared_insightsD | – |
| get_my_rich_profileD | – |
| list_my_planner_plansD | – |
| list_group_plansD | – |
| list_bucketsD | – |
| list_planner_tasksD | – |
| list_my_tasksD | – |
| get_task_detailsD | – |
| create_planner_taskC | Create a planner task. assignments: comma-separated user IDs to assign. |
| update_planner_taskA | Update a planner task. Requires If-Match header (use etag from the task). |
| create_planner_planD | – |
| create_planner_bucketD | – |
| delete_planner_taskD | – |
| get_my_presenceD | – |
| get_user_presenceD | – |
| get_presences_by_user_idA | Get presence for multiple users. user_ids: comma-separated GUIDs. |
| set_user_presenceC | Set presence. availability/activity: e.g. 'Available'/'Available', 'Busy'/'InACall'. |
| get_active_user_reportC | Get M365 active user detail report. period: 'D7', 'D30', 'D90', 'D180'. |
| get_teams_user_activityD | – |
| get_mailbox_usageD | – |
| get_onedrive_usageD | – |
| get_sharepoint_usageD | – |
| search_queryB | Unified Microsoft Search (KQL). entity_types: comma-separated (message, driveItem, site, listItem, person, event). |
| search_externalC | Search a specific Microsoft Graph connector (externalItem). |
| list_security_alertsC | List Microsoft 365 Defender alerts (v2). |
| get_security_alertD | – |
| list_security_incidentsD | – |
| get_security_incidentD | – |
| list_secure_scoresD | – |
| list_secure_score_controlsD | – |
| search_sitesA | Search SharePoint sites by name/description. |
| get_root_siteD | – |
| get_site_by_pathA | Get a site by its full path. hostname: e.g. 'contoso.sharepoint.com'. path: e.g. 'sites/marketing' or '' for root. |
| get_siteD | – |
| list_sub_sitesD | – |
| list_site_drivesA | List document libraries (drives) on a site. |
| list_listsD | – |
| get_listD | – |
| list_list_itemsC | List items in a SharePoint list. Use expand_fields=true to get column values. |
| list_list_items_with_fieldsA | List SharePoint list items with all column values expanded. |
| get_list_itemD | – |
| create_list_itemB | Create a list item. fields_json: JSON object of {columnName: value}. |
| update_list_itemB | Update list item fields. fields_json: JSON object of {columnName: value}. |
| delete_list_itemD | – |
| list_columnsB | List column schema of a SharePoint list. |
| list_content_typesD | – |
| list_site_pagesD | – |
| list_my_teamsD | – |
| list_all_teamsD | – |
| get_teamD | – |
| list_channelsD | – |
| get_channelD | – |
| list_channel_messagesD | – |
| get_channel_messageD | – |
| list_message_repliesD | – |
| send_channel_messageB | Send message to a Teams channel. content_type: 'text' or 'html'. |
| list_team_membersD | – |
| create_channelC | Create a channel. membership_type: 'standard' or 'private'. |
| list_installed_appsD | – |
| list_team_tabsD | – |
| list_todo_listsD | – |
| list_todo_tasksD | – |
| get_todo_taskD | – |
| create_todo_listD | – |
| create_todo_taskB | Create a To Do task. due_date: YYYY-MM-DD. importance: 'low', 'normal', 'high'. |
| update_todo_taskC | Update a To Do task. status: 'notStarted', 'inProgress', 'completed', 'deferred'. |
| delete_todo_taskD | – |
| add_checklist_itemD | – |
| list_checklist_itemsD | – |
| get_my_profileD | – |
| get_userD | – |
| list_usersD | – |
| get_user_photoC | Get user profile photo (returns metadata, not bytes). |
| get_direct_reportsD | – |
| get_user_managerD | – |
| get_transitive_member_ofD | – |
| get_user_licensesD | – |
| check_member_groupsC | Check if user belongs to groups. group_ids: comma-separated GUIDs. |
| update_userD | – |
| get_my_managerD | – |
| get_my_groupsD | – |
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/oliverhruby/msgraph-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server