Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SILENTNoDisable console output. Set to 'true' or '1'.
LOG_LEVELNoSet logging level.info
READ_ONLYNoStart server in read-only mode, disabling write operations. Set to 'true' or '1'.
ENABLED_TOOLSNoFilter tools using a regex pattern (e.g., 'excel|contact').
MS365_MCP_ORG_MODENoEnable organization/work mode (includes Teams, SharePoint, etc.). Set to 'true' or '1'.
MS365_MCP_CLIENT_IDNoCustom Azure AD application (client) ID. Defaults to built-in app ID.
MS365_MCP_TENANT_IDNoCustom Azure AD tenant ID. Defaults to 'common' for multi-tenant apps.common
MS365_MCP_CLOUD_TYPENoMicrosoft cloud environment: 'global' (default) or 'china' (21Vianet).global
MS365_MCP_OAUTH_TOKENNoDirectly provide a pre-existing OAuth access token for Microsoft Graph API (Bring Your Own Token). Bypasses interactive login but requires external lifecycle management.
MS365_MCP_KEYVAULT_URLNoAzure Key Vault URL for secrets management (e.g., https://your-keyvault-name.vault.azure.net).
MS365_MCP_CLIENT_SECRETNoCustom Azure AD application client secret. Optional for public apps.
MS365_MCP_OUTPUT_FORMATNoSet to 'toon' to enable experimental TOON output format for 30-60% token reduction.
MS365_MCP_TOKEN_CACHE_PATHNoCustom file path for the MSAL token cache.
MS365_MCP_SELECTED_ACCOUNT_PATHNoCustom file path for selected account metadata.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
login

Authenticate with Microsoft using device code flow

logout

Log out from Microsoft account

verify-login

Check current Microsoft authentication status

list-accounts

List all available Microsoft accounts

select-account

Select a specific Microsoft account to use

remove-account

Remove a Microsoft account from the cache

delete-onedrive-file

Delete navigation property items for drives

list-folder-files

Return a collection of DriveItems in the children relationship of a DriveItem. DriveItems with a non-null folder or package facet can have one or more child DriveItems.

download-onedrive-file-content

The content stream, if the item represents a file.

upload-file-content

The content stream, if the item represents a file.

list-excel-worksheets

Represents a collection of worksheets associated with the workbook. Read-only.

create-excel-chart

Creates a new chart.

format-excel-range

Update the navigation property format in drives

sort-excel-range

Update the navigation property sort in drives

get-excel-range

Invoke function range

get-drive-root-item

The root folder of the drive. Read-only.

get-current-user

Retrieve the properties and relationships of user object. This operation returns by default only a subset of the more commonly used properties for each user. These default properties are noted in the Properties section. To get properties that are not returned by default, do a GET operation for the user and specify the properties in a $select OData query option. Because the user resource supports extensions, you can also use the GET operation to get custom properties and extension data in a user instance. Customers through Microsoft Entra ID for customers can also use this API operation to retrieve their details.

list-calendars

Get all the user's calendars (/calendars navigation property), get the calendars from the default calendar group or from a specific calendar group.

get-specific-calendar-view

The calendar view for the calendar. Navigation property. Read-only.

šŸ’” TIP: Returns expanded recurring event instances (not just seriesMaster) within a date range for a specific calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Each instance includes seriesMasterId and type (occurrence/exception) fields for recurring event linkage. Use fetchAllPages=true to retrieve all results when there are many events.

list-specific-calendar-events

The events in the calendar. Navigation property. Read-only.

create-specific-calendar-event

Use this API to create a new event in a calendar. The calendar can be one for a user, or the default calendar of a Microsoft 365 group.

šŸ’” TIP: CRITICAL: Do not try to guess the email address of the recipients. Use the list-users tool to find the email address of the recipients.

get-specific-calendar-event

The events in the calendar. Navigation property. Read-only.

update-specific-calendar-event

Update the navigation property events in me

šŸ’” TIP: CRITICAL: Do not try to guess the email address of the recipients. Use the list-users tool to find the email address of the recipients.

delete-specific-calendar-event

Delete navigation property events for me

list-calendar-event-instances

The occurrences of a recurring series, if the event is a series master. This property includes occurrences that are part of the recurrence pattern, and exceptions modified, but doesn't include occurrences canceled from the series. Navigation property. Read-only. Nullable.

šŸ’” TIP: Expand a recurring event into individual instances within a date range. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Use this to see all occurrences of a recurring event.

get-calendar-view

Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, from the user's default calendar, or from some other calendar of the user.

šŸ’” TIP: Returns expanded recurring event instances (not just seriesMaster) within a date range for the default calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Use get-specific-calendar-view if you need a non-default calendar.

list-outlook-contacts

Get a contact collection from the default contacts folder of the signed-in user. There are two scenarios where an app can get contacts in another user's contact folder:

create-outlook-contact

Add a contact to the root Contacts folder or to the contacts endpoint of another contact folder.

get-outlook-contact

Retrieve the properties and relationships of a contact object. There are two scenarios where an app can get a contact in another user's contact folder:

update-outlook-contact

Update the properties of a contact object.

delete-outlook-contact

Delete a contact.

list-drives

Retrieve the list of Drive resources available for a target User, Group, or Site.

list-calendar-events

Get a list of event objects in the user's mailbox. The list contains single instance meetings and series masters. To get expanded event instances, you can get the calendar view, or get the instances of an event. Currently, this operation returns event bodies in only HTML format. There are two scenarios where an app can get events in another user's calendar:

create-calendar-event

Create one or more multi-value extended properties in a new or existing instance of a resource. The following user resources are supported: The following group resources are supported: See Extended properties overview for more information about when to use open extensions or extended properties, and how to specify extended properties.

šŸ’” TIP: CRITICAL: Do not try to guess the email address of the recipients. Use the list-users tool to find the email address of the recipients.

get-calendar-event

Get the properties and relationships of the specified event object. Currently, this operation returns event bodies in only HTML format. There are two scenarios where an app can get an event in another user's calendar: Since the event resource supports extensions, you can also use the GET operation to get custom properties and extension data in an event instance.

update-calendar-event

Update the properties of the event object.

šŸ’” TIP: CRITICAL: Do not try to guess the email address of the recipients. Use the list-users tool to find the email address of the recipients.

delete-calendar-event

Removes the specified event from the containing calendar. If the event is a meeting, deleting the event on the organizer's calendar sends a cancellation message to the meeting attendees.

list-mail-folders

Get the mail folder collection directly under the root folder of the signed-in user. The returned collection includes any mail search folders directly under the root. By default, this operation does not return hidden folders. Use a query parameter includeHiddenFolders to include them in the response. This operation does not return all mail folders in a mailbox, only the child folders of the root folder. To return all mail folders in a mailbox, each child folder must be traversed separately.

list-mail-child-folders

Get the folder collection under the specified folder. You can use the .../me/mailFolders shortcut to get the top-level folder collection and navigate to another folder. By default, this operation does not return hidden folders. Use a query parameter includeHiddenFolders to include them in the response.

list-mail-folder-messages

Get all the messages in the specified user's mailbox, or those messages in a specified folder in the mailbox.

šŸ’” TIP: CRITICAL: When searching emails, the $search parameter value MUST be wrapped in double quotes. Format: $search="your search query here". Use KQL (Keyword Query Language) syntax to search specific properties: 'from:', 'subject:', 'body:', 'to:', 'cc:', 'bcc:', 'attachment:', 'hasAttachments:', 'importance:', 'received:', 'sent:'. Examples: $search="from:john@example.com" | $search="subject:meeting AND hasAttachments:true" | $search="body:urgent AND received>=2024-01-01" | $search="from:alice AND importance:high". Remember: ALWAYS wrap the entire search expression in double quotes! Reference: https://learn.microsoft.com/en-us/graph/search-query-parameter

list-mail-messages

Get an open extension (openTypeExtension object) identified by name or fully qualified name. The table in the Permissions section lists the resources that support open extensions. The following table lists the three scenarios where you can get an open extension from a supported resource instance.

šŸ’” TIP: CRITICAL: When searching emails, the $search parameter value MUST be wrapped in double quotes. Format: $search="your search query here". Use KQL (Keyword Query Language) syntax to search specific properties: 'from:', 'subject:', 'body:', 'to:', 'cc:', 'bcc:', 'attachment:', 'hasAttachments:', 'importance:', 'received:', 'sent:'. Examples: $search="from:john@example.com" | $search="subject:meeting AND hasAttachments:true" | $search="body:urgent AND received>=2024-01-01" | $search="from:john AND importance:high". Remember: ALWAYS wrap the entire search expression in double quotes! Reference: https://learn.microsoft.com/en-us/graph/search-query-parameter

create-draft-email

Create an open extension (openTypeExtension object) and add custom properties in a new or existing instance of a resource. You can create an open extension in a resource instance and store custom data to it all in the same operation, except for specific resources. The table in the Permissions section lists the resources that support open extensions.

get-mail-message

Get the properties and relationships of the eventMessage object. Apply the $expand parameter on the event navigation property to get the associated event in an attendee's calendar. Currently, this operation returns event message bodies in only HTML format.

update-mail-message

Update the properties of an eventMessage object.

delete-mail-message

Delete eventMessage.

list-mail-attachments

Retrieve a list of attachment objects.

add-mail-attachment

Use this API to create a new Attachment. An attachment can be one of the following types: All these types of attachment resources are derived from the attachment resource.

get-mail-attachment

Read the properties, relationships, or raw contents of an attachment that is attached to a user event, message, or group post. An attachment can be one of the following types: All these types of attachments are derived from the attachment resource.

delete-mail-attachment

Delete navigation property attachments for me

create-forward-draft

Create a draft to forward an existing message, in either JSON or MIME format. When using JSON format, you can:

  • Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.

  • Specify either the toRecipients parameter or the toRecipients property of the message parameter. Specifying both or specifying neither will return an HTTP 400 Bad Request error.

  • Update the draft later to add content to the body or change other message properties. When using MIME format:

  • Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.

  • Add any attachments and S/MIME properties to the MIME content. Send the draft message in a subsequent operation. Alternatively, forward a message in a single operation.

šŸ’” TIP: Create a forward draft (does not send). Useful when user wants to review before sending.

create-reply-draft

Create a draft to reply to the sender of a message in either JSON or MIME format. When using JSON format:

  • Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.

  • If replyTo is specified in the original message, per Internet Message Format (RFC 2822), you should send the reply to the recipients in replyTo, and not the recipients in from.

  • You can update the draft later to add reply content to the body or change other message properties. When using MIME format:

  • Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.

  • Add any attachments and S/MIME properties to the MIME content. Send the draft message in a subsequent operation. Alternatively, reply to a message in a single operation.

create-reply-all-draft

Create a draft to reply to the sender and all recipients of a message in either JSON or MIME format. When using JSON format:

  • Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.

  • If the original message specifies a recipient in the replyTo property, per Internet Message Format (RFC 2822), you should send the reply to the recipients in the replyTo and toRecipients properties, and not the recipients in the from and toRecipients properties.

  • You can update the draft later to add reply content to the body or change other message properties. When using MIME format:

  • Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.

  • Add any attachments and S/MIME properties to the MIME content. Send the draft message in a subsequent operation. Alternatively, reply-all to a message in a single action.

forward-mail-message

Forward a message using either JSON or MIME format. When using JSON format, you can:

  • Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.

  • Specify either the toRecipients parameter or the toRecipients property of the message parameter. Specifying both or specifying neither will return an HTTP 400 Bad Request error. When using MIME format:

  • Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.

  • Add any attachments and S/MIME properties to the MIME content. This method saves the message in the Sent Items folder. Alternatively, create a draft to forward a message, and send it later.

šŸ’” TIP: Forward an email preserving full HTML formatting and attachments. The 'comment' field adds text above the forwarded content. toRecipients is required. Do NOT reconstruct the email manually - this endpoint handles everything server-side.

move-mail-message

Move a message to another folder within the specified user's mailbox. This creates a new copy of the message in the destination folder and removes the original message.

reply-mail-message

Reply to the sender of a message using either JSON or MIME format. When using JSON format:

  • Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.

  • If the original message specifies a recipient in the replyTo property, per Internet Message Format (RFC 2822), send the reply to the recipients in replyTo and not the recipient in the from property. When using MIME format:

  • Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.

  • Add any attachments and S/MIME properties to the MIME content. This method saves the message in the Sent Items folder. Alternatively, create a draft to reply to an existing message and send it later.

šŸ’” TIP: Reply to an email preserving full HTML formatting. The 'comment' field is your reply text. Do NOT reconstruct the email manually.

reply-all-mail-message

Reply to all recipients of a message using either JSON or MIME format. When using JSON format:

  • Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.

  • If the original message specifies a recipient in the replyTo property, per Internet Message Format (RFC 2822), send the reply to the recipients in replyTo and not the recipient in the from property. When using MIME format:

  • Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.

  • Add any attachments and S/MIME properties to the MIME content. This method saves the message in the Sent Items folder. Alternatively, create a draft to reply-all to a message and send it later.

šŸ’” TIP: Reply-all preserving full HTML formatting. The 'comment' field is your reply text.

send-draft-message

Send an existing draft message. The draft message can be a new message draft, reply draft, reply-all draft, or a forward draft. This method saves the message in the Sent Items folder. Alternatively, send a new message in a single operation.

list-onenote-notebooks

Retrieve a list of notebook objects.

list-onenote-notebook-sections

Retrieve a list of onenoteSection objects from the specified notebook.

create-onenote-page

Create a new OneNote page in the default section of the default notebook. To create a page in a different section in the default notebook, you can use the sectionName query parameter. Example: ../onenote/pages?sectionName=My%20section The POST /onenote/pages operation is used only to create pages in the current user's default notebook. If you're targeting other notebooks, you can create pages in a specified section.

get-onenote-page-content

The page's HTML content.

list-onenote-section-pages

Retrieve a list of page objects from the specified section.

create-onenote-section-page

Create a new page in the specified section.

list-planner-tasks

Retrieve a list of plannertask objects assigned to a User.

send-mail

Send the message specified in the request body using either JSON or MIME format. When using JSON format, you can include a file attachment in the same sendMail action call. When using MIME format: This method saves the message in the Sent Items folder. Alternatively, create a draft message to send later. To learn more about the steps involved in the backend before a mail is delivered to recipients, see here.

šŸ’” TIP: CRITICAL: Do not try to guess the email address of the recipients. Use the list-users tool to find the email address of the recipients.

list-todo-task-lists

Get a list of the todoTaskList objects and their properties.

list-todo-tasks

Get the todoTask resources from the tasks navigation property of a specified todoTaskList.

create-todo-task

Create a new task object in a specified todoTaskList.

get-todo-task

Read the properties and relationships of a todoTask object.

update-todo-task

Update the properties of a todoTask object.

delete-todo-task

Delete a todoTask object.

get-planner-plan

Retrieve the properties and relationships of a plannerplan object.

list-plan-tasks

Retrieve a list of plannerTask objects associated with a plannerPlan object.

create-planner-task

Create a new plannerTask.

get-planner-task

Retrieve the properties and relationships of plannerTask object.

update-planner-task

Update the properties of plannerTask object.

update-planner-task-details

Update the properties of plannerTaskDetails object.

search-query

Runs the query specified in the request body. Search results are provided in the response.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/alfredo-ia/ms-365-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server