Skip to main content
Glama
Softeria

Microsoft 365 MCP Server

by Softeria

servidor ms-365-mcp

versión npm estado de compilación licencia

Servidor MCP de Microsoft 365

Un servidor de Protocolo de contexto de modelo (MCP) para interactuar con los servicios de Microsoft 365 a través de la API Graph.

Prerrequisitos

  • Node.js >= 14

Related MCP server: Microsoft Graph MCP Server

Características

  • Autenticación a través de la Biblioteca de autenticación de Microsoft (MSAL)

  • Operaciones con archivos de Excel

  • Gestión de eventos del calendario

  • Operaciones de correo

  • Administración de archivos de OneDrive

  • Bloc de notas y páginas de OneNote

  • Tareas por hacer y listas de tareas

  • El planificador planifica y realiza tareas

  • Contactos de Outlook

  • Gestión de usuarios

  • Herramientas dinámicas impulsadas por la especificación OpenAPI de Microsoft Graph

  • Construido sobre el Protocolo de Contexto Modelo

Ejemplo de inicio rápido

Prueba de inicio de sesión en Claude Desktop:

Ejemplo de inicio de sesión

Ejemplos

Imagen

Integración

Escritorio de Claude

Para agregar este servidor MCP a Claude Desktop:

Edite el archivo de configuración en Configuración > Desarrollador:

{
  "mcpServers": {
    "ms365": {
      "command": "npx",
      "args": [
        "-y",
        "@softeria/ms-365-mcp-server"
      ]
    }
  }
}

CLI de Claude Code

claude mcp add ms365 -- npx -y @softeria/ms-365-mcp-server

Para otras interfaces que admiten MCP, consulte su documentación respectiva para conocer el método de integración correcto.

Autenticación

⚠️ Debes autenticarte antes de usar las herramientas.

  1. Inicio de sesión del cliente MCP :

    • Llamar a la herramienta login (verifica automáticamente el token existente)

    • Si es necesario, obtenga la URL + código y visítelo en el navegador.

    • Utilice la herramienta verify-login para confirmar

  2. Inicio de sesión CLI opcional :

    npx @softeria/ms-365-mcp-server --login

    Siga la URL y el código que se indica en la terminal.

Los tokens se almacenan de forma segura en el almacén de credenciales de su sistema operativo (como respaldo al archivo).

Licencia

MIT © 2025 Softeria

Available Tools

188 tools
accept-calendar-eventaccept-calendar-eventA
Destructive

Accept the specified event in a user calendar.

💡 TIP: Accepts a meeting invitation. Optional body: { sendResponse: true, comment: 'I will attend.' }. Set sendResponse to false to accept silently without notifying the organizer.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a tip about silently accepting by setting sendResponse to false, but does not disclose other behavioral aspects such as modification of event status, requirement for organizer notification, or irrereversibility. Annotations already indicate destructiveHint: true, so the description adds marginal value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence plus a tip. It includes a visual cue (💡 TIP) and uses front-loaded key information. No superfluous content. Could be slightly more structured with a clear 'When to use' section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks information on prerequisites (e.g., authentication, calendar permissions), what happens on success (no output schema), and potential side effects beyond the tip. Given the complexity (5 parameters, nested objects), the description feels incomplete for an agent to fully understand the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides a tip that adds meaning to the body parameter (e.g., comment and sendResponse usage) beyond the schema's property definitions. However, schema coverage is 80%, so the description does not need to compensate much; it adds useful context for the body parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Accept the specified event in a user calendar' with a specific verb and resource, and the tip clarifies it's for meeting invitations, distinguishing it from sibling tools like decline-calendar-event or tentatively-accept-calendar-event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus other calendar event actions (e.g., tentatively-accept, decline). The tip is about how to use the optional body, not about selecting between alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add-excel-table-rowsadd-excel-table-rowsA
Destructive

Add Excel table rows.

💡 TIP: Adds rows to a table. Body: { values: [['col1val', 'col2val', 'col3val'], ['row2col1', 'row2col2', 'row2col3']] }. Each inner array is one row. Values must match the number of columns in the table.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookTableIdYesValue for the 'workbookTableId' path segment. Pass it under the name 'workbookTableId', not as 'id'. Use the 'id' field of the workbook table object as returned by Microsoft Graph.

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description repeats the action already implied by the name and annotations. It adds no new behavioral information (e.g., side effects, confirmation requirements, or data overwrite risks) beyond the existing destructiveHint. The only additional detail is the body format, which is parameter-related.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded. The tip is clearly separated and provides essential formatting information without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The combination of schema descriptions (86% coverage) and the description's body format example covers the essential usage. However, it lacks guidance on distinguishing this from similar Excel write operations and does not mention the confirm parameter's purpose (which is in the schema) or return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds a concrete example of the body.values array and the constraint that each inner array must match the table's column count. This goes well beyond the schema's generic range description, making the parameter usage clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Add Excel table rows' and 'Adds rows to a table.' It is specific to table rows rather than ranges, but it doesn't explicitly differentiate from insert-excel-range or other row manipulation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (adding rows to a table) but does not mention alternatives or exclusions, so it doesn't fully guide selection among sibling Excel tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add-mail-attachmentadd-mail-attachmentA
Destructive

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.

💡 TIP: The only path for attachments under 3MB. contentBytes must carry the complete base64 verbatim; a truncated argument fails with 400 UnableToDeserializePostBody. At 3MB and above use create-mail-attachment-upload-session, which rejects anything smaller. Body requires @odata.type: {"@odata.type": "#microsoft.graph.fileAttachment", "name": "file.pdf", "contentBytes": ""}.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=true. The description adds transparency about the under-3MB constraint, the exact error on truncated base64, and the required @odata.type body structure. It does not mention the confirm parameter or any side effects, but it goes beyond annotations by explaining failure modes and size limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but contains a malformed sentence: 'An attachment can be one of the following types: All these types...' It appears to cut off and doesn't list the types, causing confusion. The rest is efficient, but the structural issue reduces clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main usage context (size threshold, base64 format, example body) but lacks information about what the tool returns on success or how the messageId is used. It doesn't mention that it adds to a specific message, though that is implied. The incomplete type list also leaves a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so baseline is 3. The description adds value by giving an example body structure with @odata.type and contentBytes, and emphasizing that contentBytes must be verbatim base64. This clarifies the key parameter beyond what the schema provides, especially since the body object schema is generic with additionalProperties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new attachment. It distinguishes from the upload-session sibling by size threshold. However, the sentence 'An attachment can be one of the following types' is incomplete and fails to list the actual types, which slightly weakens the purpose. The mention of 'messageId' is only in the schema, not the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides usage guidelines: it states this is the only path for attachments under 3MB and directs to create-mail-attachment-upload-session for larger sizes. It also gives a critical tip about contentBytes being complete base64 to avoid failure, which is specific and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel-calendar-eventcancel-calendar-eventA
Destructive

This action allows the organizer of a meeting to send a cancellation message and cancel the event. The action moves the event to the Deleted Items folder. The organizer can also cancel an occurrence of a recurring meeting by providing the occurrence event ID. An attendee calling this action gets an error (HTTP 400 Bad Request), with the following error message: 'Your request can't be completed. You need to be an organizer to cancel a meeting.' This action differs from Delete in that Cancel is available to only the organizer, and lets the organizer send a custom message to the attendees about the cancellation.

💡 TIP: Cancels a meeting (organizer only) and sends a cancellation message to all attendees. Body: { Comment (optional string, custom message) }. Use this instead of delete-calendar-event when you want attendees to see 'Canceled' in their calendar. Attendees calling this get HTTP 400 — they should use decline-calendar-event instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructive and not read-only. The description adds beyond annotations: moves event to Deleted Items, sends custom message, only organizer succeeds, recurrence handling via occurrence ID. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with key purpose first, then details, then a tip. Slightly verbose but front-loaded and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description covers outcomes (cancellation message, event moved to Deleted Items), error cases, recurrence, and prerequisites (organizer only). Complete for agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (80%). Description clarifies that body has optional Comment string and explains eventId usage. The tip repeats parameter info but adds value by summarizing body structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool cancels a meeting for the organizer only and sends a cancellation message. It distinguishes from delete-calendar-event by explaining that cancel shows 'Canceled' in attendees' calendars, and notes that attendees calling get a 400 error and should use decline-calendar-event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use this tool vs alternatives: 'Use this instead of delete-calendar-event when you want attendees to see Canceled' and advises attendees to use decline-calendar-event. It also clarifies it is for organizers only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear-excel-rangeclear-excel-rangeA
Destructive

Clear an Excel range.

💡 TIP: Clear cell contents and/or formatting on the given range. Body: { applyTo: 'All' | 'Formats' | 'Contents' }. 'Contents' wipes values but keeps formatting; 'Formats' resets styling but keeps values; 'All' wipes both. Use this to reset a worksheet section before a fresh write rather than overwriting cell-by-cell.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, but the description adds crucial detail beyond that by explaining the exact effects of each applyTo mode: 'Contents' wipes values but keeps formatting, 'Formats' resets styling but keeps values, and 'All' wipes both. This tells the agent precisely what gets destroyed, going beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a clear one-line summary followed by a tip that explains the key parameter and use case. Every sentence adds value, with no wasted words or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations and schema, the description is largely complete. It covers the tool's purpose, usage context, and the nuanced behavior of the main parameter. The absence of an output schema means return values need not be documented. Minor gaps remain (e.g., no mention of the confirm parameter), but those are covered in schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has descriptions for most parameters, but the body.applyTo parameter is not described in the schema. The description adds significant meaning by explaining the three allowed values and their behavioral implications. This fills a critical gap, even though schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Clear an Excel range.' It elaborates on clearing contents and/or formatting, and distinguishes itself from sibling tools like delete-excel-range and update-excel-range by emphasizing resetting a section before a fresh write rather than overwriting cell-by-cell.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides specific guidance: 'Use this to reset a worksheet section before a fresh write rather than overwriting cell-by-cell.' This clearly indicates when to use the tool, though it doesn't explicitly name alternatives. The context is sufficient for an agent to choose this over similar Excel range tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy-drive-itemcopy-drive-itemA
Destructive

Copy a drive item.

💡 TIP: Asynchronously copy a file or folder to a new location and/or name. Body: { parentReference: { driveId: '...', id: '...' }, name?: 'New Name.xlsx' }. Returns 202 Accepted with a Location header pointing at a monitor URL for the async job. Ideal for duplicating templates (e.g. clone an Armhr Census Template per prospect), bulk file provisioning, or preserving an immutable snapshot of a working file.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, lowering the bar. The description adds significant behavioral context beyond annotations: the operation is asynchronous, returns 202 Accepted, and provides a Location header pointing to a monitor URL. This discloses the expected response pattern and async nature without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose ('Copy a drive item') followed by a labeled TIP that adds async semantics, body format, response behavior, and use cases in four compact sentences. Every sentence contributes meaningful information, and the structure is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description appropriately covers the return behavior (202 Accepted + Location header for async monitoring). It also addresses the complex nested body schema with an example. It could optionally explain how to consume the monitor URL or handle job completion, but for an async copy operation the essential context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (83%), providing a baseline of 3. The description adds a concrete body example ('{ parentReference: { driveId: '...', id: '...' }, name?: 'New Name.xlsx' }') that demonstrates how to structure the complex nested body parameter, which goes beyond the schema's property list by showing a realistic usage pattern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Copy a drive item') and elaborates with 'Asynchronously copy a file or folder to a new location and/or name.' It clearly distinguishes from the sibling move-rename-onedrive-item by framing the operation as creating a copy, and the template-cloning use cases reinforce the copy semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context with 'Ideal for duplicating templates... bulk file provisioning, or preserving an immutable snapshot of a working file,' giving concrete usage scenarios. It does not explicitly name alternatives or exclusions relative to move-rename-onedrive-item, but the use cases strongly imply when copying is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy-mail-messagecopy-mail-messageA
Destructive

Copy a message to a folder within the user's mailbox.

💡 TIP: Copies a message to another mail folder. Body: { DestinationId: '<mailFolder-id or well-known name like inbox, archive, junkemail>' }. Returns the newly created message (with a new id) in the destination folder. For moving instead of copying, use move-mail-message.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes return value (newly created message with new id) and body format. Annotations already indicate write operation, so description adds useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded with action, uses bullet/tip format effectively. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key aspects: action, parameters, return value, comparison to sibling. Could include more details on return type but sufficient given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant value over schema: explains DestinationId format with examples (inbox, archive, junkemail), clarifies messageId parameter naming and origin, and mentions optional parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it copies a message to a folder, specifies destination via DestinationId, and distinguishes from move-mail-message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly contrasts with move-mail-message: 'For moving instead of copying, use move-mail-message.' Provides tip on usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-calendarcreate-calendarB
Destructive

Create a new calendar for a user.

💡 TIP: Creates a new personal calendar. Body: { name: 'My Calendar', color: 'auto' }. Available colors: auto, lightBlue, lightGreen, lightOrange, lightGray, lightYellow, lightTeal, lightPink, lightBrown, lightRed, maxColor.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description contradicts the annotation 'destructiveHint: true' because creating a calendar is typically not destructive. It also fails to mention any side effects, confirmation requirements, or the fact that a 'confirm' parameter may be required when the confirmation gate is enabled. No behavioral details beyond the basic action are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences. It is well-structured with a clear statement followed by a helpful tip. No unnecessary words or redundancies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the essential idea of creating a calendar, it lacks context about required fields, typical usage patterns, or what happens after creation. The schema is very large, and the description offers only a minimal example. It is complete enough for a simple action but not fully comprehensive given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides a simple example of the body ({ name, color }) and lists valid color values, which adds some meaning beyond the schema. However, it does not clarify the purpose of the other parameters (confirm, includeHeaders, excludeResponse) or explain the structure of nested objects. The schema already describes most properties, so the incremental value is modest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and the resource ('a new calendar for a user'). It is specific enough to distinguish from sibling tools like 'list-calendars' or 'update-calendar'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or conditions. The description is purely declarative and does not help an agent decide between creating a calendar and other calendar operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-calendar-eventcreate-calendar-eventA
Destructive

Create (schedule) a new calendar event — a meeting or appointment — on the user's calendar. Set subject, start/end times, time zone, location, body, and attendees; supports online meetings and recurrence.

💡 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as mutating (destructiveHint=true, readOnlyHint=false), so the description need not restate that. It adds value by detailing what the operation does beyond creation: it sets fields, supports online meetings and recurrence, and the tip clarifies a critical behavioral constraint (resolve emails via list-users). No contradiction with annotations; the description safely adds context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise: two sentences plus a standalone tip. Purpose and key capabilities are front-loaded, and the tip is clearly separated and highlighted. Every word earns its place, with no fluff or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool without an output schema, the description covers the essential inputs and the key decision of resolving attendees. It does not mention the confirm gate behavior (handled in schema) or side effects like sending invitations, but those are either documented in the schema or implied by the operation. The resource list and the user-email tip together give an agent enough to invoke it correctly in most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description lists the principal resource fields (subject, start/end, time zone, location, body, attendees) and capabilities (online meetings, recurrence), which adds meaning beyond the raw schema. Schema coverage is 75% (likely covering the main event fields and control params), so the description complements but does not fully replace the schema's details. Control parameters (confirm, includeHeaders, excludeResponse) are not mentioned, but those are operational knobs rather than core event data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Create (schedule)') and resource ('new calendar event — a meeting or appointment') on the user's calendar. It lists the key attributes (subject, start/end times, time zone, location, body, attendees) and capabilities (online meetings, recurrence), distinguishing it from siblings like update-calendar-event, delete-calendar-event, and get-calendar-event without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit, highly actionable tip: do not guess recipient email addresses and instead use the list-users tool. This directly guides agent behavior and prevents a common failure mode. However, it does not explicitly signal when to prefer create-specific-calendar-event over this general variant, so the when-to-use guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-contact-child-foldercreate-contact-child-folderA
Destructive

Create a new contactFolder as a child of a specified folder. You can also create a new contactFolder under the user's default contact folder.

💡 TIP: Creates a sub-folder under an existing contact folder. Body: { displayName: 'Sub-folder name' }. Use list-contact-folders to discover the parent id. The returned contactFolder has its own id usable with update-contact-folder, delete-contact-folder, list-contact-folder-contacts, and create-contact-in-folder — contactFolder ids are mailbox-unique regardless of nesting depth.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
contactFolderIdYesValue for the 'contactFolderId' path segment. Pass it under the name 'contactFolderId', not as 'id'. Use the 'id' field of the contact folder object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, which is consistent with creating a new folder. The description adds that the returned folder ID can be used with other tools, providing extra behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short (three sentences plus a tip), front-loaded with the main purpose, and every sentence adds value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains that the returned contactFolder has an id usable with other tools, which is helpful. However, it doesn't fully specify the return object structure, but it's adequate for a simple create operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (80%), so the baseline is 3. The description adds a concrete example of the body format ('displayName': 'Sub-folder name') and mentions the 'parent id' for contactFolderId, providing marginal extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a contact folder as a child of a specified folder, with an option to create under the user's default folder. It distinguishes from sibling 'create-contact-folder' by emphasizing the child relationship.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells users to 'Use list-contact-folders to discover the parent id' and provides a tip about the body structure. It doesn't explicitly say when not to use this tool, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-contact-foldercreate-contact-folderA
Destructive

Create a new contactFolder under the user's default contacts folder. You can also create a new contactfolder as a child of any specified contact folder.

💡 TIP: Creates a new contact folder under the user's mailbox root. Body: { displayName: 'Family' }. Returns the created contactFolder with its id. To create a sub-folder under an existing folder, use create-contact-child-folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true. The description adds that it creates under default folder or specified parent, and returns the created folder with id. However, it does not clarify the contradiction about parent folder usage, nor disclose any side effects beyond creation. The behavioral transparency is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the main action, and includes a tip. Every sentence adds value, and there is no repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (nested objects, 4 parameters, no output schema), the description is incomplete. It only provides a minimal example for the body and does not explain the full body structure or the behavior of the confirm parameter. The tip briefly mentions return value, but more detail would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so baseline is 3. The description adds a concrete example ('Body: { displayName: 'Family' }') which adds meaning beyond the schema's property descriptions. It does not elaborate on other parameters like confirm or includeHeaders, but those are already described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a new contact folder under the user's default contacts folder. It mentions it can also create as a child of any specified folder, but this is contradicted by the tip which recommends using create-contact-child-folder for sub-folders, creating ambiguity. Overall, the main purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use (create top-level folder) and when to use an alternative (create-contact-child-folder for sub-folders). This helps the agent distinguish between sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-contact-in-foldercreate-contact-in-folderA
Destructive

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

💡 TIP: Creates a contact inside a specific folder (instead of the default Contacts folder). Body is a contact resource: { givenName, surname, displayName, emailAddresses: [{ address, name }], businessPhones: [], mobilePhone, jobTitle, companyName, ... }. The existing create-outlook-contact (POST /me/contacts) writes to the default folder only; use this when organizing contacts into named folders. Get the folder id via list-contact-folders.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
contactFolderIdYesValue for the 'contactFolderId' path segment. Pass it under the name 'contactFolderId', not as 'id'. Use the 'id' field of the contact folder object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations mark this as destructiveHint: true, but the description describes a creation operation ('Add a contact') which is not destructive. This contradiction obscures the actual side effects. The description also does not disclose any other behavioral traits such as required permissions or response behavior beyond what the schema already states, so transparency is poor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured, consisting of two concise sentences plus a brief tip. It avoids redundancy and front-loads the core action and target, followed by usage differentiation and a retrieval hint. No filler or unnecessary details are present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with no output schema, the description covers the essential context: what the tool does, when to use it over the alternative, and how to supply the necessary parameters. It lacks explicit mention of success/failure response or side effects, but given the simplicity and existing schema documentation, it is nearly complete. The contradiction with the destructive hint slightly reduces completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to the 'contactFolderId' parameter by clarifying the naming convention ('Pass it under the name 'contactFolderId', not as 'id'') and referencing the source of the value. It also summarizes the 'body' parameter as a contact resource. However, for the 'confirm', 'includeHeaders', and 'excludeResponse' parameters, the description offers no additional insight beyond the schema descriptions, which are already present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add'), the target ('a contact'), and the location ('to the root Contacts folder or to the contacts endpoint of another contact folder'). It also names the sibling tool it differentiates from, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly contrasts with create-outlook-contact, stating when to use this tool versus the alternative ('writes to the default folder only; use this when organizing contacts into named folders'). It also provides a retrieval hint ('Get the folder id via list-contact-folders').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-draft-emailcreate-draft-emailA
Destructive

Create a draft Outlook email message in the signed-in user's Drafts folder. Set subject, body, toRecipients, ccRecipients, and importance. The draft is saved, not sent — use send-mail to send a message directly, or send the draft afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a mutating readOnlyHint=false and destructiveHint=true, so the bar is lower. Beyond that, the description discloses the critical non-obvious behavior 'saved, not sent' — an agent might otherwise assume the call sends the email. This is a genuinely valuable behavioral disclosure. Remaining gaps are minor: no mention of return value, errors, or the confirm gate, but the confirm gate is documented in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, with the core purpose front-loaded first and the routing guidance placed last. The second sentence listing fields is mildly redundant with the rich schema, but it is still helpful as a quick summary of what the caller should worry about. No filler or repetition of annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a large nested input schema and no output schema, the description covers the essential aspects: what is created, where it lands, what fields matter, and the saved-not-sent behavior. The main omission is that there is no explicit note about what the call returns (e.g., the created message with its id), which is useful since the output schema is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so most parameters are already documented inside the input schema itself. The description adds the context that subject, body, toRecipients, ccRecipients, and importance are the fields the caller would typically populate, but doesn't explain structural concepts such as recipient shapes or content type. That is a small reinforcement, not a substantial addition, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb (create) plus a precise resource (a draft Outlook message in the signed-in user's Drafts folder) and enumerates which fields can be set. It also separates itself from send-oriented tools, so an agent can distinguish it from siblings such as send-mail, send-draft-message, and create-reply-draft without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The third sentence explicitly routes the agent: 'The draft is saved, not sent — use send-mail to send a message directly, or send the draft afterwards.' That names the primary alternative with the selecting condition (the distinction between creating vs. sending). The only gap is that it doesn't name send-draft-message explicitly as the specific tool to send the draft afterwards, nor does it mention the forward/reply draft siblings, leaving a small part of the routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-drive-item-previewcreate-drive-item-previewA
Destructive

Create a drive item preview.

💡 TIP: Generate a short-lived embeddable preview URL for a file (Office docs, PDFs, images). Body: { page?: number | string, zoom?: number, viewer?: 'onedrive' | 'office' }. Returns getUrl (interactive) and postUrl (form-post). Useful for surfacing inline previews in summary emails or chat messages without needing the recipient to open the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description presents the operation as a benign 'create' action that returns a short-lived URL, yet the annotations set destructiveHint=true. This is a direct contradiction: no mention of destructive effects or reasons for the destructive flag. The description also fails to explain why a preview creation would be considered destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the main action. The emoji and tip format are slightly informal but every sentence adds useful information, including body structure, return values, and a practical use case.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description still explains return values, body options, and short-lived nature, which is good. It omits discussion of the destructive hint and confirm gate, but those are already exposed via annotations and parameter descriptions, so the overall picture is adequate for a moderately complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, and the description adds the 'viewer' option not present in the schema, and clarifies that return values are getUrl and postUrl. These additions meaningfully supplement the schema descriptions, which already cover driveId and driveItemId well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it creates a drive item preview and explains that it generates a short-lived embeddable preview URL for files. It distinguishes itself from sibling tools like share-link or download-url by focusing on inline previews for summary emails or chat messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete use case: 'surfacing inline previews in summary emails or chat messages without needing the recipient to open the file.' It does not explicitly exclude alternate tools, but the context is clear enough for an agent to decide when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-excel-chartcreate-excel-chartC
Destructive

Creates a new chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true. The description adds no new behavioral info beyond the fact that it creates a chart.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise but lacks substantive information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is too brief for a tool with 7 parameters and no output schema. It fails to convey important context about the chart creation process.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 86%, so the schema already documents most parameters. The description adds no additional parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Creates a new chart.' clearly states the action and resource, but does not differentiate from sibling tools like create-excel-table.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, nor any prerequisites or context for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-excel-tablecreate-excel-tableA
Destructive

Create a new table. The range source address determines the worksheet under which the table will be added. If the table can't be added (for example, because the address is invalid, or the table would overlap with another table), an error is generated.

💡 TIP: Convert a worksheet range into a formal Excel table. Body: { address: 'A1:H171', hasHeaders: true }. Required before using add-excel-table-rows / update-excel-table-row / delete-excel-table-row on a plain-cells sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds behavioral details: the range address determines the worksheet, errors on invalid address or overlap. It does not explicitly state it modifies the workbook, but creation implies modification. The addition of error conditions adds transparency beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two short paragraphs plus a tip. The first sentence immediately states the main action. The tip is clearly formatted and adds crucial prerequisite information. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, errors, and prerequisite relationship. However, it lacks information about the return value (e.g., the created table object or success status). Since there is no output schema, the description should explain what the tool returns. This is a notable gap given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (86%), but the description adds value by explaining the address and hasHeaders parameters through an example and noting that the address determines the worksheet. This goes beyond what the schema provides. For parameters already well-documented in schema, the description still offers practical context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a new table, defines the role of the address parameter, and distinguishes itself from related sibling tools like add-excel-table-rows by noting it is a prerequisite. The tip provides a concrete example, reinforcing the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: required before add-excel-table-rows, update-excel-table-row, or delete-excel-table-row on a plain-cells sheet. It also mentions error conditions (invalid address, overlapping table) which guide when not to use. This provides clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-focused-inbox-overridecreate-focused-inbox-overrideA
Destructive

Create an override for a sender identified by an SMTP address. Future messages from that SMTP address will be consistently classified as specified in the override. Note

💡 TIP: Creates a Focused Inbox override for a sender. Body: { classifyAs: 'focused', senderEmailAddress: { name: 'Display Name', address: 'sender@example.com' } }. classifyAs must be 'focused' or 'other'. If an override already exists for that SMTP address, POST updates the existing override's name and classifyAs (use this to rename a sender). Resolve the sender's address with list-users or by reading a recent mail header — do not invent SMTP addresses.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, so the description's mention of creating and updating overrides aligns with this. The description adds context about the update behavior (renaming a sender) and the required body structure, going beyond the annotation hints. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five sentences, starting with the primary purpose. It includes a tip and important notes without being overly verbose. The structure is logical, though some redundancy (e.g., the tip repeats the body format) could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, required fields, update behavior, and address resolution. However, it does not mention what the response looks like after creation, error cases, or permissions. Given no output schema, more detail on return values would be beneficial. The openWorldHint annotation allows some leeway.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 75% of parameters. The description adds a concrete example of the body object (classifyAs and senderEmailAddress with fields) and specifies that classifyAs must be 'focused' or 'other'. This provides practical guidance beyond the schema's enum definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a Focused Inbox override for a sender identified by an SMTP address, specifying that future messages will be consistently classified. The verb 'create' and resource 'focused-inbox-override' are specific, and the tool is distinct from siblings like 'create-draft-email' or 'create-planner-task'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it tells the agent to resolve the sender's address using list-users or recent mail headers, and explains that if an override already exists, the POST updates it. However, it does not explicitly state when not to use this tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-forward-draftcreate-forward-draftA
Destructive

Create a forward draft.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already include destructiveHint=true and readOnlyHint=false, signaling a mutation. The description adds valuable context that no email is actually sent, which is not present in annotations. This helps the agent understand the side effect boundary (creation vs. sending) without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action. The tip repeats 'Create a forward draft' verbatim, adding slight redundancy, but otherwise the structure is efficient. No wasted sentences beyond the repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool deals with a complex body object and lacks an output schema. The description does not explain what the body should contain or how to reference the original message, though the schema provides some coverage. Given the complexity, more guidance would help, but the description is not severely lacking, so a 3 is fair.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, which is high, so the schema documents most parameters (e.g., messageId, confirm, includeHeaders, excludeResponse) with descriptions. However, the description adds no further parameter explanation, and the complex body object (with Comment, Message, ToRecipients) has no description in the schema either. Since the description does not compensate for gaps, a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Create a forward draft', and immediately clarifies that it does not send. This distinguishes it from sibling tools like forward-mail-message, which actually sends, and create-reply-draft, which is a different kind of draft. The verb and resource are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip provides a clear use case: 'Useful when user wants to review before sending.' This implies when to choose this tool over forward-mail-message, but it does not explicitly name alternatives or state when not to use it. It gives context but lacks explicit exclusions or comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-mail-attachment-upload-sessioncreate-mail-attachment-upload-sessionA
Destructive

Create an upload session that allows an app to iteratively upload ranges of a file, so as to attach the file to the specified Outlook item. The item can be a message or event. Use this approach to attach a file if the file size is between 3 MB and 150 MB. To attach a file that's smaller than 3 MB, do a POST operation on the attachments navigation property of the Outlook item; see how to do this for a message or for an event. As part of the response, this action returns an upload URL that you can use in subsequent sequential PUT queries. Request headers for each PUT operation let you specify the exact range of bytes to be uploaded. This allows transfer to be resumed, in case the network connection is dropped during upload. The following are the steps to attach a file to an Outlook item using an upload session: See attach large files to Outlook messages or events for an example.

💡 TIP: For attachments 3MB to 150MB. Graph rejects smaller files with ErrorAttachmentSizeShouldNotBeLessThanMinimumSize, so under 3MB use add-mail-attachment instead. Body: { AttachmentItem: { attachmentType: 'file', name: 'report.pdf', size: 5000000 } }. Returns a pre-authenticated uploadUrl; the caller PUTs the bytes there itself in ranges up to 4MB. This server does not perform the PUT.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool returns an upload URL for subsequent PUT operations, clarifying that it does not upload the file itself. This adds behavioral context beyond the annotations (which only mark destructiveHint), though it does not elaborate on confirmation requirements or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is verbose and repetitive, restating the same size threshold and upload flow multiple times, including a redundant TIP section. This hurts clarity and readability, making it less concise than ideal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core flow (create session, get URL, then PUT) but omits mention of the confirm parameter's role and confirmation requirements, which is relevant given the destructiveHint annotation and the schema. It is sufficient for basic use but lacks completeness for a complex multi-step operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides detailed descriptions for the body, messageId, and confirm parameters, with 80% coverage. The description does not add new parameter-specific semantics; it only reiterates file size limits that relate to the overall usage rather than individual parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates an upload session for attaching a file to an Outlook item (message or event). It specifies the target resource and the unique action (creating a session), and distinguishes it from the alternative for smaller files (add-mail-attachment).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly gives usage criteria: files between 3 MB and 150 MB should use this tool, while smaller files should use the POST operation on attachments. This provides clear when-to-use vs. when-not-to-use guidance, including a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-mail-child-foldercreate-mail-child-folderA
Destructive

Use this API to create a new child mailFolder. If you intend a new folder to be hidden, you must set the isHidden property to true on creation.

💡 TIP: Creates a subfolder inside an existing mail folder. Use list-mail-folders or list-mail-child-folders to find the parent folder ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate mutation (readOnlyHint=false) and potential destructiveness (destructiveHint=true), so the description does not need to repeat that. It adds the nuance that 'isHidden' can only be set on creation, but does not disclose other behavioral traits like error handling or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences plus a tip, with no wasted words. It is front-loaded with the primary purpose and immediately actionable guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with no output schema, the description does not explain the return value or error conditions. However, given the complexity of the input schema, the tip provides essential context about finding the parent ID, making it fairly complete for typical usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 80% schema description coverage, the schema already documents most parameters. The description adds value by highlighting the 'isHidden' property must be set on creation and providing the tip about parent folder ID, though it does not cover all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'create a new child mailFolder' and 'Creates a subfolder inside an existing mail folder,' which provides a specific verb and resource. It distinguishes itself from sibling tools like 'create-mail-folder' by explicitly specifying it is for child folders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a tip to use 'list-mail-folders' or 'list-mail-child-folders' to find the parent folder ID, guiding proper usage. However, it does not explicitly mention when not to use this tool or provide alternatives like 'create-mail-folder' for top-level folders.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-mail-foldercreate-mail-folderA
Destructive

Use this API to create a new mail folder in the root folder of the user's mailbox. If you intend a new folder to be hidden, you must set the isHidden property to true on creation.

💡 TIP: Creates a top-level mail folder. Use create-mail-child-folder to create a subfolder inside an existing folder. Use list-mail-folders to find existing folder IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-readOnly and destructiveHint. The description adds behavioral insight about isHidden being settable only on creation, but lacks further context on side effects or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences plus a tip. Front-loaded with purpose, no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers creation context and cross-references siblings well. Lacks output description but matches tool complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (75%), so baseline is 3. The description adds a tip about isHidden, but the schema already describes most parameters adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new mail folder in the root folder, distinguishing it from the sibling tool create-mail-child-folder for subfolders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises when to use this tool (top-level folder) and when to use alternatives (create-mail-child-folder for subfolders, list-mail-folders to find IDs).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-mail-rulecreate-mail-ruleA
Destructive

Create a messageRule object by specifying a set of conditions and actions. Outlook carries out those actions if an incoming message in the user's Inbox meets the specified conditions.

💡 TIP: Creates a message rule for a mail folder. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules. Body: { displayName: 'Rule name', sequence: 1, isEnabled: true, conditions: { fromAddresses: [{ emailAddress: { address: 'user@example.com' } }] }, actions: { moveToFolder: 'folder-id' } }. Actions: moveToFolder, copyToFolder, forwardTo, forwardAsAttachmentTo, delete, markAsRead, markImportance, stopProcessingRules.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states that Outlook carries out the specified actions when an incoming message meets the conditions, which clarifies the operational behavior. Annotations already indicate destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutation, and the description aligns without contradiction. It does not elaborate on side effects or permanence beyond the core behavior, but annotations cover the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening sentence, a tip section, and a sample body. It is not overly verbose and front-loads the core purpose. The inclusion of an example is justified given the complexity of the body object, and the formatting with a line break and emoji improves readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool with multiple nested objects and many condition/action properties, the description provides a sample body and lists the available actions, which is helpful. The schema extensively documents individual properties, so the description does not need to repeat all that. However, it does not mention what the tool returns on success (e.g., the created messageRule object), which could be a minor gap since no output schema is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 80% of parameters with descriptions, so the baseline is high. The description adds a practical example body showing how to structure displayName, sequence, isEnabled, conditions, and actions, which is not in the schema. It also clarifies that mailFolderId must be passed under that name, not as 'id', and points to list-mail-folders for obtaining it, adding semantic clarity beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (create), the resource (messageRule object), and the context (incoming messages in the user's Inbox). It distinguishes itself from sibling tools like update-mail-rule and delete-mail-rule by focusing on creation and the conditions/actions involved. The verb-resource pairing is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use the tool, including a tip to use the Inbox folder ID from list-mail-folders for inbox rules. It also includes a concrete body example with required fields, which helps the agent construct a valid request. However, it does not explicitly contrast with alternatives like update-mail-rule or state scenarios where this tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-my-calendar-permissioncreate-my-calendar-permissionA
Destructive

Create a calendarPermission resource to specify the identity and role of the user with whom the specified calendar is being shared or delegated.

💡 TIP: Shares the user's primary calendar with another user (or sets up a delegate). Body: { emailAddress: { name: 'Adele Vance', address: 'adele@contoso.com' }, role: 'read' | 'write' | 'delegateWithoutPrivateEventAccess' | 'delegateWithPrivateEventAccess', isInsideOrganization: true, isRemovable: true }. Use list-users to resolve the recipient SMTP. Returns the created calendarPermission with its id (used by update-my-calendar-permission and delete-my-calendar-permission).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint: false) and destructiveHint: true, so the bar is lower. The description adds the effect (shares primary calendar or delegates) and provides an example body, plus the return value includes an id for later modifications. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences plus a tip. The purpose is front-loaded, and the tip provides a concrete example and return information without unnecessary verbosity. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, example body, return value, and relationship to update/delete siblings. It doesn't explicitly state that the tool targets the user's primary calendar only, but that is implied by the naming convention (create-my-calendar-permission) and sibling tools. No output schema, but the return is described adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the description doesn't need to carry the full burden. The tip provides an example body with typical role values, but the enumerated roles listed are an incomplete subset of the schema's full enum (missing 'none', 'freeBusyRead', etc.), which could slightly mislead. However, the schema itself has the full list, so this is not a major issue.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Create a calendarPermission resource to specify the identity and role of the user with whom the specified calendar is being shared or delegated.' It distinguishes itself from update/delete siblings by mentioning the returned id is used for those operations. The tip clarifies it shares the user's primary calendar or sets up a delegate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip explains when to use the tool (sharing primary calendar, delegating) and directs the agent to use list-users to resolve email addresses. It also notes the return id is used by update and delete tools, providing chaining context. It doesn't explicitly state when not to use, but the intent is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-onedrive-foldercreate-onedrive-folderA
Destructive

Create a OneDrive folder.

💡 TIP: Creates a new folder inside the specified drive item. Body must include name (string) and folder ({}) fields. Use @microsoft.graph.conflictBehavior to control behavior on name conflict: 'rename' (default), 'replace', or 'fail'.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (it's a write), destructiveHint=true. The description adds value beyond annotations by explaining conflict behavior options (rename, replace, fail), which is behavioral context the annotations don't provide. It doesn't contradict annotations. Also includes a 'confirm' parameter for destructive gate, which aligns with destructiveness. Slight deduction for not mentioning other side effects, but solid overall.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one opening sentence, a tip line, and then structured guidance. The most critical information (what body must contain, conflict behavior options) is front-loaded and formatted clearly. No wasted words; each part has purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For creating a folder, the description covers essential inputs: driveId, driveItemId, body requirements, conflict behavior. The schema is rich and well-covered. It could mention return values (since no output schema), but for creation tools, this is often obvious. Minor gap: unclear what happens on success (returns created folder item), but given the tool's simplicity, this is quite complete. Not a 5 because it lacks explicit mention of success behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, high. The description adds critical meaning beyond schema: it explicitly says the body must include 'name' and 'folder' fields, and explains the conflictBehavior mechanism, which is not in the schema. This compensates well for the complexity of the body object. A 4 because it's genuinely helpful but could still deepen details like error handling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: 'Create a OneDrive folder' and specifies it creates inside a drive item. It clearly identifies the verb, resource, and context, and distinguishes from siblings like move-rename-onedrive-item and delete-onedrive-file which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs what the body must include ('name' and 'folder' fields) and how to use '@microsoft.graph.conflictBehavior' to control name conflicts. It implies the context of creation (inside a specified drive item) and is clear about required parameters, preventing incorrect usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-onenote-notebookcreate-onenote-notebookB
Destructive

Create a new OneNote notebook.

💡 TIP: Creates a new OneNote notebook. Body: { displayName: 'Notebook Name' }. The name must be unique across the user's notebooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark as destructive (destructiveHint=true). Description adds the uniqueness constraint on displayName, which is useful but not comprehensive—does not mention error behavior on duplicate names or side effects like sharing or default notebook creation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very short (two sentences plus tip), but the tip is partially redundant. Front-loads the core purpose. No unnecessary detail, though it could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and description does not explain return value. Does not mention the confirm gate parameter, which is important for a destructive operation. Lacks details on user or scope (e.g., current user's notebooks). Missing information about prerequisites or post-conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and describes body extensively. Description adds an example body format and the uniqueness rule for displayName, providing modest value beyond the schema. The confirm and other headers are not mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States 'Create a new OneNote notebook' with a tip clarifying the body format and uniqueness constraint. Clearly identifies the resource and action, though it does not differentiate from siblings like list-onenote-notebooks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., create-onenote-section, create-onenote-page). Does not specify context such as user authentication or typical workflow order.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-onenote-pagecreate-onenote-pageA
Destructive

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.

💡 TIP: Body must be a full HTML document (with ......). Partial HTML or plain text fails silently or creates malformed pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (destructiveHint=true, readOnlyHint=false), the description discloses a critical behavior: the body must be a full HTML document; otherwise, it fails silently or creates malformed pages. This is valuable context that helps the agent avoid errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a single sentence for the main purpose, followed by a clarification for section targeting, and a highlighted tip for the body format. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers how to create pages and the required body format, but it does not mention what the response contains (e.g., the created page object), which is important for an agent to process the result. Given no output schema, this is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 4 parameters, with descriptions for 3 (confirm, includeHeaders, excludeResponse) but no description for the 'body' parameter. The description compensates by specifying that the body must be a full HTML document, adding essential semantic information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new OneNote page in the default notebook's default section, specifies the endpoint, and distinguishes from sibling tools by noting that this tool is only for the default notebook (with a workaround for other sections via query parameter).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool (default notebook) and how to target a different section using the sectionName query parameter. It mentions that for other notebooks, you should create pages in a specified section, but does not name a specific sibling tool as the alternative, which would improve clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-onenote-sectioncreate-onenote-sectionA
Destructive

Create a new onenoteSection in the specified notebook.

💡 TIP: Creates a new section in a notebook. Body: { displayName: 'Section Name' }.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
notebookIdYesValue for the 'notebookId' path segment. Pass it under the name 'notebookId', not as 'id'. Use the 'id' field of the notebook object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint: true and readOnlyHint: false. The description adds a payload example but does not elaborate on side effects, permissions, or the actual creation process. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief (one sentence plus a tip) and front-loaded. No extraneous text, though the tip could be integrated more concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, no output schema, and nested objects. The description covers the basic purpose but omits details about return values, error scenarios, or required permissions. Adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (80%), and the description adds value by showing an example body structure with 'displayName'. This clarifies the expected content beyond the schema's property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Create' and the resource 'onenoteSection', specifying 'in the specified notebook'. It distinguishes from sibling tools like 'create-onenote-notebook' and 'create-onenote-section-page' through the target resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives (e.g., when to use a section group). The tip provides an example body but does not clarify context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-onenote-section-pagecreate-onenote-section-pageA
Destructive

Create a new page in the specified section.

💡 TIP: Body must be a full HTML document (with ......). Partial HTML fails silently.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
onenoteSectionIdYesValue for the 'onenoteSectionId' path segment. Pass it under the name 'onenoteSectionId', not as 'id'. Use the 'id' field of the onenote section object as returned by Microsoft Graph.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, so the description doesn't need to repeat that. The description adds a useful behavioral note: the body must be a full HTML document or it fails silently. However, it doesn't disclose other potential side effects or error states beyond the tip. Overall, minimal extra value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence stating purpose plus a tip about the body parameter. No unnecessary words, front-loaded with key information. The tip is formatted clearly with an emoji for attention.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with no output schema, the description provides the essential inputs (section, body) and a critical constraint (full HTML). It does not mention return values or whether the operation is idempotent, but those are not strictly required. The tip about silent failure is valuable. Overall, sufficiently complete given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly clarifies that the 'body' parameter must be a full HTML document, which is critical and not obvious from the schema alone. Schema coverage is 80%, so the description compensates with this key detail. Other parameters like 'onenoteSectionId' are well-described in the schema, so no further info needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a new page in a specified section. The verb 'Create' and resource 'page in specified section' are explicit, and the tool name reinforces this. It distinguishes from sibling 'create-onenote-page' which likely creates a page without specifying a section.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like 'create-onenote-page' or 'create-onenote-section'. No mention of prerequisites or when not to use it. The tip about HTML body is helpful but does not address usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-outlook-categorycreate-outlook-categoryA
Destructive

Create an outlookCategory object in the user's master list of categories.

💡 TIP: Creates a new Outlook category. Body: { displayName (unique), color (one of: none, preset0 … preset24 — maps to red, orange, yellow, green, teal, olive, blue, purple, cranberry, steel, dark-steel, gray, dark-gray, black, dark-red, dark-orange, dark-yellow, dark-green, dark-teal, dark-olive, dark-blue, dark-purple, dark-cranberry) }. Category names are case-sensitive when applied to messages/events.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds context about color mapping and case sensitivity beyond annotations (readOnlyHint: false, destructiveHint: true, openWorldHint: true). However, the destructiveHint annotation seems inconsistent with creation, but the description does not contradict it directly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two clear sentences plus a tipped paragraph. Information is front-loaded and no extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing description of the return value (no output schema). It states it creates an object but doesn't indicate the response includes the created category. Adequate for basic use but incomplete for an agent needing to know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 75% schema coverage, the description enhances the body parameter by mapping color enums to human-readable names and emphasizing uniqueness of displayName. It does not explain confirm, includeHeaders, or excludeResponse, but schema covers them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Create an outlookCategory object in the user's master list of categories,' providing a specific verb and resource. It distinguishes from sibling tools like list-outlook-categories by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., list-outlook-categories or other create tools). The tip only explains the body format, not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-outlook-contactcreate-outlook-contactB
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a non-read-only, destructive mutation, so the description is not expected to repeat that. It adds the useful scoping detail of root vs other folder, though it does not mention idempotency, confirmation behavior, or side effects beyond what the confirm parameter already covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise, front-loaded sentence with no filler. It communicates the core action and target in under 20 words, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The input schema is large and nested, and there is an overlapping sibling create-contact-in-folder, yet the description never explains how to target a non-root folder or what distinguishes this variant. There is also no output schema and no mention of return values or required body fields, leaving important call details to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-level meaning, but the schema carries 75% coverage, including rich descriptions for the nested body properties and the confirm/includeHeaders/excludeResponse parameters. Since the schema already documents the parameters sufficiently, the description does not need to restate them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact operation ('Add a contact') and the two target locations: the root Contacts folder or another contact folder's contacts endpoint. It is clear about the resource and action, but it does not explicitly distinguish this from the sibling create-contact-in-folder, so it is not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over create-contact-in-folder or update-outlook-contact, and no mention of prerequisites or exclusions. The folder-target wording provides only a weak contextual hint for routing an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-planner-bucketcreate-planner-bucketC
Destructive

Create a new plannerBucket object.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as a write (readOnlyHint=false) and destructive (destructiveHint=true), and the description adds no behavioral context beyond that — no mention of confirm-gate interaction, idempotency, or side effects. For a create operation that modifies data, the description should at least acknowledge that creating the new object has persistent consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is succinct and front-loaded, with no redundant filler. The brevity is a sign of under-specification, which is penalized in other dimensions, but as a structural matter it is appropriately terse for a single-sentence definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world tool with a deeply nested body schema and no output schema, one sentence is insufficient context. It doesn't say the bucket must belong to an existing plan, what happens if the client supplies a conflicting id, or what the caller should expect after a successful creation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 75% of parameters with descriptive text, including body, planId, confirm, and the nested task fields, so the schema itself carries most of the semantic weight. The description adds nothing about how the parameters combine (e.g., that the bucket needs a valid planId or that body is required).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create) and resource (plannerBucket object) plainly, so an agent can identify what the action is. However, it is essentially a restatement of the tool name and provides no distinguishing detail about what a planner bucket is relative to other Planner tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers no guidance on when to invoke this tool instead of siblings like create-planner-task, list-plan-buckets, or update-planner-bucket. It also fails to mention the prerequisite context (e.g., an existing plan to attach the bucket to) or when the confirm gate applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-planner-taskcreate-planner-taskB
Destructive

Create a new plannerTask.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not disclose any side effects, confirmation requirements, or other behaviors beyond the annotation's destructiveHint flag. It adds no additional transparency beyond the metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is well-structured and to the point, avoiding any unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex nested body object and the absence of an output schema, the description lacks contextual information about required properties, special considerations, or the intended use of the task creation. It is minimal and insufficient for complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no meaning to the parameters. While the schema has a coverage of 75%, the top-level body parameter is not described and the tool description does not mention any parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Create' and the resource 'plannerTask', which is specific enough to distinguish it from other create tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives, nor any context for its typical usage scenarios. The description is purely a one-liner without usage hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-planner-task-messagecreate-planner-task-messageA
Destructive

[beta] Create a new plannerTaskChatMessage on a plannerTask.

💡 TIP: Posts a message to a Planner task's chat (the modern 'task chat', not the legacy conversationThreadId comment). Microsoft is retiring the classic task comments experience and hiding it from the task (Planner 2026 update), so task chat is the current supported way to post per-task updates teammates will see, with @mentions. Body: { content: 'plain text or sanitized HTML', mentions?: [{ mentioned: 'user-id', position: 0, mentionType: 'user' }] } (mentions optional). No ETag/If-Match required. BETA Graph API: subject to change; delegated work/school accounts only — no application permissions, no personal Microsoft accounts, global cloud only (not GCC/DoD/21Vianet).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
plannerTaskIdYesValue for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations say readOnlyHint=false and destructiveHint=true; the description doesn't contradict those, and it goes well beyond them by disclosing the beta status, BETA Graph API volatility, exact account/authentication limits, environmental cloud limitation, and the no-ETag requirement. This substantially reduces the risk of misinvocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: operation, usage context, body format, optimistic caveat, authentication restrictions, and cloud limitations. It is front-loaded with the core action and the practical tip, and doesn't merely repeat the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully explains the operational context, supported message content, mentions, auth/profile constraints, and beta flags, making tool selection and invocation correct without prior knowledge. A brief note about what the create call returns would be nice, but the absence of a return-value shape doesn't block the intended call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is about 80%, so the baseline is 3, but the description adds real parameter-level value by giving a compact body grammar: content is 'plain text or sanitized HTML', mentions are optional and contain user-id/position/mentionType. It lets an agent compose the core body without fully parsing the nested schema structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action ('Create a new plannerTaskChatMessage'), the target ('on a plannerTask'), and the context ('task chat' vs the legacy conversationThreadId comment). This makes the tool's purpose unmistakable and distinct from the related planner task message list/delete/update tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The TIP clearly says when to use it: to post per-task updates teammates will see, using the modern task chat rather than the retired classic comments experience. It also gives hard boundary conditions (delegated work/school accounts, no application permissions, no sovereign clouds). It doesn't explicitly name a sibling tool as the alternative, but the legacy path is not a sibling tool here, so the guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-reply-all-draftcreate-reply-all-draftA
Destructive

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.

💡 TIP: For HTML replies pass Message.body.contentType: 'html' with Message.body.content as HTML. Note: supplying Message.body replaces the whole draft body, so the original quoted history is not included. Specifying both 'comment' and Message.body returns 400. Signatures are added by the Outlook client only, not via Graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description discloses key behaviors: the HTTP 400 error for conflicting parameters, that supplying Message.body replaces the whole draft body (dropping quoted history), that signatures are added only by the Outlook client, and that the draft can be updated later. This is extensive and goes well beyond what annotations already provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with bullet points and a tip section. It front-loads the primary purpose, then logically breaks down JSON and MIME usage, then adds important caveats. Every sentence earns its place; the length is justified by the complexity of the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly covers error conditions, format choices, and behavioral nuances. It does not mention the return value (e.g., the created draft message object), but no output schema exists, and the description provides enough for an agent to correctly invoke the tool. Minor gap: no explicit guidance on permissions, but that's not typically required for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 80%, the description adds significant meaning to the critical 'body' parameter: it explains the Comment vs. Message.body exclusivity, the MIME format details, and the replacement behavior. It does not explain the 'confirm' parameter, but that's a standard gating parameter already described in the schema. The description compensates well for the uncovered nuances.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (create), resource (draft reply), and scope (sender and all recipients) in the first sentence. It also mentions the two output formats (JSON or MIME), which helps distinguish it from related siblings like create-reply-draft or create-forward-draft.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong usage context by explaining the two mutually exclusive ways to specify content (comment vs. message body), the error condition for both, and the MIME base64 requirements. It does not explicitly say 'use this instead of X', but the 'reply-all' framing and the detail on format-specific behavior make the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-reply-draftcreate-reply-draftA
Destructive

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.

💡 TIP: For HTML replies pass Message.body.contentType: 'html' with Message.body.content as HTML. Note: supplying Message.body replaces the whole draft body, so the original quoted history is not included. Specifying both 'comment' and Message.body returns 400. Signatures are added by the Outlook client only, not via Graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint: true and readOnlyHint: false, but the description adds valuable behavioral context: it warns that supplying Message.body replaces the whole draft body (quoted history not included), explains the 400 error risk, and notes signatures are added by Outlook client, not Graph. It also describes the draft lifecycle (can update later, send later). This exceeds the annotation minimalism by providing concrete operational constraints and risks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively comprehensive with structured bullet points and a prominent tip box. It is front-loaded with the main action and format distinction. While it's a bit long, the length is justified by the complexity of the operation and the multiple format-specific rules. No irrelevant fluff; all content is actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool is complex (two formats, multiple constraints, RFC details) and has no output schema, the description covers the essential operational details: how to specify the reply content, the mutual exclusivity rule, the MIME encoding requirement, the handling of replyTo, the behavior of the body replacement, and the absence of signature handling. It also mentions the option to send later. This is complete enough for an agent to correctly invoke the tool without needing additional info.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, and the schema already documents parameters like messageId and confirm. The description adds meaningful semantics for 'body' parameter: explains the comment/body mutual exclusivity, the difference in MIME format (base64 encoded), and the HTML tip. However, it doesn't fully document all parameters, but the schema is largely self-explanatory. A score of 3 is appropriate as the description adds value but doesn't fully compensate for the remaining 20% coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a draft to reply to a message's sender, with formats JSON or MIME. It distinguishes from siblings like create-reply-all-draft and reply-mail-message by focusing on draft creation for the sender. However, it doesn't explicitly name those siblings, so differentiation is mainly implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides detailed guidance on when to use JSON vs MIME, specifically the rule about replyTo vs from recipients, and the constraint that comment and body cannot both be specified. It implies usage for drafting a reply, and mentions 'Alternatively, reply to a message in a single operation' implying a sibling operation exists, but doesn't name it. Clear context but lacks explicit exclusions of when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-specific-calendar-eventcreate-specific-calendar-eventB
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal that this is a mutating/destructive operation (readOnlyHint=false, destructiveHint=true), and the description adds little behavior beyond restating that it creates an event. The tip about not guessing recipient emails is useful workflow advice, but it does not clarify side effects such as invites being sent, permission requirements, or the confirmation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the action and target, and the second adds a genuinely important guardrail. Every sentence earns its place, and there is no redundant filler or repeated field-level documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation, the core target and key user-facing tip are present, and the rich input schema fills in event details. However, the tool is part of a large calendar-related sibling group, and the description does not clarify return values or side effects, and it relies on the agent inferring that the returned object will match the calendar event schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 80% schema description coverage, the schema already documents most parameters well, so the baseline is 3. The description adds some value by clarifying valid calendar targets and calling out the need to use list-users for recipient emails rather than guessing, but it does not systematically improve the agent's understanding of the body parameter's required structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the operation as creating a new event in a specific calendar and adds the useful scope that the calendar can be a user calendar or a Microsoft 365 group's default calendar. However, it does not explicitly distinguish itself from the sibling create-calendar-event tool, so an agent could struggle to know why this 'specific' variant exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives functional context: it is used when you want to create an event in a user or M365 group calendar. However, it gives no explicit guidance about when to prefer this tool over create-calendar-event, update-specific-calendar-event, or other sibling calendar tools, and it does not state any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-subscriptioncreate-subscriptionA
Destructive

Subscribes a listener application to receive change notifications when the requested type of changes occur to the specified resource in Microsoft Graph. To identify the resources for which you can create subscriptions and the limitations on subscriptions, see Set up notifications for changes in resource data: Supported resources. Some resources support rich notifications, that is, notifications that include resource data. For more information about these resources, see Set up change notifications that include resource data: Supported resources.

💡 TIP: Creates a webhook subscription for change notifications. Required body: { changeType (comma-separated: 'created,updated,deleted'), notificationUrl (HTTPS, must validate with token echo), resource (e.g. '/me/mailFolders/inbox/messages', '/users/{id}/events', '/teams/{id}/channels/{id}/messages'), expirationDateTime (ISO 8601, max varies by resource type — 1 hour for calls, 24h for messages, 3 days for mail), clientState (opaque string returned in notifications, for validation) }. Optional: includeResourceData (true enables rich notifications, requires encryptionCertificate + encryptionCertificateId). No dedicated scope — caller must have a read permission for the target resource (e.g. Mail.Read, Calendars.Read, ChannelMessage.Read.All, Files.Read.All).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, consistent with the creation action. The description adds valuable context beyond annotations: it mentions required read permissions, expiration time limits, and validation token requirements, which are not in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a tip section and front-loaded purpose. While somewhat lengthy, it avoids redundancy and each sentence adds value. The use of bullet-like formatting in the tip aids readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers key aspects: purpose, required fields, permissions, and expiration limits. However, it does not explain the return value (the created subscription object) or error conditions, which would be helpful given the complexity and no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning beyond the schema by summarizing required parameters (changeType, notificationUrl, resource, expirationDateTime, clientState) and providing examples like '/me/mailFolders/inbox/messages'. It also explains optional fields like includeResourceData, which is not covered in schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool subscribes a listener to receive change notifications for a specified resource in Microsoft Graph. It uses specific verbs ('subscribes', 'create') and distinguishes it from siblings like 'get-subscription', 'update-subscription', and 'delete-subscription'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool (to receive change notifications) and includes a tip summarizing required fields. However, it does not explicitly state when not to use it or name alternative tools for similar tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-todo-linked-resourcecreate-todo-linked-resourceA
Destructive

Create a linkedResource object to associate a specified task with an item in a partner application. For example, you can associate a task with an email item in Outlook that spurred the task, and you can create a linkedResource object to track its association. You can also create a linkedResource object while creating a task.

💡 TIP: Links a resource to a To Do task. Body: { webUrl: 'https://...', applicationName: 'Mail', displayName: 'Related email', externalId: 'optional-id' }. Use to link tasks to emails, files, or web pages for context.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
todoTaskIdYesValue for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint: true, but the description does not explain destructive implications (e.g., confirmation requirements). It adds context about the resource association but omits behavioral details like the need for user approval when the confirm gate is enabled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise, front-loads the purpose, and includes a helpful tip. It could be trimmed slightly, but overall it is efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the tool's purpose and gives an example, but it does not mention return values (no output schema exists) or clarify parameters like confirm, includeHeaders, or excludeResponse. With 6 parameters and no output schema, more completeness would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (83%), so baseline is 3. The description adds value with an example body structure ('{ webUrl: 'https://...', applicationName: 'Mail', ...}'), clarifying parameter usage beyond schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a linkedResource to associate a task with an item in a partner application, with a concrete example. It does not explicitly distinguish from sibling tools like create-todo-task or list-todo-linked-resources, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides example use cases (email association, during task creation) but lacks explicit guidance on when not to use this tool or alternatives. The usage context is implied but not systematically covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-todo-taskcreate-todo-taskA
Destructive

Create a new task object in a specified todoTaskList.

💡 TIP: Creates a new task in a Microsoft To Do list. Body: { title: "..." }; optional dueDateTime, reminderDateTime, importance, body (notes), recurrence, categories. Requires todoTaskListId from list-todo-task-lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal readOnlyHint=false and destructiveHint=true, so the description does not need to restate that this mutates data. It adds the scoping context of requiring a specific todoTaskListId, which is useful. However, it does not describe confirmation-gate behavior or response characteristics, though the confirm parameter in the schema covers part of that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the action, and the tip adds the most useful usage details without restating the verbose schema. Every line earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a task-creation tool with a complex nested body schema, the description covers the required call pattern and the main optional fields at the right level of detail. It does not explain return values, but that is not mandatory here. It could be slightly more explicit about confirmation behavior, but the confirm parameter description already handles that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tip distills the large body schema into an actionable template: 'Body: { title: "..." }; optional dueDateTime, reminderDateTime, importance, body (notes), recurrence, categories.' It also tells the agent to source todoTaskListId from list-todo-task-lists, adding meaning beyond the raw schema. The remaining parameters (confirm, includeHeaders, excludeResponse) are left to the schema, but they are not central to calling the tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a new task object in a specified todoTaskList.' It clearly distinguishes this from sibling tools like update-todo-task, delete-todo-task, and create-todo-task-list, and reinforces the Microsoft To Do context in the tip.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear actionable context: it tells the agent that a todoTaskListId is required and where to get it from (list-todo-task-lists). It does not explicitly call out alternatives or exclusions, but the create-vs-update/delete distinction is clear from the wording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-todo-task-listcreate-todo-task-listA
Destructive

Create a new lists object.

💡 TIP: Creates a new Microsoft To Do task list (the named buckets shown in the To Do app sidebar). Body: { displayName: 'My new list' }. Returns the created todoTaskList with its id, displayName, isOwner, isShared, and wellknownListName ('none' for user-created lists). The built-in lists ('Tasks', 'Flagged emails') already exist and cannot be re-created. Pair with create-todo-task to populate it.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already flag this as a non-read-only, destructive-capable write operation, and the description adds useful behavioral details: the body shape is { displayName: 'My new list' }, the returned fields include id/displayName/isOwner/isShared/wellknownListName, and user-created lists get wellknownListName 'none'. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the most useful information. The only mild redundancy is the opening 'Create a new lists object', which echoes the title and is less precise than the tip that follows, but overall every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description states what the tool returns and what input is required, which makes it largely complete for a simple creation tool. It does not explain the confirm parameter behavior, but that is fully documented in the input schema itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so much of the parameter meaning is already documented. The description still adds value by explicitly providing the required body example, { displayName: 'My new list' }, and explaining what the returned wellknownListName will be, which is more practical than the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action — 'Creates a new Microsoft To Do task list' — and explains what that means via the app-sidebar analogy. It differentiates from create-todo-task by explicitly saying to pair with that tool to populate the list, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable usage context: built-in lists like 'Tasks' and 'Flagged emails' already exist and cannot be re-created, and the tool should be paired with create-todo-task to add tasks. It does not explicitly discuss when to use update-todo-task-list instead, but the create-vs-update distinction is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-upload-sessioncreate-upload-sessionA
Destructive

Create an upload session.

💡 TIP: For large file uploads (no size limit, and no minimum unlike the Outlook attachment session). Returns a pre-authenticated uploadUrl; the caller PUTs the bytes there itself. This server does not perform the PUT. For new files use path: /items/{parentId}:/{fileName}:/createUploadSession. Body (optional): { item: { '@microsoft.graph.conflictBehavior': 'rename' } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, destructiveHint=true), the description discloses that the server does not perform the PUT—the caller must upload bytes to the returned URL. It also notes the body is optional (though this contradicts the schema) and provides a conflictBehavior example, adding meaningful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured. It front-loads the purpose, uses a tip to highlight the key use case, and includes only essential details about behavior and body example. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose, use case, and the critical PUT behavior. However, the erroneous 'optional' body representation introduces a reliability gap, and it does not address generic parameters like confirm, includeHeaders, or excludeResponse. These omissions, combined with the contradiction, leave it incomplete for a tool with this many parameters and complex body schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (83%), so the baseline is 3, but the description directly contradicts the schema by stating 'Body (optional)' while the input schema lists body as required. This misleading statement could cause the agent to omit a required parameter. The conflictBehavior example is useful, but the false optionality is a severe flaw.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create an upload session' and explains it returns a pre-authenticated uploadUrl for large file uploads. It distinguishes itself from the Outlook attachment upload session by noting no size limit and no minimum, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends this tool for large file uploads and contrasts it with the Outlook attachment session. It also gives an example path for new files. However, it does not mention when to prefer it over other upload tools like upload-file-content, so the alternatives are only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

decline-calendar-eventdecline-calendar-eventB
Destructive

Decline invitation to the specified event in a user calendar. If the event allows proposals for new times, on declining the event, an invitee can choose to suggest an alternative time by including the proposedNewTime parameter. For more information on how to propose a time, and how to receive and accept a new time proposal, see Propose new meeting times.

💡 TIP: Declines a meeting invitation. Optional body: { sendResponse: true, comment: 'Cannot attend, conflict.' }. The event remains in the calendar as declined unless the user deletes it.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a genuinely non-obvious behavior beyond the destructiveHint annotation: 'The event remains in the calendar as declined unless the user deletes it.' This tells the agent that declining does not remove the event, which is exactly the kind of side-effect an agent cannot infer from the schema. It does not contradict annotations and adds real value on top of the destructiveHint flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose in the first sentence. The TIP section is somewhat redundant ('Declines a meeting invitation' repeats the opener) and the 'see Propose new meeting times' reference is a dangling link with no URL. Otherwise every sentence earns its place, particularly the persistence note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter, nested-object tool with no output schema, the description covers the core action, the alternative-time proposal flow, and the post-decline state. It lacks prerequisites (the caller must be the invitee), doesn't mention what the organizer sees (e.g., that a decline response is sent when sendResponse is true), and offers no routing to accept/tentatively-accept siblings. Adequate for the happy path, with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 80% schema description coverage, the schema already documents eventId, confirm, includeHeaders, and excludeResponse. The description adds meaning by explaining that ProposedNewTime lets an invitee 'suggest an alternative time' and by giving a body usage example. However, the example uses camelCase keys (sendResponse, comment) while the schema declares PascalCase keys (SendResponse, Comment), which could mislead an agent constructing the body.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource pair: 'Decline invitation to the specified event in a user calendar.' The 'invitation' framing implicitly distinguishes it from siblings like cancel-calendar-event (organizer action) and accept/tentatively-accept-calendar-event. It stops short of naming the sibling it is not, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is given relative to accept-calendar-event, tentatively-accept-calendar-event, cancel-calendar-event, or delete-calendar-event, all of which are siblings. The only usage context is the conditional explanation of when proposedNewTime applies, which covers a sub-feature rather than tool selection. The invitee-vs-organizer distinction is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-calendardelete-calendarA
Destructive

Delete a calendar other than the default calendar.

💡 TIP: Deletes a calendar and all its events. The default calendar cannot be deleted. This action cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint: true. The description adds value by specifying that all events within the calendar are deleted and that the action is irreversible. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus a tip. The purpose is front-loaded in the first sentence, and the tip adds essential behavioral context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description provides key constraints (non-default calendar only, irreversible) and hints at the confirm parameter (though not detailed). Could mention required permissions, but overall complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description does not add parameter information beyond the schema. Baseline of 3 is appropriate as the schema already documents all parameters adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Delete a calendar other than the default calendar' and adds a tip that it deletes all events. It distinguishes itself from sibling tools like delete-calendar-event by specifically targeting calendar deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states that the default calendar cannot be deleted, providing a clear exclusion. The irreversibility warning guides appropriate use. However, no direct comparison to alternative tools like update-calendar or delete-calendar-event is made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-calendar-eventdelete-calendar-eventA
Destructive

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.

💡 TIP: Deleting a seriesMaster deletes ALL occurrences of the recurring event. To cancel a single occurrence, delete that specific instance ID from list-calendar-event-instances.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
If-MatchNoETag
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations: it explains that deleting a meeting sends cancellation to attendees and warns about seriesMaster deletion. Annotations already indicate destructiveHint=true, so the description enriches with specific effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with a separate tip, all directly relevant. No wasted words, and the critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity and presence of annotations (destructiveHint) and full schema coverage, the description covers key behavioral aspects (cancellation, recursion) adequately. No output schema is needed as return is standard.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented. The description adds minimal extra meaning, only hinting that eventId should come from the event's 'id' field. This provides slight additional value, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses clear verb 'Removes' and specifies the resource 'event from the containing calendar'. It also distinguishes behavior for meeting cancellation and recurring events, setting it apart from siblings like 'cancel-calendar-event' or 'delete-specific-calendar-event'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a tip about deleting seriesMaster vs single occurrence, which guides usage. However, it does not explicitly state when to use this tool versus alternatives like 'cancel-calendar-event' or 'delete-specific-calendar-event', leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-contact-folderdelete-contact-folderA
Destructive

Delete contactFolder other than the default contactFolder.

💡 TIP: Deletes a contact folder. The default 'Contacts' folder cannot be deleted — Graph returns an error. The folder (and its contents) typically lands in Deleted Items rather than being permanently removed. Get the folder id via list-contact-folders.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
includeHeadersNoInclude response headers (including ETag) in the response metadata
contactFolderIdYesValue for the 'contactFolderId' path segment. Pass it under the name 'contactFolderId', not as 'id'. Use the 'id' field of the contact folder object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, and the description adds valuable context: the default folder cannot be deleted, the folder moves to Deleted Items rather than being permanently removed, and that the id must be obtained via list-contact-folders. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences plus a tip, each sentence adds unique value. It is front-loaded with the core purpose and immediately provides actionable guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers key aspects: what it deletes, what cannot be deleted, where items go, and how to get the required id. It is complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds minimal parameter-specific info beyond the schema, only indirectly explaining contactFolderId by referencing list-contact-folders. The schema descriptions are already clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it deletes a contact folder, specifies that the default 'Contacts' folder cannot be deleted, and distinguishes from sibling tools like update-contact-folder and create-contact-folder by focusing on deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a tip to use list-contact-folders to get the folder id, warns about the default folder not being deletable, and explains that deletion typically lands in Deleted Items. It could be more explicit about when not to use this tool versus alternatives like delete-outlook-contact, but the guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-drive-item-permissiondelete-drive-item-permissionA
Destructive

Delete a drive item permission.

💡 TIP: Removes a specific permission from a file or folder. Only permissions that are not inherited can be deleted. Use list-drive-item-permissions first to find the permission ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
If-MatchNoETag
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
permissionIdYesValue for the 'permissionId' path segment. Pass it under the name 'permissionId', not as 'id'. Use the 'id' field of the permission object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description adds meaningful context by noting that only non-inherited permissions can be deleted and that you should list permissions first. It does not go into full detail about failure modes or response behavior, but with annotation coverage, this is sufficient additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences: a clear action statement followed by a helpful tip. It is front-loaded and every sentence carries relevant information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete operation with no output schema, the description covers the essential prerequisite, the inherited-permission limitation, and the action itself. It could mention what response the user gets or add detail about consequences, but given the moderate complexity and good annotations, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with descriptions for all seven parameters, so the description does not need to compensate. The only slight addition is the tip to find the permission ID, which aligns with the permissionId parameter but does not add new semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Delete') and resource ('drive item permission'), and adds clarifying detail about removing a specific permission from a file or folder. It also distinguishes behavior from sibling tools like list-drive-item-permissions and create-drive-item-share-link by focusing on deletion of an existing permission.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool explicitly advises using list-drive-item-permissions first to obtain the permission ID, which is a clear prerequisite and sequential guideline. It also states a key constraint: only permissions that are not inherited can be deleted, implicitly telling the user when this tool is NOT appropriate (i.e., inherited permissions).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-excel-rangedelete-excel-rangeA
Destructive

Delete an Excel range.

💡 TIP: Delete cells at the given range, shifting remaining content. Body: { shift: 'Up' } or { shift: 'Left' }. Use 'Up' to delete entire rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations by explaining that deleting a range shifts remaining content and by giving the shift direction options. Annotations already mark this as destructive, and the description aligns with that. It doesn't mention confirmation or side effects, but the destructive hint covers the core safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with the purpose stated first, followed by a concise tip. Every sentence earns its place, and the bullet-point style for the tip improves readability without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with no output schema, the description adequately explains the action and key parameter semantics. It doesn't describe return values or prerequisites, but those are less critical for a delete tool, and the schema covers the confirmation parameter. The description is sufficient to guide correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the schema provides descriptions for most parameters (88% coverage), the description adds critical meaning for the 'body' parameter by specifying the valid values for 'shift' ('Up' or 'Left') and clarifying their effect. This goes beyond the schema's bare string type definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Delete an Excel range.' It distinguishes from siblings like clear-excel-range by specifying that remaining content is shifted, and provides the shift options ('Up' or 'Left'). This clearly communicates the tool's unique behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical usage guidance via the tip, explaining how to delete cells and shift content, and specifically advises using 'Up' to delete entire rows. While it doesn't explicitly contrast with alternatives or say when not to use it, the context strongly implies the appropriate use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-excel-table-rowdelete-excel-table-rowA
Destructive

Delete an Excel table row.

💡 TIP: Delete a single row from a formal Excel table by zero-based row index.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYesValue for the 'index' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookTableIdYesValue for the 'workbookTableId' path segment. Pass it under the name 'workbookTableId', not as 'id'. Use the 'id' field of the workbook table object as returned by Microsoft Graph.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is covered. The description adds that only a single row is affected and that the index is zero-based, which is useful. However, it does not disclose additional behavioral details such as irreversibility or index shifting after deletion. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with only two sentences. The key action and the clarifying tip are both front-loaded and add value without fluff. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a straightforward destructive row deletion. The description covers what it does and the critical index semantics. The schema covers all parameters, and annotations cover the safety profile. The description could mention consequences like row shifting, but that is not essential given the schema and annotations. Overall, it is adequately complete for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with property descriptions, so baseline is 3. The description adds meaningful semantic value by clarifying that the 'index' parameter is zero-based, which is not present in the schema's description ('Value for the index path segment'). This helps the agent correctly interpret and invoke the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Delete an Excel table row' and further specifies 'Delete a single row from a formal Excel table by zero-based row index.' This is a specific verb+resource description that distinguishes the tool from sibling tools like delete-excel-range or list-excel-table-rows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is for deleting a single row from a formal Excel table and emphasizes the zero-based index. It does not explicitly exclude alternatives, but the specific wording implies when this tool is appropriate versus related tools. No explicit 'when not to use' guidance, but enough context to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-focused-inbox-overridedelete-focused-inbox-overrideA
Destructive

Delete an override specified by its ID.

💡 TIP: Deletes a Focused Inbox override. Future messages from that sender revert to the Outlook ML classifier's default behavior. Use list-focused-inbox-overrides to find the ID first.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
inferenceClassificationOverrideIdYesValue for the 'inferenceClassificationOverrideId' path segment. Pass it under the name 'inferenceClassificationOverrideId', not as 'id'. Use the 'id' field of the inference classification override object as returned by Microsoft Graph.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, and the description adds contextual detail about the long-term effect on message classification. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus a tip, front-loaded with the action. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete-by-ID tool with full schema and no output schema, the description covers the purpose, prerequisite, and post-deletion behavior. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented in the schema. The description adds only implicit reference to the ID, not enhancing parameter meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Delete' and the resource 'Focused Inbox override', specifying the effect that future messages revert to default behavior. It distinguishes from sibling tools like list, create, and update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear prerequisite: 'Use list-focused-inbox-overrides to find the ID first.' Does not explicitly state when not to use or list alternatives, but the nature of a delete tool makes usage straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-mail-attachmentdelete-mail-attachmentB
Destructive

Delete a mail attachment.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
attachmentIdYesValue for the 'attachmentId' path segment. Pass it under the name 'attachmentId', not as 'id'. Use the 'id' field of the attachment object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only repeats the destructive nature already captured by the destructiveHint annotation. It adds no extra context such as confirmation requirements, permanence, or potential side effects. With annotations already disclosing destructiveness, the description contributes no additional behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence that is direct and free of unnecessary words. It front-loads the core purpose without fluff, which is ideal for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations (destructiveHint) and full schema coverage, the description is minimally sufficient. However, it lacks context about the confirmation gate (confirm parameter), return behavior, or prerequisites. This leaves some gaps for an agent, but the tool is simple enough that the description is just adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already well-described. The description adds no parameter-level meaning. Baseline of 3 is appropriate since the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete a mail attachment' clearly states the action (delete) and the specific resource (mail attachment), which distinguishes it from sibling tools like delete-mail-message or add-mail-attachment. It is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. There is no mention of when not to use it or references to sibling tools like list-mail-attachments or delete-mail-message. Usage is only implied by the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-mail-folderdelete-mail-folderA
Destructive

Delete the specified mailFolder. The folder can be a mailSearchFolder. You can specify a mail folder by its folder ID, or by its well-known folder name, if one exists.

💡 TIP: Deletes a mail folder and all its contents. This action is irreversible. Use list-mail-folders to find the folder ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds important behavioral context beyond annotations: irreversible deletion of all contents. It aligns with destructiveHint=true and readOnlyHint=false. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences and a tip. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core function, irreversibility, and how to find folder ID. With no output schema and full input schema coverage, it is largely complete, though parameter details are left to schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds limited value. It mentions specifying folder ID or well-known name, which is helpful but does not elaborate on other parameters like If-Match or includeHeaders.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Delete the specified mailFolder' and specifies the resource type, including support for mailSearchFolder. It distinguishes itself from sibling delete tools by focusing on mail folders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip 'This action is irreversible' and suggestion to use list-mail-folders provide clear guidance on when to use and prerequisites. However, it does not explicitly mention when not to use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-mail-messagedelete-mail-messageA
Destructive

Delete an Outlook email message by its message ID. This is a soft delete that moves the message to Deleted Items.

💡 TIP: Soft delete — moves to Deleted Items. To permanently delete, delete again from Deleted Items.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond annotations by explicitly stating it is a soft delete that moves to Deleted Items. No contradictions with annotations (destructiveHint: true). Adds valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences plus a tip, no redundant information. Front-loaded with the core action. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation, with annotations already covering destructive nature, the description adds soft delete nuance, making it complete. No output schema needed for delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all parameters described in the input schema. The description does not add extra parameter information, but the baseline for high coverage is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it deletes an Outlook email message by message ID, with the verb 'delete' matching the tool name. It specifies the action is a soft delete, distinguishing it from permanent deletion and other delete tools among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip provides explicit guidance on soft delete behavior and how to achieve permanent deletion, giving context on when to use. However, it does not compare with alternative delete methods or specify when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-mail-ruledelete-mail-ruleB
Destructive

Delete the specified messageRule object.

💡 TIP: Deletes a message rule permanently. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
messageRuleIdYesValue for the 'messageRuleId' path segment. Pass it under the name 'messageRuleId', not as 'id'. Use the 'id' field of the message rule object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint=true, readOnlyHint=false, and openWorldHint=true. The description adds 'permanently' which confirms destruction but does not add other behavioral details like authentication needs, rate limits, or what else might be affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences and a tip. No wasted words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a delete tool with good annotations and full schema coverage, the description adequately covers the core action. The tip adds useful context. Could mention return value expectations, but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all parameters described. The description does not add additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Delete' and the resource 'messageRule object'. It is specific and distinguishes from sibling tools like create-mail-rule and update-mail-rule, though it does not explicitly differentiate from other delete tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a tip about using the Inbox folder ID for inbox rules, but it does not provide explicit when-to-use vs alternatives or when not to use. No guidance on prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-my-calendar-permissiondelete-my-calendar-permissionA
Destructive

Delete my calendar permission.

💡 TIP: Revokes a calendar share or delegate access. Get the permission id via list-my-calendar-permissions. Permissions where isRemovable=false (e.g. the implicit 'My Organization' default) cannot be deleted — Graph returns an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
calendarPermissionIdYesValue for the 'calendarPermissionId' path segment. Pass it under the name 'calendarPermissionId', not as 'id'. Use the 'id' field of the calendar permission object as returned by Microsoft Graph.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is clear. The description adds valuable behavioral context: that it revokes share or delegate access, and that permissions with isRemovable=false cannot be deleted and will produce an error. This goes beyond the basic annotation signal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action, and the tip adds critical information in a compact way. No wordiness or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a simple delete operation with no output schema, the description covers the main purpose, key limitation (non-removable permissions), and how to obtain the ID. The confirm and If-Match parameters are documented in the schema. The only missing context is the success response shape, but that is not critical for a delete tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds extra value by telling the agent to get the calendarPermissionId from list-my-calendar-permissions, which is not in the schema. This helps the agent source the correct parameter value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Delete' with the resource 'my calendar permission', and the tip further clarifies it revokes a calendar share or delegate access. This clearly distinguishes it from sibling tools like list-my-calendar-permissions, create-my-calendar-permission, and update-my-calendar-permission.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description instructs to get the permission id via list-my-calendar-permissions, which is a clear prerequisite. It also warns about non-removable permissions (isRemovable=false) that will cause Graph to return an error, giving the agent guidance on when the tool will fail. No explicit mention of alternatives, but the context makes it obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-onedrive-filedelete-onedrive-fileC
Destructive

Delete a OneDrive file.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
If-MatchNoETag
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only restates the destructive nature already declared by annotations (destructiveHint=true). It adds no additional context such as whether deletion is permanent, moves to recycle bin, requires specific permissions, or has side effects. No new behavioral traits are disclosed beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, but it is under-specified for a destructive tool with 6 parameters. While there is no fluff, it does not earn its place by adding enough value; it is more like a label than a full description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with no output schema, the description should explain return values, error behavior, or the scope of deletion. It provides none of that. The schema covers parameters, but the description lacks necessary contextual completeness for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter description coverage, so the baseline is 3. The description itself adds no parameter-level meaning beyond what the schema already provides, such as clarifying that driveItemId refers to a file or explaining the confirm gate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete a OneDrive file' clearly states the action (delete) and resource (OneDrive file), making the tool's purpose unambiguous. It distinguishes from sibling tools like copy-drive-item or move-rename-onedrive-item, which perform different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description does not mention when to use this tool versus alternatives, nor any prerequisites, exclusions, or scenarios where this tool is not appropriate. It offers no decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-onenote-pagedelete-onenote-pageA
Destructive

Delete a OneNote page.

💡 TIP: Deletes a OneNote page permanently. This cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
onenotePageIdYesValue for the 'onenotePageId' path segment. Pass it under the name 'onenotePageId', not as 'id'. Use the 'id' field of the onenote page object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set destructiveHint=true, but description reinforces permanence ('cannot be undone'), adding clarity beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. Front-loaded with the purpose and a concise tip. Every sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple permanent delete operation, the description is adequate. It explains the action and permanence. No output schema exists, so no need to document return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with well-described parameters. The description adds no extra parameter-specific meaning beyond what's in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Delete a OneNote page' clearly, specifying the verb and resource. It distinguishes from siblings like 'delete-onedrive-file' by naming the specific resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus other delete operations (e.g., delete-onedrive-file, delete-calendar-event). No exclusion criteria or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-outlook-contactdelete-outlook-contactB
Destructive

Delete a contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
contactIdYesValue for the 'contactId' path segment. Pass it under the name 'contactId', not as 'id'. Use the 'id' field of the contact object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond the annotations. Annotations already indicate destructiveHint=true and readOnlyHint=false. The description does not disclose permanence, consequences, or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (three words), but it omits useful information that could be included without significant verbosity. It is not overly long, but it could be more informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete tool with annotations covering destruction, the description is minimally complete. However, it lacks details on return behavior or error handling, which could be beneficial given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description does not add any additional meaning or usage tips beyond the schema, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and the resource ('a contact'), making the tool's purpose unambiguous. It effectively distinguishes from sibling tools like 'update-outlook-contact' and 'create-outlook-contact'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., other delete tools). There is no mention of prerequisites or conditions for safe use, which is critical for a destructive action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-planner-bucketdelete-planner-bucketA
Destructive

Delete plannerBucket.

💡 TIP: CRITICAL: Requires If-Match header with ETag from get-planner-bucket (use includeHeaders=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
plannerBucketIdYesValue for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint: true and readOnlyHint: false. The description adds behavioral context beyond annotations by disclosing the requirement for the If-Match header and ETag, which is critical for correct invocation. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences: the action and a critical tip. It is front-loaded with the purpose and includes structured formatting with a tip indicator, earning its place with zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the destructive nature and no output schema, the description covers the key prerequisite (If-Match header with ETag) which is essential for correct operation. It does not explain return values or side effects, but the tip provides sufficient context for a simple delete operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for all 5 parameters (100% coverage), so baseline is 3. The description itself does not add additional meaning for parameters; the tip mentions If-Match and includeHeaders but these are already described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete plannerBucket.' uses a specific verb and resource, clearly stating the tool's action. It distinguishes from sibling tools like get-planner-bucket, update-planner-bucket, and create-planner-bucket.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a critical tip about requiring the If-Match header with ETag from get-planner-bucket, which is a prerequisite. However, it provides no guidance on when to use this tool versus alternatives (e.g., when to delete vs. update) or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-planner-task-messagedelete-planner-task-messageA
Destructive

[beta] Delete a plannerTaskChatMessage object.

💡 TIP: Deletes a message from a Planner task's chat. No request body; If-Match is optional if you want conditional deletion; returns 204. BETA Graph API: subject to change; delegated work/school accounts only — no application permissions, no personal Microsoft accounts, global cloud only (not GCC/DoD/21Vianet).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
plannerTaskIdYesValue for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
plannerTaskChatMessageIdYesValue for the 'plannerTaskChatMessageId' path segment. Pass it under the name 'plannerTaskChatMessageId', not as 'id'. Use the 'id' field of the planner task chat message object as returned by Microsoft Graph.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, and the description confirms deletion. It adds behavioral details beyond annotations: no request body, conditional deletion via If-Match, 204 response, and account restrictions. It could mention if the deletion is permanent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences plus a tip. The purpose is front-loaded, and every sentence adds value. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description covers the return (204) and constraints (BETA, account type). It also mentions the conditional deletion behavior. It is complete enough for the agent to understand usage and limitations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for all parameters. The description adds minimal extra parameter context (e.g., mentioning If-Match optionality again). Baseline 3 is appropriate as the schema already documents parameters well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with "Delete a plannerTaskChatMessage object," clearly stating the verb (delete) and resource (plannerTaskChatMessage). It distinguishes from siblings like list-planner-task-messages and create-planner-task-message by specifying the delete action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides important usage constraints: BETA API, delegated work/school accounts only, no application permissions, no personal Microsoft accounts, global cloud only. It also gives tips about no request body, optional If-Match, and 204 return. However, it does not explicitly compare with alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-specific-calendar-eventdelete-specific-calendar-eventA
Destructive

Delete a specific calendar event.

💡 TIP: Deleting a seriesMaster deletes ALL occurrences. To cancel a single occurrence, use the specific instance ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
If-MatchNoETag
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive (destructiveHint=true). The description adds critical behavioral context: deleting a seriesMaster deletes all occurrences, and recommends using instance ID for single occurrence cancellation. This goes beyond the annotations and is valuable for safe use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one action sentence and one tip. It is front-loaded with the primary purpose and adds the most important caveat in a compact form. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers the key risk (seriesMaster deletion) and provides usage guidance. It does not mention return values, but those are not required given no output schema. Sibling differentiation is minimal, but the critical behavior is disclosed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are already documented in the schema. The description does not add parameter details but the tip reinforces the meaning of eventId by mentioning instance ID. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Delete a specific calendar event' with a specific verb and resource. It distinguishes itself from generic deletion by emphasizing 'specific', but does not explicitly contrast with sibling tools like delete-calendar-event. The tip adds valuable context about seriesMaster behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip provides explicit guidance: to cancel a single occurrence, use the specific instance ID. It warns against deleting seriesMaster, which would delete all occurrences. This implies when to use this tool and what to avoid, though it does not name alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-subscriptiondelete-subscriptionA
Destructive

Delete a subscription. For the list of resources that support subscribing to change notifications, see the table in the Permissions section.

💡 TIP: Deletes a webhook subscription. No further change notifications will be sent. Use this to clean up stale subscriptions or stop receiving notifications. Use list-subscriptions to find the id.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
includeHeadersNoInclude response headers (including ETag) in the response metadata
subscriptionIdYesValue for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already show destructiveHint=true. The description adds that no further change notifications will be sent, clarifying the effect. No contradictions, and the description complements the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs, front-loading the purpose. Each sentence adds value, and the tip section is helpful without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, 5 parameters fully covered by schema, and presence of annotations, the description adequately explains the effect and prerequisite. No output schema needed, and the description is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining how to get subscriptionId from the subscription object's id field, which aids correct usage beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Delete a subscription' and specifies it's for webhook subscriptions. It differentiates from sibling tools like list-subscriptions, create-subscription, etc., by focusing on deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description suggests using this tool to clean up stale subscriptions or stop notifications, and directs to list-subscriptions to find the id. It provides clear use context but lacks explicit when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-todo-linked-resourcedelete-todo-linked-resourceA
Destructive

Delete a linkedResource object.

💡 TIP: Removes a linked resource from a To Do task.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
todoTaskIdYesValue for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication
linkedResourceIdYesValue for the 'linkedResourceId' path segment. Pass it under the name 'linkedResourceId', not as 'id'. Use the 'id' field of the linked resource object as returned by Microsoft Graph.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, so the description's 'Delete' is consistent. It adds the tip about removing from a To Do task, but does not disclose further behavioral details like cascading effects, permissions, or reversibility. The description adds minimal value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—one sentence plus a tip emoji line. Every word earns its place, and there is no unnecessary fluff. It is front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with 7 parameters and no output schema, the description offers minimal context. It states the action and resource but does not explain return values, prerequisites, or consequences. While schema descriptions cover parameters, the tool description itself lacks completeness for an agent to fully understand usage without additional lookups.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains each parameter. The description does not add any additional meaning or context for parameters (e.g., source of IDs). Baseline 3 is appropriate as description provides no extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and the resource ('linkedResource object'), with a tip specifying it removes a linked resource from a To Do task. It distinctly differentiates from sibling delete tools (e.g., delete-todo-task) by focusing on linked resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives or when not to use it. While the tip adds context (from a To Do task), it does not help differentiate usage from other delete operations among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-todo-taskdelete-todo-taskA
Destructive

Delete a todoTask object.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
todoTaskIdYesValue for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, so the description's 'Delete' is consistent but adds no extra behavioral context beyond what annotations provide. The description does not mention idempotency, irreversibility, or error states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that immediately conveys the action and target. It is highly concise and front-loaded with no superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive operation with no output schema and annotations already signaling destructiveHint, the description is sufficiently complete. However, it could mention irreversibility or the confirm gate, though those are covered by annotations and parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all 6 parameters with descriptions, achieving 100% coverage. The tool description does not add any additional meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('delete') and the resource ('a todoTask object'). It distinguishes this tool from siblings like create-todo-task, update-todo-task, and get-todo-task by specifying the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no usage guidance. It does not indicate when to use this tool, prerequisites (e.g., need task ID), or when not to use it (e.g., alternatives for soft-delete or undo). The sibling tools include related operations, but no explicit comparison is made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-todo-task-listdelete-todo-task-listA
Destructive

Deletes a todoTaskList object.

💡 TIP: Deletes a Microsoft To Do task list. Built-in lists (Flagged emails, the default Tasks list) cannot be deleted — the API returns an error for those. Get list ids via list-todo-task-lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchNoETag
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already show destructiveHint=true. The description adds that built-in lists cannot be deleted and the API returns an error for those. This extra context about what is and isn't allowed goes beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a brief tip. Front-loaded with the main action. Every sentence adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a delete tool, it covers the action, limitations (built-in lists), prerequisite (get IDs), and implicitly the need for confirmation via the confirm parameter (though in schema). No output schema needed; success/error is standard. Complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds no parameter-specific details beyond the schema. The tip about getting list IDs is helpful but not about parameter semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Deletes a todoTaskList object' and specifies it's for Microsoft To Do task lists. It distinguishes from siblings by noting that built-in lists cannot be deleted and directs users to list-todo-task-lists for IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use to delete user-created lists, not built-in ones (which causes an error). It also advises getting list IDs via list-todo-task-lists. It could explicitly state when not to use (e.g., for built-in lists) but the limitation is already clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dismiss-calendar-event-reminderdismiss-calendar-event-reminderA
Destructive

Dismiss a reminder that has been triggered for an event in a user calendar.

💡 TIP: Dismisses a triggered event reminder so it won't re-fire. No request body required. Pair with list-calendar-events or get-schedule to find active reminders.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, so the description's statement that it dismisses a reminder is consistent. It adds the detail that no request body is required, but does not disclose other behavioral traits like idempotency or error states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two short sentences and a tip. Every sentence adds value, and the key information is front-loaded. No waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and lacks an output schema. The description does not explain return values or response structure, which may leave agents uncertain about success/failure indications. Given the low complexity, the gap is moderate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all parameters described in the schema. The description adds minimal value beyond stating that no request body is required, so it meets the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Dismiss') and resource ('a reminder that has been triggered for an event in a user calendar'). It is specific and avoids tautology, though it does not explicitly distinguish from the sibling tool 'snooze-calendar-event-reminder'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip provides guidance on when to use this tool with associated listing tools, but it lacks explicit exclusions or mention of alternatives like snooze. The context of pairing with list-calendar-events is helpful but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download-bytesA
Read-only

Download binary content from Microsoft Graph and return it as base64. Single tool for any binary read: drive file content, mail attachment, profile photo, Teams hosted content, meeting recording. Returns { contentType, encoding: "base64", contentLength, contentBytes }. For large drive/SharePoint file content, prefer get-download-url, which returns a pre-authenticated URL to stream bytes out-of-band instead of base64 through the agent context.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesRelative Microsoft Graph path starting with "/". Common paths: /drives/{drive-id}/items/{driveItem-id}/content (drive file content); /me/messages/{message-id}/attachments/{attachment-id}/$value (mail attachment, list-mail-attachments returns the IDs); /me/photo/$value or /users/{user-id}/photo/$value (profile photo); /chats/{chat-id}/messages/{chatMessage-id}/hostedContents/{chatMessageHostedContent-id}/$value (Teams chat hosted content, list-chat-message-hosted-contents returns the IDs); /teams/{team-id}/channels/{channel-id}/messages/{chatMessage-id}/hostedContents/{chatMessageHostedContent-id}/$value (Teams channel hosted content). For meeting recordings, use get-meeting-recording-content where available; Microsoft Graph returns authenticated recording bytes, not a pre-authenticated download URL.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint annotation, description details return format (contentType, encoding base64, contentLength, contentBytes) and warns about large file handling. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized: first sentence states purpose and return format, then lists use cases, then alternative guidance, then parameter explanation. Every sentence adds value without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter and no output schema, the description covers all needed information: what it does, how to use it (with examples), return format, and when to choose alternatives. It is fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% but the description adds extensive value by explaining the target parameter with concrete, diverse examples (drive paths, mail attachments, photo, Teams hosted content). This provides contextual meaning beyond the schema's description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'download', resource 'binary content from Microsoft Graph', and lists numerous specific use cases (drive file, mail attachment, profile photo, Teams content, meeting recording). Distinguishes itself from sibling tools like get-download-url and download-bytes-to-file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to use get-download-url for large drive/SharePoint files and get-meeting-recording-content for meeting recordings, providing clear when-to-use-alternatives guidance. Also states it is a single tool for any binary read, setting usage scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download-bytes-to-fileA
Read-only

Write authenticated Microsoft Graph byte content to a local file on the server, returning { path, contentType, bytesWritten } instead of base64. The only out-of-band way to save mail attachments and meeting recordings, whose bytes are exposed solely through authenticated endpoints. Also handles profile photos and Teams hosted content. Writes to an absolute outputPath and never overwrites an existing file. stdio mode only: not available over HTTP. For OneDrive or SharePoint file content, get-download-url is preferred — it returns a pre-authenticated URL for fully out-of-band download without the server fetching the bytes.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesRelative Microsoft Graph path starting with "/". Common paths: /drives/{drive-id}/items/{driveItem-id}/content (drive file content); /me/messages/{message-id}/attachments/{attachment-id}/$value (mail attachment, list-mail-attachments returns the IDs); /me/photo/$value or /users/{user-id}/photo/$value (profile photo); /chats/{chat-id}/messages/{chatMessage-id}/hostedContents/{chatMessageHostedContent-id}/$value (Teams chat hosted content, list-chat-message-hosted-contents returns the IDs); /teams/{team-id}/channels/{channel-id}/messages/{chatMessage-id}/hostedContents/{chatMessageHostedContent-id}/$value (Teams channel hosted content). For meeting recordings, use get-meeting-recording-content where available; Microsoft Graph returns authenticated recording bytes, not a pre-authenticated download URL.
outputPathYesAbsolute path on the server's filesystem where the bytes are written, e.g. /Users/me/downloads/invoice.pdf. Must be absolute; relative paths are rejected. The parent directory must already exist, and an existing file is never overwritten (the call errors if outputPath already exists).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond annotations: writes to an absolute outputPath, never overwrites an existing file, and returns specific fields. It also clarifies that it handles authenticated content. There is no contradiction with annotations (readOnlyHint likely refers to no modification of source).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, starting with core functionality, then use cases, constraints, and guidance. It is slightly verbose but each sentence adds value. Could be streamlined, but overall effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of downloading authenticated byte content, the description is comprehensive. It covers use cases, constraints (no overwrite, absolute path), return format, and sibling tool guidance. No output schema exists, but the description mentions return fields. The tool's role is fully explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers both parameters with descriptions, but the tool description adds meaningful detail: for 'target', it lists common paths and caveats (e.g., meeting recordings should use get-meeting-recording-content if available); for 'outputPath', it clarifies absolute path requirement, parent directory existence, and no-overwrite policy. Baseline 3 due to 100% schema coverage, but extra context justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as writing authenticated Microsoft Graph byte content to a local file, returning specific fields. It distinguishes the tool from siblings like 'download-bytes' (which returns base64) and 'get-download-url' (which returns a URL), and lists specific use cases (mail attachments, meeting recordings, profile photos, Teams hosted content).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool and when to prefer alternatives. It notes that get-download-url is preferred for OneDrive/SharePoint content and that this tool is the only way to save mail attachments and meeting recordings. It also mentions that the tool is only available in stdio mode, not over HTTP.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format-excel-rangeformat-excel-rangeA
Destructive

Format an Excel range.

💡 TIP: Apply rangeFormat properties to a specific range. Required path param 'address' (e.g. 'A1:E5' or 'Sheet1!A1:E5'). Body: { horizontalAlignment, verticalAlignment, wrapText, columnWidth, rowHeight }. Font, fill, and borders are NOT set here; use format-excel-range-font, format-excel-range-fill, and format-excel-range-border for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clarifies which properties are set (horizontalAlignment, verticalAlignment, wrapText, columnWidth, rowHeight) and which are excluded (font, fill, borders), adding context beyond the annotations. However, it does not disclose whether unspecified formatting properties are preserved or overwritten, nor does it mention any confirm-gate requirements, despite the destructiveHint annotation. This leaves a partial but noticeable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core purpose, and each sentence earns its place: the purpose, the required parameter, the body fields, and the exclusion/alternatives. The emoji tip makes it visually scannable without adding bulk.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the main use case and exclusions, it fails to mention the other four required path parameters (driveId, driveItemId, workbookWorksheetId, body) and does not explain what happens to unspecified formatting properties. Since there is no output schema and annotations only provide generic safety hints, the description leaves the agent with some ambiguity in fully invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 88% description coverage and includes many body properties, but the description adds key semantics by narrowing the effective body to {horizontalAlignment, verticalAlignment, wrapText, columnWidth, rowHeight} and explicitly saying font/fill/borders are not set here. This prevents misuse of the schema's broader body shape. It also gives address examples, which is helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Format an Excel range,' a specific verb+resource statement. It goes on to say 'Apply rangeFormat properties to a specific range' and explicitly distinguishes this tool from format-excel-range-font, format-excel-range-fill, and format-excel-range-border by stating that font, fill, and borders are NOT set here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives direct usage guidance: it identifies the required path parameter 'address' with examples, lists the specific body fields to use, and explicitly names alternative tools for font, fill, and border formatting. This tells the agent exactly when to use this tool versus its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format-excel-range-borderformat-excel-range-borderA
Destructive

Format an Excel range border.

💡 TIP: Sets one border side. The {sideIndex} path param selects which side: EdgeTop, EdgeBottom, EdgeLeft, EdgeRight, InsideVertical, InsideHorizontal, DiagonalDown, or DiagonalUp. To outline all four edges, call once per side.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
sideIndexYesValue for the 'sideIndex' path segment.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive and non-read-only, and the description adds valuable behavioral nuance: it modifies only one border side per call, requiring multiple calls for a complete outline. This behavior is not derivable from the schema or annotations alone. It does not warn about overwriting existing border formatting, but the destructive hint covers the risk profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and the tip is dense and immediately actionable. It wastes no words and does not repeat schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with moderate complexity (9 params, 6 required, nested body) and no output schema, the description plus the rich parameter schema covers the essential usage pattern. It tells the agent how to select a side and how to achieve a full border outline. It does not discuss return values or confirm-gate behavior, but those are either not defined or already described in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers most parameters (89%) including body color/style/weight enums and path segment descriptions. The description adds essential semantics by enumerating the sideIndex values (EdgeTop through DiagonalUp), which the schema leaves as a generic 'Value for the sideIndex path segment.' This lifts it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Format an Excel range border,' a specific verb+resource that immediately identifies the tool's purpose. The tip further clarifies that it sets one border side at a time, distinguishing it from sibling formatting tools like format-excel-range-fill and format-excel-range-font.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Sets one border side' and explains how sideIndex selects among the eight possible sides. It gives a clear directive for the common full-outline use case: 'To outline all four edges, call once per side.' It lacks explicit comparison to alternate tools, but the usage context is well defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format-excel-range-fillformat-excel-range-fillA
Destructive

Format an Excel range fill.

💡 TIP: Set the background fill color of a range's cells.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds only that it sets the background color, implying an overwrite. It does not disclose details such as whether existing fill formatting is completely replaced or what confirmation behavior may apply, but there is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, but the first sentence ('Format an Excel range fill.') largely restates the tool name. The tip provides the substantive clarification, so while the description is not padded, one of its two sentences is mostly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description does not explain return values, failure modes, or the precise effect on existing fill formatting. However, the schema covers parameters and annotations provide destructiveness awareness, making this barely adequate for a simple fill-setting operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (88%), with clear descriptions for body.color, address, and path segment parameters. The description does not add parameter-level meaning beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Format'/'Set') and resource ('Excel range fill'/'background fill color'), and the tip clarifies this tool is specifically for background fill. This distinguishes it from sibling formatting tools like format-excel-range-border and format-excel-range-font.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used for setting background fill colors, but it gives no explicit guidance on when to use it versus the more generic format-excel-range or other formatting siblings. No exclusions, prerequisites, or alternative tool names are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format-excel-range-fontformat-excel-range-fontB
Destructive

Format an Excel range font.

💡 TIP: Set font formatting on a range: bold, italic, underline, size, color, and font name.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, but the description provides no additional behavioral context such as whether existing formatting is overwritten, permission requirements, or the meaning of the confirm parameter. The schema's confirm flag is not mentioned in the description, leaving the agent to infer important safety and mutation semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a direct statement followed by a useful tip listing the key adjustable fields. There is no fluff or redundant information; every word contributes to understanding the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a straightforward formatting action, given the high schema coverage and existing annotations. However, it lacks information about return values, side effects (e.g., overwriting existing font settings), and any usage prerequisites. For a mutation tool with no output schema, additional behavioral context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (88%), with individual descriptions for name, size, and color. The description simply lists the same properties without adding new semantics or clarifying usage patterns. Baseline 3 is appropriate as the schema carries the explanatory burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: "Format an Excel range font" and explicitly lists the adjustable attributes (bold, italic, underline, size, color, font name). This distinguishes it from sibling tools like format-excel-range-fill or format-excel-range-border, which target different formatting aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives such as format-excel-range-fill or format-excel-range-border. It does not specify exclusions, prerequisites, or context for optimal use, relying solely on the tool name and basic tip.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forward-calendar-eventforward-calendar-eventA
Destructive

This action allows the organizer or attendee of a meeting event to forward the meeting request to a new recipient. If the meeting event is forwarded from an attendee's Microsoft 365 mailbox to another recipient, this action also sends a message to notify the organizer of the forwarding, and adds the recipient to the organizer's copy of the meeting event. This convenience is not available when forwarding from an Outlook.com account.

💡 TIP: Forwards a meeting invitation to additional recipients. Body: { ToRecipients: [{ emailAddress: { address, name } }], Comment (optional) }. If the forwarder is an attendee (not organizer), the organizer is also notified and the new recipient is added to the organizer's attendee list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations: it details the forwarding mechanics (organizer notification and attendee list update for Microsoft 365, lack of convenience for Outlook.com). This aids the agent in understanding side effects. Could mention permissions or response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, around 4 sentences, front-loading the core purpose. The tip is helpful and compact. No unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 params, nested objects, no output schema), the description adequately covers the use case, main behavior, and parameter tips. It could mention the return value or potential errors for full completeness, but it is already informative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides a structural hint for the 'body' parameter (ToRecipients and Comment) and clarifies that eventId should be passed as 'eventId' not 'id'. Schema coverage is high (80%), and the description adds meaningful guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb 'forward' and the resource 'calendar event', distinguishing it from siblings like accept, decline, or create. It also covers both organizer and attendee scenarios and notes the Outlook.com limitation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to forward (for both organizer and attendee) and notes behavior differences. However, it does not explicitly state when not to use it or mention alternatives, which would be helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forward-mail-messageforward-mail-messageA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: it discloses that the method saves the message in Sent Items, explains HTTP 400 error conditions for conflicting or missing parameters, and specifies MIME encoding requirements. The destructiveHint annotation is consistent with this side-effect behavior, so there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with clear JSON and MIME sections, bullet points, and a tip. It is somewhat long, but the added information is operationally important for avoiding HTTP 400 errors and for preserving formatting; the structure makes it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with nested message objects and no output schema, the description covers the main calling formats, key error cases, required recipients, and side effects. It does leave some details to the schema, such as messageId naming, but the description is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 80% schema description coverage, the schema already documents parameters like messageId and confirm. The description adds critical constraint semantics: the comment/body exclusivity rule, the toRecipients placement rule, the base64 MIME requirement, and the note that toRecipients is required. This goes well beyond what the schema alone conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Forward a message' using either JSON or MIME format. It also distinguishes the operation from the create-draft alternative by noting this method saves the message in Sent Items, making it easy to tell apart from sibling tools like create-forward-draft.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: when to use JSON vs MIME, which parameter combinations are valid versus invalid, and explicitly names the alternative 'create a draft to forward a message, and send it later.' This gives an agent clear conditions for selecting this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-calendar-eventget-calendar-eventB
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
timezoneNoIANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
expandExtendedPropertiesNoWhen true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses that event bodies are returned only in HTML format and that extensions are supported for custom properties. This adds valuable behavioral context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two paragraphs with some redundant phrasing (e.g., 'Since the event resource supports extensions...'). It could be more concise by trimming unnecessary elaboration, but it is not overly long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 8 parameters, no output schema, and moderate complexity, the description covers basic purpose and a few behavioral traits but lacks information on pagination, error handling, or response structure. It is adequate but could be more comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter description coverage, so baseline is 3. The description adds little beyond what the schema provides—it mentions the HTML format but no parameter-specific details. Baseline is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('properties and relationships of the specified event object'). It also mentions that it returns HTML body and can access other users' calendars, but does not explicitly differentiate from sibling tools like get-calendar-view or get-specific-calendar-event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions two scenarios for getting events in another user's calendar, but provides no explicit guidance on when to use this tool versus list-calendar-events or other get tools. No prerequisites or exclusion criteria are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-calendar-viewget-calendar-viewA
Read-only

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. To find Teams meetings, use $select=subject,start,isOnlineMeeting,onlineMeetingProvider,onlineMeeting and keep the events with isOnlineMeeting true and onlineMeetingProvider teamsForBusiness; neither property is filterable (isOnlineMeeting returns 400 ErrorInvalidProperty). To search by subject, use $filter=contains(subject,'keyword'). Teams meetings expose their join link as onlineMeeting/joinUrl; the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
timezoneNoIANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC.
endDateTimeYesThe end date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
startDateTimeYesThe start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
expandExtendedPropertiesNoWhen true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is already covered. The description adds meaningful behavioral context beyond annotations: it expands recurring instances rather than returning only seriesMaster, notes that isOnlineMeeting is not filterable and returns a 400 error, and clarifies that the event resource has no joinWebUrl property. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured, with the core purpose front-loaded and a clearly labeled TIP section carrying operational detail. Most sentences earn their place, especially the Teams meeting workflow. However, the opening line's claim about 'some other calendar' conflicts with the subsequent sibling guidance, adding avoidable confusion. Otherwise this would be a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 15 parameters and no output schema, the description is remarkably complete. It explains what the calendar view returns (occurrences, exceptions, single instances), notes the recurring-instance expansion behavior, specifies required parameters, routes non-default-calendar requests to the correct sibling, and gives actionable guidance for Teams meeting lookup and transcript retrieval. The parameter schema covers the remaining details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds extra value by emphasizing the required startDateTime/endDateTime format, recommending specific $select fields for Teams meetings, and explaining how to filter by subject with contains(). This goes beyond the schema's per-parameter descriptions and helps an agent compose correct query parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action (get occurrences, exceptions, and single instances), the resource (calendar view over a time range), and explicitly distinguishes this from get-specific-calendar-view. However, the first sentence says 'from the user's default calendar, or from some other calendar of the user,' which is internally inconsistent with the later tip telling agents to use get-specific-calendar-view for non-default calendars. This ambiguity prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: it requires startDateTime and endDateTime in ISO 8601, instructs agents to use get-specific-calendar-view for non-default calendars, and provides concrete recipes for Teams meetings and subject search. It also tells agents what not to do (e.g., isOnlineMeeting is not filterable and returns 400). This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-current-userget-current-userA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
ConsistencyLevelNoIndicates the requested consistency level. Documentation URL: https://docs.microsoft.com/graph/aad-advanced-queries

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide read-only and non-destructive hints. Description adds valuable context: default property subset, how to retrieve non-default properties with $select, and support for extensions. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, front-loaded with purpose, but includes some redundancy (e.g., mentioning $select twice). Could be more concise without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description sufficiently explains what is returned (user object) and how to customize results. It covers key behaviors and parameter usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with detailed parameter descriptions. The description does not add significant new information beyond the schema, only reiterating $select usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Retrieve the properties and relationships of user object' with specific verb and resource. The tool is distinct from siblings as the only one for the current user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context on when to use the tool, but does not explicitly state when not to use it or mention alternatives. Implicitly covers usage via $select and extension details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-download-urlA
Read-only

Resolve a short-lived, pre-authenticated download URL for Microsoft Graph binary content that exposes one (drive/SharePoint file content). The returned URL streams the bytes with NO Authorization header, so the client can fetch it straight to disk (e.g. curl) without round-tripping base64 through the agent context. Prefer this over download-bytes for any file above a few KB or any bulk download. Returns { downloadUrl, name?, size?, contentType? }. NOTE: mail file attachments (/messages/{id}/attachments/{id}/$value) and meeting recordings do NOT expose a pre-authenticated URL — Graph offers no such link for them; use download-bytes for small ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesRelative Microsoft Graph path starting with "/". Either a driveItem content path or the item path itself, e.g. /drives/{drive-id}/items/{driveItem-id}/content, /me/drive/items/{driveItem-id}/content, or /sites/{site-id}/drive/items/{driveItem-id}. A trailing /content is optional and is stripped automatically for drive items. Mail attachment $value paths and meeting recordings are not supported (Graph exposes no pre-authenticated URL for them).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral details beyond the annotations: the URL is short-lived and pre-authenticated, does not require an Authorization header, and streams bytes directly (no base64 encoding). It also lists unsupported scenarios. Annotations indicate readOnlyHint=true and openWorldHint=true, which are consistent with the description. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of about 6-7 sentences, well-structured with a clear flow: purpose, benefit, preference guidance, exceptions, and return info. It is informative but could be slightly more concise; however, it earns its sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter and no output schema, the description covers all necessary context: what it does, how to use it, when to use alternatives, unsupported types, and the return format. It addresses edge cases and provides complete guidance for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does not add much beyond what the schema already provides for the 'target' parameter. The schema itself includes a detailed explanation with examples, so the description's added value is minimal. Hence, score 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool resolves a short-lived, pre-authenticated download URL for Microsoft Graph binary content (drive/SharePoint file content). It uses a specific verb 'Resolve' and clearly identifies the resource. The description also distinguishes this tool from download-bytes, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: 'Prefer this over download-bytes for any file above a few KB or any bulk download.' It also states when NOT to use it (mail file attachments and meeting recordings) and directs users to use download-bytes for those cases. This clear differentiation satisfies the dimension.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-drive-deltaget-drive-deltaA
Read-only

Track changes in a driveItem and its children over time. Your app begins by calling delta without any parameters. The service starts enumerating the drive's hierarchy, returning pages of items and either an @odata.nextLink or an @odata.deltaLink, as described below. Your app should continue calling with the @odata.nextLink until you no longer see an @odata.nextLink returned, or you see a response with an empty set of changes. After you have finished receiving all the changes, you may apply them to your local state. To check for changes in the future, call delta again with the @odata.deltaLink from the previous response. Deleted items are returned with the deleted facet. Items with this property set should be removed from your local state.

💡 TIP: Tracks changes to a driveItem and its children over time. Returns a collection of driveItems that have been created, modified, or deleted. Use get-drive-root-item first to get the root driveItem-id, then pass it here. Supports $select and delta tokens for incremental sync via @odata.deltaLink.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true (safe read) and destructiveHint=false. The description adds behavioral details: pagination via @odata.nextLink, delta tokens, deleted facet, and the need to apply changes to local state. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative but slightly verbose, with a separate tip section. It is well-structured using paragraphs and lists, front-loading the core process. Every sentence adds value, though some redundancy exists between the main description and the tip.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex delta tracking tool, the description covers the essential workflow: initial call, pagination, deltaLink, handling deleted items. No output schema exists, but the description adequately explains what to expect. It could mention rate limits or error handling, but overall complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The tool description adds no new semantic meaning beyond the schema. Per guidelines, baseline is 3 when coverage >80%. The description does not enhance understanding of parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool as tracking changes in a driveItem and its children over time, using delta tokens. It specifies the purpose with strong action verbs ('Track changes') and distinguishes it from siblings like get-drive-item or list-folder-files by focusing on incremental sync and delta queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a step-by-step usage pattern: start with no parameters, follow nextLink for pagination, then use deltaLink for future changes. The tip adds prerequisite guidance (get root driveItem first). It lacks explicit 'when not to use' but gives clear context for proper invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-drive-itemget-drive-itemA
Read-only

All items contained in the drive. Read-only. Nullable.

💡 TIP: Gets metadata for a file or folder: name, size, lastModifiedDateTime, createdBy, webUrl, file (mimeType, hashes), folder (childCount), parentReference, and @microsoft.graph.downloadUrl. For large drive/SharePoint files, call get-download-url with target=/drives/{drive-id}/items/{driveItem-id}/content to fetch out-of-band with no Authorization header. For small files where base64 in the tool response is acceptable, call download-bytes with the same /content target.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states 'Read-only. Nullable.' and details the returned metadata, aligning with annotations (readOnlyHint=true). It adds context about nullable nature and large file handling, enhancing transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and concise overall, but the tip paragraph is lengthy. It could be slightly trimmed without losing key guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing returned fields. Combined with 100% parameter coverage and alternatives for file download, the description is fully complete for agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds value by listing the output fields (name, size, etc.) not present in the input schema, giving the agent a clear picture of what the tool returns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Gets metadata for a file or folder' and lists specific fields (name, size, etc.), clearly distinguishing it from sibling tools like get-download-url or list-folder-files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip provides explicit guidance on when to use this tool vs. alternatives: for large files use get-download-url/download-bytes, for small files use download-bytes. This clearly delineates usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-drive-root-itemget-drive-root-itemC
Read-only

The root folder of the drive. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already include readOnlyHint=true and destructiveHint=false. The description reiterates 'read-only', which adds no new behavioral insight beyond the annotations. No additional traits disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise (6 words), but overly brief for a tool with 6 parameters. Lacks front-loaded actionable guidance; underspecified for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is present, but the description does not explain what is returned or how to use parameters like expand or select. Incomplete for a tool with moderate complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema itself documents all parameters. The description adds no parameter information, earning the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (the root folder of the drive) and notes it's read-only, but lacks an action verb like 'get' or 'retrieve'. It does not distinguish from similar tools like 'get-drive-item'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'get-drive-item' or 'list-folder-files'. No exclusions or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-excel-rangeget-excel-rangeC
Read-only

Get an Excel range.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesValue for the 'address' path segment.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it is a safe read operation. However, the description adds no behavioral context beyond the annotations—it does not describe return format, pagination behavior, or any side effects, missing the opportunity to enrich the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than conciseness. The single sentence 'Get an Excel range.' does not earn its place because it merely repeats the tool name without providing any useful information, making it an empty filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, no output schema, and only basic annotations, the description is critically incomplete. It does not explain what an 'Excel range' is, how to format the address, what data is returned, or how pagination/optional parameters behave. The agent would have to rely entirely on the schema and guesswork.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with every parameter (driveId, driveItemId, workbookWorksheetId, address, fetchAllPages, includeHeaders, excludeResponse) having a clear description. The tool description itself adds nothing to parameter semantics, but the schema fully compensates, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get an Excel range.' is a tautology that restates the tool name without adding any new information. It does not distinguish this tool from siblings like get-excel-table or get-excel-used-range, which also operate on Excel data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention typical use cases, prerequisites (e.g., knowing the worksheet or address), or which sibling tools should be preferred in different scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-excel-range-formatget-excel-range-formatA
Read-only

Returns a format object, encapsulating the range's font, fill, borders, alignment, and other properties. Read-only.

💡 TIP: Reads a range's format: alignment, wrapText, columnWidth, rowHeight. Font, fill, and borders are nested and omitted by default; add font, fill, and borders to the $expand parameter to include them in one call. Cell styling often encodes meaning (a fill or font color flagging status such as tentative or reconciled), so expand these to interpret what the cells mean.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
addressYesValue for the 'address' path segment.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint. Description adds context about default omission of nested properties and the meaning of cell styling, enhancing transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences plus a tip, front-loaded with purpose. Every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so understanding return structure relies on description. Description lists some properties but is vague on the full format object. Missing details about error conditions or prerequisites like valid address.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage, but the description adds value by explaining the expand parameter in context (nested font, fill, borders omitted by default) beyond the schema's generic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Returns a format object' for a range and specifies it is read-only. This distinguishes it from sibling tools like format-excel-range which modify format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip implies usage for reading format and explains how to expand nested properties, but does not explicitly mention when not to use it or suggest alternatives like format-excel-range for writing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-excel-tableget-excel-tableB
Read-only

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

💡 TIP: Gets a specific table by name or ID. Returns table properties including columns, showHeaders, showTotals, and style.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookTableIdYesValue for the 'workbookTableId' path segment. Pass it under the name 'workbookTableId', not as 'id'. Use the 'id' field of the workbook table object as returned by Microsoft Graph.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description confirms 'Read-only' but adds no further behavioral context (e.g., authentication needs, rate limits, side effects). It adds limited value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short with two sentences and a tip. The first sentence is redundant with annotations. The tip adds useful context. Could remove the first sentence for better conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description lists some returned properties (columns, showHeaders, showTotals, style), which helps. However, it does not mention pagination or usage of expand/select parameters, which are important for a get operation. Lacks some completeness for a tool with 8 parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are fully described in the schema. The description mentions fetching by 'name or ID' but does not clarify which parameter corresponds to name vs ID; the schema has workbookTableId, which is an ID. No additional semantic meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Gets a specific table by name or ID' and lists returned properties, which clearly identifies the tool's function. However, the first sentence 'Represents a collection of tables' is slightly misleading as it implies a list rather than a single table. It distinguishes from siblings like list-excel-tables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives (e.g., list-excel-tables). The description implies using it for a specific table but does not exclude other use cases or mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-excel-used-rangeget-excel-used-rangeA
Read-only

Get an Excel used range.

💡 TIP: Get the smallest range that encompasses any cells with values or formatting on the worksheet. Returns address, values, formulas, numberFormat, rowCount, columnCount. Use this to discover the populated bounds of a sheet before reading or appending — avoids guessing how far data extends. Optional $select to trim the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it returns specific fields (address, values, formulas, numberFormat, rowCount, columnCount) and clarifies the semantics of 'used range' as encompassing cells with values or formatting. Also mentions optional $select trimming, which is not in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a clear verb-first sentence followed by a practical tip and return field list. Every sentence earns its place, and the format is scannable. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description compensates by listing return fields. It also explains the use case and optional $select. While it doesn't address all parameters (fetchAllPages, includeHeaders, excludeResponse), those are fully covered in the schema. Overall, the description plus schema provides sufficient context for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the listed parameters, so the baseline is 3. The description adds extra meaning by noting 'Optional $select to trim the response,' which is not present in the input schema. This provides useful parameter-level guidance beyond what the schema offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get an Excel used range.' It further defines what a used range means (smallest range encompassing cells with values or formatting) and lists the returned data fields. This distinguishes it from sibling tools like get-excel-range, which fetches a specific range, rather than discovering bounds.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to discover the populated bounds of a sheet before reading or appending — avoids guessing how far data extends.' This gives a clear use case and implies when to choose this tool over others. It doesn't explicitly state when not to use it, but the guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-mailbox-settingsget-mailbox-settingsA
Read-only

Get the user's mailboxSettings. You can view all mailbox settings, or get specific settings. Users can set the following settings for their mailboxes through an Outlook client: Users can set their preferred date and time formats using Outlook on the web. Users can choose one of the supported short date or short time formats. This GET operation returns the format the user has chosen. Users can set the time zone they prefer on any Outlook client, by choosing from the supported time zones that their administrator has set up for their mailbox server. The administrator can set up time zones in the Windows time zone format or Internet Assigned Numbers Authority (IANA) time zone (also known as Olson time zone) format. The Windows format is the default. This GET operation returns the user's preferred time zone in the format that the administrator has set up. If you want that time zone to be in a specific format (Windows or IANA), you can first update the preferred time zone in that format as a mailbox setting. Subsequently you will be able to get the time zone in that format. Alternatively, you can manage the format conversion separately in your app.

💡 TIP: Gets the current user's mailbox settings including automaticRepliesSetting (out-of-office status, message, scheduledStartDateTime/EndDateTime, externalAudience), language, timeZone, dateFormat, timeFormat, delegateMeetingMessageDeliveryOptions, and userPurpose.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds behavior details like date/time format handling and time zone format support (Windows vs IANA), which goes beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is somewhat verbose, especially the paragraph about date/time and time zone behavior. The TIP adds value but the structure could be leaner. Not overly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description lists some return settings but lacks details on response structure (e.g., JSON object shape). It adequately explains behavior but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 5 parameters. The description does not add parameter-specific info beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets user mailbox settings and lists specific settings (automaticRepliesSetting, language, timeZone, etc.), distinguishing it from sibling tools like update-mailbox-settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage is for reading settings, but no explicit guidance on when to use vs. update-mailbox-settings or other sibling tools. The 'TIP' indicates it gets current user settings, but lacks direct when-to-use/when-not-to-use advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-mail-messageget-mail-messageA
Read-only

Get a single Outlook email message by its message ID, including full subject, sender, recipients, body, and attachment flags. Use list-mail-messages first to obtain the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description's mention of included fields (subject, sender, etc.) adds useful behavioral context without contradiction. It does not detail all response elements but is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two efficient sentences, front-loaded with the action ('Get a single Outlook email message...') and includes a helpful usage hint. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters and no output schema, the description outlines the key response fields and prerequisite step. It relies on schema descriptions for parameters, which is acceptable. A mention of pagination or expand behavior would improve completeness but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds no new parameter details beyond referencing 'messageId' indirectly. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a single Outlook email message by its ID, listing key fields included (subject, sender, recipients, body, attachment flags). It implicitly distinguishes from sibling tools like 'list-mail-messages' and 'get-mail-message-mime'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use 'list-mail-messages' first to obtain the message ID, providing clear usage context. However, it does not explicitly mention when not to use it or alternatives beyond that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-mail-message-mimeget-mail-message-mimeA
Read-only

Download the raw MIME source (RFC 822 .eml content) of an Outlook email message by its message ID. Returns the complete original message including headers and encoded attachments.

💡 TIP: Download an email message as raw RFC 5322 MIME content (.eml format). Use this when archiving an email to disk preserving all original headers, body, and inline-encoded attachments. Returns the MIME stream as text. Find the message id with list-mail-messages first.

ParametersJSON Schema
NameRequiredDescriptionDefault
AcceptNoAccept header for the response representation. Defaults to "text/plain". Only set this when Graph asks for a different format — e.g. a 403 SpeakerAttributionNotAllowed on transcript content names the media type to retry with.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
includeHiddenMessagesNoInclude Hidden Messages

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by stating the return is the complete original message with headers and encoded attachments, and that the MIME stream comes back as text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and compact, but the tip paragraph partly repeats the first sentence ('raw RFC 5322 MIME content', 'Returns the MIME stream as text'). The use case and message-id workflow add value; the redundancy keeps it from a 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only single-resource retrieval tool, the description fully explains what is returned, why to use it, and how to obtain the required message ID. All optional parameters are documented in the schema, and no output schema exists, so the explicit "returns MIME stream as text" statement is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description does not need to re-explain parameters. It adds one useful workflow hint beyond the schema: 'Find the message id with list-mail-messages first.' This is above the baseline for fully schema-covered parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Download the raw MIME source (RFC 822 .eml content) of an Outlook email message by its message ID.' The mention of raw MIME vs the sibling get-mail-message clearly distinguishes it from a normal message fetch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives a use case: 'Use this when archiving an email to disk preserving all original headers, body, and inline-encoded attachments.' It also tells the agent to find the message id with list-mail-messages first. It does not explicitly mention when not to use it or contrast with get-mail-message, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-mail-tipsget-mail-tipsA
Read-only

Get the MailTips of one or more recipients as available to the signed-in user. Note that by making a POST call to the getMailTips action, you can request specific types of MailTips to be returned for more than one recipient at one time. The requested MailTips are returned in a mailTips collection.

💡 TIP: Looks up MailTips for one or more recipients before sending an email — answers 'is this person on auto-reply / OOF?', 'will my email exceed their mailbox quota?', 'are they an external recipient?', 'is this a mailbox or distribution list?'. Body: { EmailAddresses: ['user@contoso.com', ...], MailTipsOptions: 'automaticReplies, mailboxFullStatus, customMailTip, externalMemberCount, totalMemberCount, maxMessageSize, deliveryRestriction, moderationStatus, recipientScope, recipientSuggestions' (comma-separated subset) }. Returns mailTips per recipient with the requested fields populated. Use this to short-circuit urgent emails when a recipient is OOF, or to warn before fanning out to a large DL.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds value by specifying it's a POST call (a read-only operation), explaining the response structure, and detailing MailTipsOptions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two paragraphs with a helpful tip block. Every sentence serves a purpose: stating action, clarifying use case, and detailing parameters. No wasted words, front-loaded with key info.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and rich annotations, the description fully answers what it does, when to use it, how to invoke it, and what to expect in return. No gaps given the lack of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite schema having 67% coverage, the description provides essential extra meaning: an example body structure, explanation of MailTipsOptions (comma-separated subset), and response content. This compensates for missing schema descriptions on EmailAddresses and MailTipsOptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets MailTips for recipients, explaining what MailTips are (OOF, quota, external, etc.) and how it works via a POST call. It distinguishes from sibling tools by specifying a unique use case (pre-send checks) not covered by other mail actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit usage guidance: 'before sending an email' and 'Use this to short-circuit urgent emails...or to warn before fanning out to a large DL.' It lacks explicit when-not-to-use or alternative tools, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-my-profileget-my-profileA
Read-only

[beta] Retrieve the properties and relationships of a profile object for a given user. The profile resource exposes various rich properties that are descriptive of the user as relationships, for example, anniversaries and education activities. To get one of these navigation properties, use the corresponding GET method on that property. See the methods exposed by profile.

💡 TIP: Retrieves the signed-in user's rich profile - a richer object than get-current-user, exposing relationships like skills, projects, languages, education and work positions. Use $expand to pull related collections (e.g. $expand=skills,projects).

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly and non-destructive. Description adds context about navigation properties requiring separate GET methods, and notes beta status. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise paragraphs: first explains purpose, second provides actionable tip and distinction. No fluff, well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description explains the rich profile structure and navigation properties. Annotations include openWorldHint. Slightly inconsistent about 'given user' vs 'signed-in user', but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 5 parameters with detailed descriptions. Description adds value by explaining $expand usage with an example, enhancing the semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it retrieves the rich profile object, contrasting with get-current-user. Specific verb 'retrieve' and resource 'profile object'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends using this tool for richer profile data (skills, projects) versus get-current-user, and suggests using $expand. Lacks explicit when-not-to-use, but provides clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-onenote-page-contentget-onenote-page-contentC
Read-only

The page's HTML content.

ParametersJSON Schema
NameRequiredDescriptionDefault
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
onenotePageIdYesValue for the 'onenotePageId' path segment. Pass it under the name 'onenotePageId', not as 'id'. Use the 'id' field of the onenote page object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what annotations (readOnlyHint, destructiveHint) already provide. There is no mention of pagination, payload sizes, or that fetchAllPages can return enormous payloads (though that is in the schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but too minimal. It fails to provide key information such as the nature of the HTML content or behavioral notes. Front-loaded but insufficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and the tool capable of returning large payloads (via fetchAllPages), the description omits critical context about what the HTML content represents, how to handle pagination, or the structure of the response. The description is incomplete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 4 parameters have descriptions in the input schema (100% coverage), so the description does not need to add parameter semantics. It adds no new information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'The page's HTML content' vaguely states the output but does not explicitly state the tool's action (getting/retrieving). It relies on the tool name to convey purpose. It distinguishes from siblings like list-onenote-pages but lacks specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as list-onenote-pages or other page operations. Does not mention prerequisites, context, or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-outlook-contactget-outlook-contactC
Read-only

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:

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
contactIdYesValue for the 'contactId' path segment. Pass it under the name 'contactId', not as 'id'. Use the 'id' field of the contact object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The truncated description adds only a hint about getting contacts in another user's folder but does not complete the behavioral details, adding minimal value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is severely truncated mid-sentence, making it incomplete and not concise. It fails to convey a complete thought, which undermines its usefulness. Conciseness requires completeness, which is absent here.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should explain return values or behavior. Instead, it is truncated and provides insufficient context for a tool with 6 parameters and complex features like expand and fetchAllPages. The description is not complete enough for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all 6 parameters with descriptions, achieving 100% coverage. The tool description does not add any new parameter information beyond the schema, so it meets the baseline without improvement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts by stating 'Retrieve the properties and relationships of a contact object', which clearly indicates the verb and resource. However, it then mentions 'two scenarios' without completing the thought, leaving ambiguity about the full purpose. The truncation reduces clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus siblings like list-outlook-contacts or update-outlook-contact. The description does not specify context or alternatives, failing to help the agent choose appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-planner-bucketget-planner-bucketA
Read-only

Retrieve the properties and relationships of a plannerBucket object.

💡 TIP: Response includes @odata.etag — required as If-Match for update-planner-bucket and delete-planner-bucket. Use includeHeaders=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
plannerBucketIdYesValue for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false. Description adds context about response containing @odata.etag, which is important for update/delete operations. No contradiction. Behavioral traits beyond annotations are minimal but acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a tip, front-loaded with main purpose. Every sentence contributes value; no wasted words. Excellent conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description mentions properties and relationships. The ETag tip adds important context for follow-up operations. Given 6 parameters and 1 required, the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; each parameter has a description in the schema. The tool description does not add additional meaning beyond what the schema already provides. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Retrieve the properties and relationships of a plannerBucket object.' Verb (retrieve) and resource (plannerBucket) are specific. Distinct from siblings like create-planner-bucket, update-planner-bucket, delete-planner-bucket.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes a tip about @odata.etag required for update/delete and suggests using includeHeaders=true. Provides context for subsequent actions. Could be improved by explicitly stating when not to use, but the tip adds value.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-planner-planget-planner-planA
Read-only

Retrieve the properties and relationships of a plannerplan object.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
plannerPlanIdYesValue for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, which the description does not contradict. However, the description adds no extra behavioral context beyond stating it retrieves properties and relationships, which is minimal. The agent gains no insight into side effects, auth needs, or data scope beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no redundancy. It efficiently conveys the tool's core action without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is a simple retrieval operation with a well-documented schema and no output schema, the description is mostly adequate. However, it could benefit from a note about what 'properties and relationships' typically include, especially since there is no output schema to clarify the return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all 6 parameters, so the descriptive burden on the main description is low. The main description does not add any parameter-specific context, which is acceptable since the schema already does a thorough job.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves a planner plan object. The purpose is specific, but it does not explicitly differentiate from sibling tools like list-planner-tasks, which could be confusing for an AI agent determining which tool to use for a specific plan retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when needing properties of a specific plan, but it offers no explicit guidance on when to use this tool versus alternatives, nor any prerequisites or context for invoking it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-planner-taskget-planner-taskA
Read-only

Retrieve the properties and relationships of plannerTask object.

💡 TIP: Response includes @odata.etag — save it, required as If-Match header for update-planner-task. Use includeHeaders=true to capture it.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
plannerTaskIdYesValue for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by revealing that the response includes @odata.etag and that it's required for update, and suggests using includeHeaders to capture it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the action, followed by a helpful tip. It is efficient but could be more structured with a separate example.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters fully described and no output schema, the description could be more explicit about the return value shape. It mentions etag but lacks details about other properties returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds a tip about includeHeaders that provides extra context beyond the schema, justifying a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Retrieve' and the resource 'plannerTask object'. It distinguishes from sibling tools like update-planner-task (update) and get-planner-task-details (details).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip about using includeHeaders to capture etag for update-planner-task gives context for when to use this tool. However, it does not explicitly exclude alternatives like get-planner-task-details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-planner-task-detailsget-planner-task-detailsA
Read-only

Retrieve the properties and relationships of a plannerTaskDetails object.

💡 TIP: Response includes @odata.etag — required for update-planner-task-details. Use includeHeaders=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
plannerTaskIdYesValue for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the response includes @odata.etag and that includeHeaders can be used to get it. This adds value beyond the annotations (readOnlyHint=true, destructiveHint=false) by specifying a key behavioral trait for downstream usage. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise—two sentences plus a tip. Every sentence adds value: the first states purpose, the second provides crucial usage context. No unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description does not detail return fields, but it does note the ETag, which is important. The tip about includeHeaders adds completeness for the common use case. Slight gap for a full picture, but sufficient for a retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents all parameters. The description adds minimal value beyond the tip about includeHeaders, which is a usage hint rather than parameter semantics. Baseline is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieve the properties and relationships' with the specific resource 'plannerTaskDetails object'. It uses a specific verb and resource, distinguishing it clearly from sibling tools like 'get-planner-task' and 'update-planner-task-details'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a tip that explicitly mentions using includeHeaders=true to get the ETag required for 'update-planner-task-details'. This provides clear context for when this tool is useful (before an update). However, it does not explicitly state when not to use it or mention alternatives, but the guidance is still strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-specific-calendar-eventget-specific-calendar-eventA
Read-only

Get a single event from one of the signed-in user's calendars, addressed by calendar ID and event ID. Any calendar can be addressed this way, including the default one.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
timezoneNoIANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC.
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
expandExtendedPropertiesNoWhen true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that it operates on the signed-in user's calendars and works for any calendar, which is useful context, but it does not disclose return format, error behavior, or other side effects. This is acceptable given the read-only annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two crisp sentences: the first states the core action and addressing, the second clarifies default calendar inclusivity. No fluff or redundant details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with a rich schema (9 parameters all described), the description is sufficient to understand the main purpose and scope. It lacks details about return values or error cases, but the absence of an output schema is not a critical gap given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are fully documented in the schema. The description merely reiterates that calendarId and eventId are used for addressing, which adds no new meaning. Baseline of 3 is appropriate as the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get a single event'), a clear resource ('calendar event'), and the addressing method ('by calendar ID and event ID'). It also notes that any calendar, including the default one, can be addressed, which helps distinguish it from simpler event tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (when you have a calendar ID and event ID) and notes that it works for any calendar including the default. However, it does not explicitly contrast with sibling tools like get-calendar-event, leaving some ambiguity about when to choose one over the other.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-specific-calendar-viewget-specific-calendar-viewA
Read-only

List the occurrences, exceptions, and single instances of events over a time range, from one of the signed-in user's calendars addressed by calendar ID.

💡 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. To find Teams meetings, use $select=subject,start,isOnlineMeeting,onlineMeetingProvider,onlineMeeting and keep the events with isOnlineMeeting true and onlineMeetingProvider teamsForBusiness; neither property is filterable (isOnlineMeeting returns 400 ErrorInvalidProperty). Teams meetings expose their join link as onlineMeeting/joinUrl; the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
timezoneNoIANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC.
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
endDateTimeYesThe end date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
startDateTimeYesThe start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
expandExtendedPropertiesNoWhen true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Richly discloses behavior beyond the readOnly/destructive annotations: response contains expanded instances with seriesMasterId and type, isOnlineMeeting/onlineMeetingProvider are not filterable, the event resource has no joinWebUrl property, and fetchAllPages may return enormous payloads. This is exactly the non-obvious behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and every block serves a distinct need, but the Teams-meeting guidance is a dense run-on sentence mixing select fields, filter limitations, URL properties, and cross-tool routing; splitting it would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and a complex 16-parameter surface, the description supplies important response fields and edge behaviors. It does not fully sketch the response shape, but it covers the high-risk recurrence and Teams cases well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is adequate; the description adds value on top by emphasizing that startDateTime/endDateTime are required, explaining non-filterable meeting properties that affect $filter, and recommending fetchAllPages/$select strategies. It does not repeat every schema description but meaningfully supplements the important ones.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific operation (list), resource (occurrences, exceptions, and single instances from one calendar addressed by ID), and time range. The 'not just seriesMaster' note distinguishes it from event-list tools, and the calendar-ID scope separates it from general calendar-view siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames the intended use: expanded recurring-event instances over a date range for a specific calendar, plus a concrete Teams-meeting workflow and fetchAllPages advice. It does not explicitly name alternative tools or when not to use it, but the context is unambiguous enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-subscriptionget-subscriptionA
Read-only

Retrieve the properties and relationships of a subscription. See the table in the Permissions section for the list of resources that support subscribing to change notifications.

💡 TIP: Gets a specific webhook subscription by id. Use list-subscriptions to find the id. Returns full subscription details including resource, changeType, notificationUrl, expirationDateTime, applicationId.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
subscriptionIdYesValue for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true and destructiveHint=false. The description adds return field details (resource, changeType, notificationUrl, expirationDateTime, applicationId) and mentions the Permissions section, enhancing transparency without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two parts: a clear purpose sentence and a useful tip. Front-loaded with key action, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description compensates by listing key return fields. It mentions permissions reference. Could include pagination or error handling, but overall adequate for a simple get tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add parameter-specific details beyond the schema, but the tip lists return fields which provide context for output expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieve the properties and relationships of a subscription' and the tip specifies 'Gets a specific webhook subscription by id'. It distinguishes from sibling list-subscriptions by focusing on a single subscription by id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip advises 'Use list-subscriptions to find the id', providing clear prerequisite guidance. It implicitly indicates when to use this tool (when you have a specific id) but does not explicitly exclude alternatives like create or update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-todo-taskget-todo-taskA
Read-only

Read the properties and relationships of a todoTask object.

💡 TIP: Returns a single To Do task. NOTE: $select is NOT supported — do not pass select parameter, Graph returns RequestBroker--ParseUri (400). Use $expand=linkedResources to include linked email/resource. Returns body content (HTML format), checklist items, and linked resources.

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
todoTaskIdYesValue for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=true), the description discloses that $select is not supported and will cause a 400 error, and recommends $expand=linkedResources. It also mentions the return format (body content, checklist items, linked resources). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with four sentences, front-loaded with the main purpose. The tip and note are well-placed and avoid unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description covers what is returned (body, checklist, linked resources) and warns about unsupported $select. However, it does not address the fetchAllPages parameter contextually for a single-task read, leaving a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with well-described parameters. The description adds value by clarifying that $select is not supported and $expand should be used for linked resources, which enhances parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read the properties and relationships of a todoTask object' with specific verb and resource. It specifies it returns a single task, distinguishing it from list operations like 'list-todo-task-lists'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for usage (reading a single task) and includes a specific tip about $expand and a warning about unsupported $select. However, it does not explicitly compare with alternative tools like 'get-planner-task' or provide when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

graph-batchgraph-batchA
Destructive

Combine up to 20 Graph requests into a single HTTP call. Body: { requests: [{ id: '1', method: 'GET'|'POST'|'PATCH'|'DELETE', url: '/me/messages?$top=5', headers?: {...}, body?: {...}, dependsOn?: ['1'] }, ...] }. Returns { responses: [{ id, status, body, headers }] } in arbitrary order — match by id. Use cases: (1) parallelize many small reads (e.g. fetch 15 mail messages by id in one round-trip); (2) sequence dependent writes via dependsOn; (3) batch many Excel range writes into one call to dramatically reduce latency on large workbook builds. Note: each sub-request URL is relative to the Graph version root (/me/..., /drives/..., NOT https://graph.microsoft.com/v1.0/...).

💡 TIP: Combine up to 20 Graph requests into a single HTTP call. Body: { requests: [{ id: '1', method: 'GET'|'POST'|'PATCH'|'DELETE', url: '/me/messages?$top=5', headers?: {...}, body?: {...}, dependsOn?: ['1'] }, ...] }. Returns { responses: [{ id, status, body, headers }] } in arbitrary order — match by id. Use cases: (1) parallelize many small reads (e.g. fetch 15 mail messages by id in one round-trip); (2) sequence dependent writes via dependsOn; (3) batch many Excel range writes into one call to dramatically reduce latency on large workbook builds. Note: each sub-request URL is relative to the Graph version root (/me/..., /drives/..., NOT https://graph.microsoft.com/v1.0/...).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive hint (destructiveHint=true) and readOnly hint false. The description adds that responses are returned in arbitrary order and must be matched by id, which is useful. However, it does not elaborate on authorization needs or rate limits beyond what annotations provide, supplying only moderate added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is clearly structured and front-loaded with the core purpose. The repeated 'tip' block adds some redundancy but reinforces key information. Overall, it is efficient and well-organized for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, no output schema, and nested objects, the description thoroughly covers return format (responses with id, status, body, headers), arbitrary order, matching by id, URL relativity, and three use cases. It is complete and self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema covers 75% of parameters with descriptions, the 'body' parameter has no schema definition but is richly detailed in the description with examples and structure. The description compensates for schema gaps, adding meaning about the complex body format, depensOn, and headers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool 'Combine up to 20 Graph requests into a single HTTP call' with a specific verb and resource. It clearly differentiates from sibling tools which are individual Graph operations, making its unique batching purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides three concrete use cases (parallelize reads, sequence dependent writes, batch writes) and a critical note about URL relativity. However, it does not explicitly state when not to use it (e.g., for single requests) or compare to alternatives, but the context of siblings implies when batching is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert-excel-rangeinsert-excel-rangeA
Destructive

Insert an Excel range.

💡 TIP: Insert blank cells at the given range, shifting existing content. Body: { shift: 'Down' } or { shift: 'Right' }. Use 'Down' to insert blank rows above existing data.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark the tool as destructive (destructiveHint: true) and not read-only (readOnlyHint: false). The description adds valuable context beyond annotations by specifying that existing content is shifted, which clarifies what the destructive behavior entails. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core action ('Insert an Excel range'). The tip adds necessary usage detail in just two sentences, with no waste. The emoji and tip formatting make the key guidance stand out without increasing length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should cover the core behavior and key parameters, which it does. It explains the essential 'shift' parameter and the overall effect. It does not mention return values or the required path parameters, but those are well-documented in the schema, and the absence of an output schema lowers the expectation for return-value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (88%), so the bar is lowered. However, the body parameter, especially the 'shift' property, lacks a description in the schema. The description compensates by explaining the allowed values ('Down' or 'Right') and their meaning, which is essential for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Insert') and resource ('Excel range'), then clarifies the exact behavior ('Insert blank cells at the given range, shifting existing content'). This distinguishes it from sibling tools like update-excel-range, delete-excel-range, and clear-excel-range, which have different verbs and behaviors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on how to use the tool by explaining the shift parameter ('Body: { shift: 'Down' } or { shift: 'Right' }') and its practical effect ('Use 'Down' to insert blank rows above existing data'). It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to decide when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-accountsA
Read-only

List all Microsoft accounts configured in this server. Use this to discover available account emails before making tool calls. Reflects accounts added mid-session via --login.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description complements the readOnlyHint annotation by stating that the tool lists all accounts and reflects accounts added mid-session via --login. This provides additional behavioral context beyond the annotation, such as dynamic account updates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. It is front-loaded with the main purpose and includes essential usage guidance. No redundant or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description is complete. It covers what the tool does, when to use it, and a key behavioral detail about mid-session additions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema is fully covered. The description adds value by explaining the output (account emails) and the purpose, which is useful for an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists all Microsoft accounts configured in the server. It specifies the resource (accounts) and the action (list). It distinguishes itself from sibling tools like login, logout, select-account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using this tool to discover available account emails before making tool calls, providing clear usage context. It also notes that it reflects accounts added mid-session, but does not explicitly mention when not to use or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-all-onenote-sectionslist-all-onenote-sectionsA
Read-only

Retrieve a list of onenoteSection objects.

💡 TIP: Lists all sections across all notebooks. Use list-onenote-notebook-sections to list sections within a specific notebook instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description's addition of scope (all notebooks) adds some behavioral context. However, no other behavioral details (e.g., pagination, rate limits) are provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: purpose and a helpful tip. No unnecessary words, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema, the description covers the return type and scope. However, it lacks details like default ordering or pagination hints, but the schema fills some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 11 parameters have full descriptions in the schema (100% coverage), so baseline is 3. The description adds no additional parameter-specific meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves a list of onenoteSection objects across all notebooks. It distinguishes from sibling 'list-onenote-notebook-sections' by specifying the scope (all notebooks vs. specific notebook).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use this tool (list all sections) and points to an alternative for notebook-specific listing. No additional usage exclusions are needed for a simple list tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-calendar-event-instanceslist-calendar-event-instancesA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
timezoneNoIANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC.
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
endDateTimeYesThe end date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
startDateTimeYesThe start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
expandExtendedPropertiesNoWhen true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations by explaining that the property includes occurrences that are part of the recurrence pattern and exceptions, but excludes canceled occurrences. It also confirms read-only behavior, aligning with annotations. This helps the agent understand the data scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise, with a clear tip at the start using a symbol. The first sentence is somewhat technical but informative. Overall, it is well-structured and front-loaded, with no unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (17 parameters, no output schema), the description is adequate but incomplete. It explains the input requirements but does not describe the response format (e.g., list of event instances). An agent might need to infer the output from the tool's purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% parameter schema coverage, the baseline is 3. The description does not add significant new meaning beyond the schema; the tip mentions start and end date format, which is already covered in the schema descriptions. Thus, no extra value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists occurrences of a recurring calendar event within a date range. It specifies that it is a navigation property and read-only. However, it does not explicitly differentiate this tool from similar calendar tools like list-calendar-events or get-calendar-event, which could confuse selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a tip that requires startDateTime and endDateTime in ISO 8601 format, providing essential usage guidance. However, it does not specify when to prefer this tool over alternatives (e.g., for non-recurring events), nor does it mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-calendar-eventslist-calendar-eventsA
Read-only

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:

💡 TIP: WARNING: Does NOT expand recurring events — only returns seriesMaster. Use get-calendar-view instead to see individual occurrences within a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
timezoneNoIANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
expandExtendedPropertiesNoWhen true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavioral details beyond annotations: returns only HTML format, does not expand recurring events, can get events from another user's calendar. No contradiction with readOnlyHint or destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat verbose with repetition (e.g., 'single instance meetings and series masters' vs 'only returns seriesMaster'). Could be more concise, though front-loaded with key info.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 13 parameters and no output schema, the description covers the core behavior and limitation well, but could benefit from mentioning return structure or pagination hints already present in parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description does not add extra parameter meaning beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists event objects in the user's mailbox, distinguishing from expanded instances by mentioning calendar view and event instances. The tip explicitly warns about recurrence handling and suggests an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use (listing events) and when not to (need expanded instances), with specific alternatives like get-calendar-view and get event instances. The warning is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-calendar-events-deltalist-calendar-events-deltaA
Read-only

Get a set of event resources that have been added, deleted, or updated in a calendarView (a range of events defined by start and end dates) of the user's primary calendar. Typically, synchronizing events in a calendarView in a local store entails a round of multiple delta function calls. The initial call is a full synchronization, and every subsequent delta call in the same round gets the incremental changes (additions, deletions, or updates). This allows you to maintain and synchronize a local store of events in the specified calendarView, without having to fetch all the events of that calendar from the server every time.

💡 TIP: Incremental sync of events across the default calendar. First call returns all events plus @odata.deltaLink. Subsequent calls with that link return only additions/updates/removals. Use $select to limit fields. Deltas expire after ~30 days — start over if the server returns 410 Gone. For a time-bounded view with delta semantics, use list-calendar-view-delta instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
endDateTimeYesThe end date and time of the time range in the function, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
startDateTimeYesThe start date and time of the time range in the function, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint and destructiveHint annotations, the description explains the delta behavior (additions, deletions, updates) and expiration, adding valuable context without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a tip section and front-loaded purpose, though somewhat lengthy; each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (delta sync, 12 params, no output schema), the description covers the mechanism, usage pattern, and alternatives adequately, though return format is not detailed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description only minimally adds to parameter meaning (e.g., suggesting $select to limit fields), not significantly exceeding schema explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets event resources added, deleted, or updated in a calendarView of the primary calendar, distinguishing it from sibling tools like list-calendar-events and list-calendar-view-delta.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip explains the incremental sync pattern, deltaLink usage, delta expiry after ~30 days, fallback on 410 Gone, and recommends list-calendar-view-delta for time-bounded views with delta semantics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-calendarslist-calendarsC
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's main behavioral contribution is noting the ability to retrieve calendars from the default or a specific group. This adds some context but does not disclose additional traits like pagination behavior or auth scope beyond what is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence but somewhat repetitive ('Get all the user's calendars..., get the calendars...'). It is not overly long, but could be more concise by avoiding the repeated structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is brief and lacks details about the return format, typical usage patterns, or how to handle pagination. Despite the schema covering parameters, a user would benefit from knowing what information is returned per calendar (e.g., id, name, color). The tool has 11 parameters and no output schema, so more context is expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds no information about parameters. All parameter documentation is in the schema, so the description provides no additional value for understanding parameters. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves calendars, specifying both from the default group and specific groups. It uses a specific verb ('Get') and resource ('user's calendars'), but does not explicitly differentiate from related tools like 'get-calendar' or 'list-specific-calendar-events', though the resource type is distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It does not mention when to choose this over other calendar listing tools (e.g., for specific groups vs. default), nor does it provide context about prerequisites or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-calendar-view-deltalist-calendar-view-deltaA
Read-only

Get a set of event resources that have been added, deleted, or updated in a calendarView (a range of events defined by start and end dates) of the user's primary calendar. Typically, synchronizing events in a calendarView in a local store entails a round of multiple delta function calls. The initial call is a full synchronization, and every subsequent delta call in the same round gets the incremental changes (additions, deletions, or updates). This allows you to maintain and synchronize a local store of events in the specified calendarView, without having to fetch all the events of that calendar from the server every time.

💡 TIP: Incremental sync of events within a time window. Required query params on first call: startDateTime, endDateTime (ISO 8601). Returns events in the window plus @odata.deltaLink; subsequent calls with that link return only changes. Expands recurring events to individual occurrences (unlike list-calendar-events-delta which returns the series master). Use this for calendar UIs showing a week/month view.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
endDateTimeYesThe end date and time of the time range in the function, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
startDateTimeYesThe start date and time of the time range in the function, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds significant behavioral context beyond annotations: it discloses that expanding recurring events to occurrences, returns deltaLink, and works on primary calendar. No contradictions with readOnlyHint and destructiveHint annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with a clear first sentence and a tip section. Informative but could be slightly more concise; however, every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key aspects: initial params, deltaLink, recurring expansion, use case, and fetchAllPages behavior. No output schema but adequately describes return value (events + deltaLink).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds value by explaining the process for required start/end date parameters and the role of deltaLink, which goes beyond individual parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool gets added/deleted/updated events in a calendarView of the primary calendar. Differentiates from sibling list-calendar-events-delta by noting it expands recurring events to individual occurrences.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the delta sync process: initial call with start/end dates, subsequent calls with deltaLink. Provides tip for incremental sync within time window and recommends use for calendar UIs showing week/month views. Contrasts with alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-contact-folder-child-folderslist-contact-folder-child-foldersA
Read-only

Get a collection of child folders under the specified contact folder.

💡 TIP: Lists immediate sub-folders under a given contact folder. Returns id, displayName, parentFolderId. Use list-contact-folders to discover top-level folders, then this tool to traverse one level deeper. Supports $filter, $top, $orderby. Note: contact folders are typically a flat list in Outlook clients, but Graph allows nesting via this endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
contactFolderIdYesValue for the 'contactFolderId' path segment. Pass it under the name 'contactFolderId', not as 'id'. Use the 'id' field of the contact folder object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety profile is clear. The description adds behavioral details such as supported OData parameters ($filter, $top, $orderby) and pagination, but does not cover all edge cases or error conditions. Still, it provides good transparency beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise at four sentences, with a clear structure: core purpose, TIP about usage, and supported features. It is front-loaded but could be slightly tighter by removing redundant phrases like 'under the specified contact folder' (implied by tool name). Still effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (12 parameters, no output schema), the description covers the main purpose, differentiation from siblings, and key supported features. It could be improved by briefly noting that the response is a list of folder objects or mentioning pagination via @odata.nextLink, but overall it is adequate for an AI agent to understand when and how to use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all 12 parameters described in the input schema. The description does not add significant meaning beyond the schema, referencing OData parameters generally but not explaining each parameter in detail. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves child folders under a specified contact folder, specifying returned fields (id, displayName, parentFolderId). It differentiates from sibling tools like list-contact-folders by explaining that this tool goes one level deeper.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The TIP explicitly instructs when to use list-contact-folders for top-level folders and this tool for deeper traversal. It notes that contact folders are typically flat in Outlook but Graph allows nesting, providing practical usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-contact-folder-contactslist-contact-folder-contactsA
Read-only

Get a contact collection from the default Contacts folder of the signed-in user (.../me/contacts), or from the specified contact folder.

💡 TIP: Lists contacts inside a specific folder. Pair with list-contact-folders to discover the folder id. Note: the existing list-outlook-contacts (GET /me/contacts) only returns contacts from the default folder — use this tool to read contacts from any folder. Supports $filter, $search='query', $orderby, $top, $select.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
contactFolderIdYesValue for the 'contactFolderId' path segment. Pass it under the name 'contactFolderId', not as 'id'. Use the 'id' field of the contact folder object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context about folder selection but does not disclose additional behavioral traits beyond what annotations and schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences and a tip, front-loading the main purpose. Every sentence adds value with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema covering parameters, the description is adequate: it identifies scope, distinguishes from siblings, and lists OData supports. However, it lacks explicit mention of return structure or pagination, which the schema partially covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The description does not add new meaning to parameters beyond listing supported OData features, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it gets contacts from a default or specified folder, and explicitly distinguishes itself from the sibling tool list-outlook-contacts, which only returns contacts from the default folder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit guidance to pair with list-contact-folders to get the folder ID, contrasts with list-outlook-contacts for default folder, and lists supported OData parameters, indicating when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-contact-folderslist-contact-foldersA
Read-only

Get the contact folder collection in the default Contacts folder of the signed-in user.

💡 TIP: Lists the user's Outlook contact folders (the named buckets that organize contacts). Always includes the built-in 'Contacts' folder; user-created folders also appear. Returns id, displayName, and parentFolderId. To identify the default folder, match displayName === 'Contacts'. Use this before list-contact-folder-contacts or create-contact-in-folder to discover folder ids. Supports OData query parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate read-only and non-destructive. The description adds value by explaining that the response includes id, displayName, and parentFolderId, and that OData query parameters are supported. It also notes that the built-in 'Contacts' folder is always returned, which is helpful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a clear main sentence followed by a helpful tip section. It is front-loaded with the primary purpose and avoids verbosity, though it could potentially be slightly shorter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately specifies the returned fields and mentions OData support. It provides sufficient context for an agent to understand the tool's output and usage, though additional details about pagination behavior could be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, so the baseline is 3. The description mentions OData query parameters in a tip but does not provide detailed semantic meaning beyond what the schema already offers. It adds minimal extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the contact folder collection from the default Contacts folder of the signed-in user. It specifies returned fields (id, displayName, parentFolderId) and distinguishes from sibling tools like list-contact-folder-contacts and create-contact-in-folder by noting that this tool is used to discover folder IDs before using those.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using this tool before list-contact-folder-contacts or create-contact-in-folder to obtain folder IDs. It also notes the built-in 'Contacts' folder is always included. However, it does not explicitly state when not to use this tool, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-drive-item-permissionslist-drive-item-permissionsA
Read-only

The set of permissions for the item. Read-only. Nullable.

💡 TIP: Lists all permissions (sharing links, direct access, inherited) on a file or folder. Each permission has roles, grantedTo (user), link (sharing URL), and inheritedFrom.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that the property is nullable and explains the content of permissions (roles, grantedTo, link, inheritedFrom), providing useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one sentence stating purpose plus a tip explaining return content. No redundant words, front-loaded with key action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the return content (roles, grantedTo, link, inheritedFrom) but does not mention pagination or that it returns a collection. Given the tool's simplicity and annotations, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all 13 parameters are well-documented in the schema. The description does not add parameter-level insights beyond the schema, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Lists' and resource 'permissions on a file or folder'. It specifies the scope (sharing links, direct access, inherited) and distinguishes from sibling tools like delete-drive-item-permission or create-drive-item-share-link.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives. The description implies a read-only use case but does not state when not to use or mention related tools like delete-drive-item-permission for modifications.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-drive-item-thumbnailslist-drive-item-thumbnailsA
Read-only

Collection of thumbnailSet objects associated with the item. For more information, see getting thumbnails. Read-only. Nullable.

💡 TIP: Lists thumbnail sets for a file. Each set contains small (96px), medium (176px), large (800px) thumbnails with url and dimensions. Returns empty for unsupported types (text docs). Use $select=small,medium,large or $expand=small($select=url) to fetch specific sizes. The returned URLs are short-lived — fetch the bytes immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds behavioral context: returns empty for unsupported types, short-lived URLs, and the specific sizes and dimensions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a main line and a clear tip section. It is concise but could be slightly trimmed without losing value. Front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains the response structure (sizes, URLs, dimensions) and behaviors (empty for unsupported types, short-lived URLs). Pagination is covered by schema params. Lacks mention of potential pagination of thumbnail sets themselves.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds minimal value beyond what the schema already provides for parameters. The general advice on $select and $expand is helpful but not parameter-specific.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists thumbnailSet objects for a file, specifies the three sizes (96px, 176px, 800px) with url and dimensions, and distinguishes itself from other drive tools by focusing solely on thumbnails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context on when to use the tool (to retrieve thumbnails) and includes tips on using $select and $expand, as well as noting unsupported types. However, it does not explicitly mention when to prefer alternatives among sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-drive-item-versionslist-drive-item-versionsC
Read-only

The list of previous versions of the item. For more info, see getting previous versions. Read-only. Nullable.

💡 TIP: Lists version history of a file. Each version has id, lastModifiedDateTime, lastModifiedBy, and size. Use the version id with /versions/{id}/content to download a specific version.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds that it is 'Read-only. Nullable' and details each version's fields (id, lastModifiedDateTime, etc.), which is beyond the annotations (readOnlyHint true). However, it does not disclose other behavioral traits like empty responses or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise but contains some redundancy (e.g., 'Read-only. Nullable.' from original API). The structure is acceptable but could be more streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 13 parameters and no output schema, the description falls short. It lacks information about response format (beyond fields), pagination, common use cases, and error conditions. Incomplete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does not add parameter meaning beyond the schema. The tip about version fields pertains to output, not parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists previous versions of an item. Verb 'list' and resource 'versions of the item' are unambiguous. However, it does not explicitly distinguish from sibling tools, but the uniqueness of version listing versus other drive operations is inherent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The tip only suggests a follow-up action (downloading a version) but does not explain prerequisites or context for invoking the tool itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-driveslist-drivesB
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read operation. The description adds no additional behavioral context such as pagination behavior or response structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that states the purpose. It is front-loaded but could benefit from additional context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, no output schema, and many sibling tools, the description is too sparse. It does not explain how to specify the target (User, Group, Site) or what the response contains, leaving the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described. The description adds no further meaning beyond what the schema provides, meeting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the verb 'retrieve' and resource 'list of Drive resources', and mentions target scope (User, Group, Site). However, it does not differentiate from sibling tools like 'get-drive-root-item' or 'list-folder-files' which also list items within drives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as 'list-folder-files' or 'search-onedrive-files'. There is no mention of prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-excel-table-rowslist-excel-table-rowsA
Read-only

The list of all the rows in the table. Read-only.

💡 TIP: Lists all rows in a table. Each row has index and values (array of cell values). Use $top and $skip for pagination on large tables.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookTableIdYesValue for the 'workbookTableId' path segment. Pass it under the name 'workbookTableId', not as 'id'. Use the 'id' field of the workbook table object as returned by Microsoft Graph.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description confirms read-only behavior, matching the readOnlyHint annotation. It adds context that rows have index and values, and mentions pagination. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence and a tip. No filler, front-loaded with key information. Every word is earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 14 parameters and no output schema, the description is brief but the schema parameters are thoroughly documented. The description could explain return value structure more, but the tip provides enough context for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. The description does not add significant parameter semantics beyond the schema; the tip briefly mentions $top and $skip but adds little new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists all rows in a table and is read-only, distinguishing it from sibling tools like add-excel-table-rows or update-excel-table-row. The verb 'list' and resource 'excel-table-rows' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip provides guidance on pagination with $top and $skip, but does not explicitly state when to use this tool versus alternatives (e.g., get-excel-range for a specific range). However, the schema parameter descriptions offer additional usage hints like starting with small $top.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-excel-tableslist-excel-tablesA
Read-only

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

💡 TIP: Lists all named tables in a workbook. Each table has id, name, showHeaders, showTotals, columns, and style. Use the table name or id with other table endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint, and the description adds 'Read-only' and details the returned table properties. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences plus a tip, front-loading the purpose with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description mentions the key properties of tables but could be more explicit about the required parameters and pagination behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description does not add further parameter-level meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Lists all named tables in a workbook' and specifies the properties returned. It distinguishes itself from sibling tools like list-excel-worksheets and get-excel-table.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating it lists tables and hints at using table names with other endpoints, but does not explicitly compare to alternatives or state when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-excel-worksheetslist-excel-worksheetsC
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only repeats 'Read-only', which is already indicated by readOnlyHint=true. It adds no new behavioral context such as error handling, authentication, or response structure beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one sentence), which is concise. However, it could include more useful information without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (13 parameters, no output schema), the description is too minimal. It does not explain what worksheets are included, how results are structured, or any pagination or error handling. More detail is needed for an AI agent to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description adds no additional parameter meaning beyond what is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it represents a collection of worksheets, which implies listing. The name 'list-excel-worksheets' makes the purpose clear, and it is distinguishable from sibling tools like 'list-excel-tables'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as 'list-excel-tables' or other Excel tools. The description does not mention prerequisites or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-focused-inbox-overrideslist-focused-inbox-overridesA
Read-only

Get the overrides that a user has set up to always classify messages from certain senders in specific ways. Each override corresponds to an SMTP address of a sender. Initially, a user doesn't have any overrides.

💡 TIP: Lists Focused Inbox classification overrides — explicit rules that force messages from a given sender (by SMTP address) into either the Focused or Other tab, regardless of what the Outlook ML classifier would predict. Each override has id, classifyAs ('focused' or 'other'), and senderEmailAddress {name, address}. Returns an empty collection if the user has never set an override.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false, and the description adds value by explaining that an empty collection is returned if no overrides exist, and details the override structure. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loads the purpose, and uses a tip to highlight key details. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description fully explains the return structure (id, classifyAs, senderEmailAddress) and notes pagination by mentioning initial empty state. It is complete for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description need not add parameter details. The description does not provide additional semantics beyond what the schema already conveys, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves overrides that classify messages from specific senders, and distinguishes from sibling tools like create/update/delete-focused-inbox-override. It also details the structure of each override (id, classifyAs, senderEmailAddress).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but does not explicitly advise when to use it versus alternatives like search or other list tools. It provides clear context but lacks exclusions or comparative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-folder-fileslist-folder-filesB
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint true and destructiveHint false. The description adds the condition about folder/package facet, which is useful context. However, it does not disclose pagination behavior or response size limits, though the schema detail covers pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. Front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 13 parameters and paging complexity, the description is too minimal. It doesn't explain the response structure, error handling, or that it returns an OData collection. Open world hint implies variability, but more context on usage patterns would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The tool description does not add parameter-level meaning beyond the schema. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns child DriveItems from a folder/package. It specifies the resource (DriveItem children) and the condition (non-null folder or package facet). It distinguishes from similar siblings like get-drive-item (single item) and list-drive-item-versions, though not explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like search-onedrive-files or get-drive-delta. The description doesn't mention prerequisites or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-mail-attachmentslist-mail-attachmentsA
Read-only

Retrieve a list of attachment objects.

💡 TIP: Lists attachments on a message: id, name, contentType, size, isInline. To download the bytes, call download-bytes with target=/me/messages/{message-id}/attachments/{attachment-id}/$value (the /$value suffix returns raw bytes; the bare attachment URL embeds contentBytes in JSON which can truncate large files).

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds value by explaining that listing returns metadata while downloading requires a different endpoint. No mention of rate limits or auth beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is extremely concise: one sentence for purpose plus a short tip. No fluff, front-loaded, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with good annotations and full parameter documentation, the description is mostly complete. It lists return fields and covers pagination hints in the schema. Minor gap: does not explicitly state that response includes nextLink for pagination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does not add additional meaning beyond the schema's parameter descriptions; it only includes a tip about downloading.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Title and description clearly state 'Retrieve a list of attachment objects' and list specific fields returned (id, name, contentType, size, isInline). Distinguishes from sibling 'download-bytes' by noting how to download raw bytes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description includes a tip directing to 'download-bytes' for downloading content, providing usage context. However, it does not explicitly state when to use this tool vs other attachment operations like add or delete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-mail-child-folderslist-mail-child-foldersA
Read-only

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 doesn't return hidden folders. Use a query parameter includeHiddenFolders to include them in the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
includeHiddenFoldersNoInclude Hidden Folders

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds value beyond annotations by noting default behavior (hidden folders excluded) and a parameter to include them. No contradictions with readOnlyHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action. No redundant or extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Describes the operation's input but does not specify the response format or fields. With no output schema, more detail on what the 'folder collection' contains would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The main description only adds context about includeHiddenFolders. Baseline 3 applies as schema already covers semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Get the folder collection under the specified folder,' explicitly identifying the verb and resource. Mentions the shortcut for top-level folders, distinguishing itself from sibling list-mail-folders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage (child folders vs. top-level via shortcut) but no explicit when-not or alternative tools. Lacks explicit guidance on when to prefer this over list-mail-folders or list-mail-folder-messages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-mail-folder-messageslist-mail-folder-messagesA
Read-only

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

💡 TIP: List read search Outlook emails within a specific mail folder. 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 IMPORTANT: Always use $select to limit returned fields and reduce response size. Recommended default: $select=id,subject,from,toRecipients,receivedDateTime,bodyPreview,isRead,hasAttachments. Use bodyPreview instead of body for listings. To read the full email body, use get-mail-message with the specific message id.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds behavioral context: it warns about large payloads with fetchAllPages, explains that $search cannot combine with $filter, and recommends $select to limit fields. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but well-structured with clear sections: main purpose, critical formatting for $search, and usage recommendations. Every sentence is informative, though some repetition could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains pagination via @odata.nextLink, filtering limitations, and return size reduction tips. It covers all essential aspects a developer needs to list messages effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description enriches parameters like $search with concrete double-quote wrapping and KQL examples, and gives advanced usage tips for $top, $count, and fetchAllPages. This adds meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves messages from a user's mailbox or a specific folder. It distinguishes from siblings like list-mail-messages (which lists all messages without folder scope) and list-mail-folder-messages-delta, making the purpose precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides extensive guidance on when to use $search, $select, fetchAllPages, and pagination. It includes critical syntax for KQL search. However, it does not explicitly state when not to use this tool compared to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-mail-folder-messages-deltalist-mail-folder-messages-deltaA
Read-only

Get a set of messages added, deleted, or updated in a specified folder. A delta function call for messages in a folder is similar to a GET request, except that by appropriately applying state tokens in one or more of these calls, you can query for incremental changes in the messages in that folder. It allows you to maintain and synchronize a local store of a user's messages without having to fetch the entire set of messages from the server every time.

💡 TIP: Incremental sync of messages within a mail folder. Graph only supports delta scoped to a folder — use mailFolder-id = 'inbox' for the well-known inbox, or another folder id from list-mail-folders. First call returns all messages plus @odata.deltaLink; subsequent calls with that link return only changes (created/updated/deleted). @odata.nextLink paginates within a single delta window. Deltas expire after ~30 days of inactivity — start over if the server returns 410. Prefer this over full re-list for polling.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
changeTypeNoA custom query option to filter the delta response based on the type of change. Supported values are created, updated or deleted.
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses numerous behavioral traits beyond annotations: state tokens, delta links, expiration after ~30 days, pagination, and error handling (410). No contradictions with readOnlyHint=true and destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with a clear purpose, technical details, then a tip block. First paragraph is somewhat verbose but necessary to explain the delta concept. Every sentence adds value, and structure aids readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete given complexity: explains token flow, pagination, expiration, error handling, and parameter nuances. No output schema but description covers key response elements (deltaLink, nextLink). Sufficient for correct agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant meaning beyond input schema: explains $top size guidelines, $count requirement for advanced filters, $expand limitations (only navigation properties, unsupported values ignored), changeType usage, and warnings. Schema coverage is 100% but description enriches each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool gets messages added, deleted, or updated in a specified folder. Distinguishes from sibling list-mail-folder-messages by emphasizing delta/incremental changes. The tip reinforces its purpose for incremental sync.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly guides when to use: for incremental sync instead of full re-list. Mentions token-based flow, first call vs subsequent calls, and handling of 410 (start over). Provides clear context about pagination and delta links.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-mail-folderslist-mail-foldersA
Read-only

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 doesn't return hidden folders. Use a query parameter includeHiddenFolders to include them in the response. This operation doesn't 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
includeHiddenFoldersNoInclude Hidden Folders

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate read-only and non-destructive behavior. The description adds behavioral details such as the default exclusion of hidden folders and the limitation to root children, which goes beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with four sentences, each adding distinct information. It is front-loaded with the core purpose and avoids redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description clarifies the return structure (collection under root, includes search folders, excludes hidden). Parameters are well-documented in the schema, covering pagination and filtering context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter has a description. The tool description adds only minor context (mentioning includeHiddenFolders), so it meets the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves mail folders directly under the root folder, includes search folders by default, and excludes hidden folders. This specificity distinguishes it from siblings like list-mail-child-folders which operate on an arbitrary parent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use includeHiddenFolders and notes that this operation does not return all folders, requiring traversal for full mailbox. However, it does not directly contrast with similar siblings like list-mail-child-folders or list-mail-folder-messages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-mail-messageslist-mail-messagesA
Read-only

List, search, and filter Outlook email messages in the signed-in user's mailbox across all folders. Returns message metadata (subject, from, receivedDateTime, isRead, hasAttachments) plus a body preview. Use $search for keyword queries, $filter to narrow by sender/read state/date, $top to limit page size, and $select to trim fields.

💡 TIP: List read search my Outlook emails across folders. 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 IMPORTANT: Always use $select to limit returned fields and reduce response size. Recommended default: $select=id,subject,from,toRecipients,receivedDateTime,bodyPreview,isRead,hasAttachments. Use bodyPreview instead of body for listings. To read the full email body, use get-mail-message with the specific message id.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
includeHiddenMessagesNoInclude Hidden Messages

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint, openWorldHint, destructiveHint) are complemented by detailed behavioral context: explains that $search and $filter cannot be combined, describes the body preview vs full body, and clarifies pagination behavior with @odata.nextLink. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections, bullet points, and examples. Front-loaded with main function, then tips and critical notes. Every sentence provides value; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 12 parameters and no output schema, the description is thorough: covers parameter interdependencies, best practices, common pitfalls, and references to sibling tools. Includes URL for further reference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description adds significant value beyond schema: provides KQL syntax examples, explains when to set $count=true for advanced filters, and gives formatting rules for $search (double quotes).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists, searches, and filters Outlook email messages across all folders. It distinguishes itself from sibling tools like get-mail-message (full body retrieval) and list-mail-folder-messages (folder-specific), using specific verbs and resource scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: recommends $select to limit fields, explains when to use $search vs $filter, advises on pagination (small $top, then @odata.nextLink), and warns about fetchAllPages payload size. Includes critical formatting tips for $search and references to sibling tool get-mail-message.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-mail-ruleslist-mail-rulesA
Read-only

Get all the messageRule objects defined for the user's inbox.

💡 TIP: Lists all message rules for a mail folder. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules. Each rule has displayName, sequence, isEnabled, conditions (fromAddresses, subjectContains, etc.), actions (moveToFolder, forwardTo, delete, etc.), and exceptions.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only and non-destructive. The description adds value by enumerating the fields present in a rule (displayName, sequence, isEnabled, etc.), but does not disclose other behavioral aspects like pagination or potential size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence and a short tip. Every sentence serves a purpose without redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While there is no output schema, the description partially compensates by listing the fields included in the returned rule objects. It provides enough context for a list operation, though it could mention that the result is an array.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 12 parameters are already well-documented in the schema. The description adds minimal extra meaning beyond the tip about using the Inbox folder ID for the mailFolderId parameter, which is also covered in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves all messageRule objects for a user's inbox. The tip specifies it lists rules for a mail folder, distinguishing it from sibling tools like create-mail-rule, update-mail-rule, and delete-mail-rule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a helpful tip on using the Inbox folder ID obtained from list-mail-folders, giving clear context for typical usage. It does not explicitly state when not to use the tool, but the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-my-calendar-permissionslist-my-calendar-permissionsA
Read-only

The permissions of the users with whom the calendar is shared.

💡 TIP: Lists share recipients and delegates on the user's primary calendar. Returns calendarPermission objects with id, role ('none' | 'freeBusyRead' | 'limitedRead' | 'read' | 'write' | 'delegateWithoutPrivateEventAccess' | 'delegateWithPrivateEventAccess' | 'custom'), emailAddress { name, address }, isInsideOrganization, isRemovable, allowedRoles. Returns an empty collection when called by a delegate or share recipient (only the calendar owner sees the full list). For a non-primary calendar, use /me/calendars/{calendar-id}/calendarPermissions — not currently exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate read-only and non-destructive. Description adds that delegates/share recipients get empty response, which is critical behavioral info. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is front-loaded with main purpose and includes a tip. Slightly verbose but each sentence adds value (e.g., empty collection note, object structure). Efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so description must explain return values. It details object fields and notes empty response case. For 11 parameters and no output schema, it provides sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description does not add extra semantic meaning beyond the schema, so baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists permissions of users with whom the calendar is shared. It differentiates from sibling tools like create/update/delete calendar permission and specifies it returns calendarPermission objects with detailed fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes guidance that it works on primary calendar, returns empty for delegates/share recipients, and mentions non-primary calendar is not exposed. Lacks explicit alternative tool names but provides clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-onenote-notebookslist-onenote-notebooksB
Read-only

Retrieve a list of notebook objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating safe read behavior. The description adds no additional behavioral context (e.g., pagination handling, result size limits) beyond what the annotations and schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, but given 11 parameters and a complex API, it is overly minimal. It lacks structure or front-loading of key information, though it has no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite high schema coverage, the description fails to provide complete context for usage. It does not mention output format, typical use cases, or how to effectively combine parameters, leaving the agent to infer from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter thoroughly described in the schema. The tool description does not add any parameter-level details beyond the schema, so it meets the baseline but does not excel.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve') and the resource ('list of notebook objects'), making the purpose unambiguous. It distinguishes from sibling tools by specifying notebooks, which is a specific OneNote resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives (e.g., list-onenote-sections, list-onenote-pages). No exclusions or context for usage are mentioned, leaving the agent without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-onenote-notebook-sectionslist-onenote-notebook-sectionsB
Read-only

Retrieve a list of onenoteSection objects from the specified notebook.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
notebookIdYesValue for the 'notebookId' path segment. Pass it under the name 'notebookId', not as 'id'. Use the 'id' field of the notebook object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description merely restates the read-only nature (already indicated by annotations) without adding behavioral insights like pagination behavior, potential data volume, or any side effects. The parameter schema covers pagination details, but the description itself adds minimal value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently captures the tool's purpose with no unnecessary words or fluff. It is well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity of the tool (list operation with many optional parameters) and the absence of an output schema, the combination of a concise description and thorough parameter schema provides adequate context. However, a note about typical return structure or nextLink handling would increase completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all 12 parameters, so the schema already provides full meaning for each parameter. The description does not add further semantics; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve a list'), the resource ('onenoteSection objects'), and the scope ('from the specified notebook'). This distinguishes it from sibling tools like 'list-all-onenote-sections' (all sections across notebooks) and 'list-onenote-section-pages' (pages within a section).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as 'list-all-onenote-sections' or 'list-onenote-section-pages'. The description does not mention prerequisites, common use cases, or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-onenote-pageslist-onenote-pagesA
Read-only

Retrieve a list of page objects.

💡 TIP: Lists all OneNote pages across every notebook and section the user has access to — transverse alternative to walking notebooks → sections → pages. Default returns top 20 ordered by lastModifiedTime desc. Supports $filter (e.g. lastModifiedTime gt 2026-01-01, or contains(tolower(title), 'topic') for title search), $top (max 100), $select, and $expand=parentNotebook,parentSection. Use this instead of bouncing through list-onenote-notebooks / list-all-onenote-sections / list-onenote-section-pages when you have a topic in mind.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true and destructiveHint=false; description adds the transverse nature, default ordering, and OData support. No contradictions. Adds useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is brief yet packed with valuable information. Front-loaded with purpose, then tips, examples, and comparisons. Every sentence earns its place with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters, no output schema), the description covers purpose, default behavior, OData capabilities, and pagination. It does not detail the response structure, but that is somewhat mitigated by the 'list of page objects' notion and the mention of @odata.nextLink. Adequately complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds practical usage tips (e.g., start small $top, use $select to reduce fields, pagination via @odata.nextLink) and clearly explains OData parameters $filter and $expand, which enhances the semantic understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves a list of page objects across all notebooks/sections. It uses a specific verb+resource and distinguishes from siblings by positioning itself as a transverse alternative to walking the notebook hierarchy, naming sibling tools list-onenote-notebooks, list-all-onenote-sections, and list-onenote-section-pages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use: 'Use this instead of bouncing through... when you have a topic in mind.' Provides tips on default ordering and supported OData queries. Does not explicitly list exclusions but gives sufficient context for appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-onenote-section-groupslist-onenote-section-groupsA
Read-only

Retrieve a list of sectionGroup objects.

💡 TIP: Lists all OneNote section groups (subfolders inside notebooks that contain their own sections and nested section groups) for the user. A section group is a folder-like container — many notebooks use them to organize sections by theme. Default sort is name asc. Supports $expand=sections,sectionGroups,parentNotebook,parentSectionGroup to traverse the full hierarchy. Pair with list-onenote-notebooks for a complete picture of the user's notebook structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds context about default sort and expand capabilities but does not go beyond what annotations and schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative but a bit verbose with the tip and explanation. It front-loads the main purpose but could be more concise by removing redundant phrases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the high parameter count and good schema coverage, the description provides sufficient context: purpose, default sort, expand options, and a relationship to a sibling tool. No output schema exists, but the description covers the key aspects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description mentions expand with specific property names (sections, sectionGroups, etc.) but this is already detailed in the schema. No significant additional parameter meaning is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Retrieve a list of sectionGroup objects' and explains what a section group is. It distinguishes from sibling tools by mentioning pairing with list-onenote-notebooks for a complete picture of the notebook structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a tip that this tool lists all OneNote section groups for the user, and explicitly recommends pairing with list-onenote-notebooks. It implies usage context but does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-onenote-section-pageslist-onenote-section-pagesA
Read-only

Retrieve a list of page objects from the specified section.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
onenoteSectionIdYesValue for the 'onenoteSectionId' path segment. Pass it under the name 'onenoteSectionId', not as 'id'. Use the 'id' field of the onenote section object as returned by Microsoft Graph.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds no behavioral details beyond 'retrieve', which is consistent with annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence of 12 words with no wasted words. It efficiently conveys the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (12 parameters, 1 required, no output schema), the description is minimal. While the schema descriptions are comprehensive, the overall description does not summarize key capabilities like pagination, filtering, or response format, which could help the agent quickly grasp the tool's full capability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with detailed parameter descriptions. The tool description adds no additional meaning beyond what the schema provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve'), the resource ('a list of page objects'), and the scope ('from the specified section'). It distinguishes itself from sibling tools like 'create-onenote-section-page' (creation) and 'list-onenote-pages' (potentially all pages).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives (e.g., list-onenote-pages). The tool name and context imply it is for pages within a specific section, but no when-not or alternative conditions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-outlook-categorieslist-outlook-categoriesB
Read-only

Get all the categories that have been defined for a user.

💡 TIP: Lists the user's Outlook categories (colored labels) used to tag messages, events, contacts, and tasks. Each category has displayName and color (preset0 through preset24, or 'none'). Use this to show available tags before applying via update-mail-message or update-calendar-event with body { categories: ['Category Name'] }.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description adds value by explaining the category structure (displayName, color range), but does not disclose additional behavioral traits like auth needs or rate limits. This is adequate given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences plus a tip. It is front-loaded with the main purpose. The tip is useful but slightly verbose; still, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 11 parameters and no output schema, the description is minimal. It explains category structure but does not discuss pagination, filtering, or response handling. Schema descriptions are rich, so completeness is adequate but not outstanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema; it only mentions category fields but does not relate them to parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get all the categories...' and explains what categories are (colored labels). The tip mentions use with update tools, but does not explicitly distinguish from the sibling 'create-outlook-category', so it's clear but not differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip provides a clear use case ('show available tags before applying'), but no guidance on when not to use this tool or when to use alternatives like 'create-outlook-category'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-outlook-contactslist-outlook-contactsA
Read-only

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:

💡 TIP: $filter only supports startswith() — contains() and eq on emailAddresses do not work. Use $search as alternative for broader matching.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is known. The description adds context about being from the default folder and filter/search limitations. It does not discuss rate limits, pagination behavior (though parameters hint at it), or authentication needs beyond 'signed-in user'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence conveying the core purpose plus a short tip. No redundant information. Front-loads the main action. Every part adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 11 parameters and no output schema, the description adequately covers the tool's purpose and provides important querying guidance. It does not detail the return structure (e.g., contact fields), but the parameter descriptions and tool name compensate. Slight gap for a comprehensive view.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 11 parameters. The description adds marginal value by explaining filter/search constraints but does not significantly enhance understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get a contact collection from the default contacts folder of the signed-in user.' It specifies the resource (contacts) and action (list). The broader scenario mention and tips distinguish it from sibling contact tools like get-outlook-contact or list-contact-folder-contacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a tip on filter limitations and suggests using $search as an alternative. However, it does not explicitly guide when to use this tool over other contact-related tools (e.g., retrieving contacts from a specific folder). The tip is about querying technique rather than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-plan-bucketslist-plan-bucketsB
Read-only

Retrieve a list of plannerBucket objects contained by a plannerPlan object.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
plannerPlanIdYesValue for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with annotations (readOnlyHint, destructiveHint=false). However, it adds no behavioral details beyond what annotations provide. It does not mention pagination behavior, response size implications, or any side effects. The parameter descriptions on the schema handle some details, but the description itself is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that is appropriately concise. It front-loads the core purpose. It could be slightly more informative without becoming verbose, but it is not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 12 parameters and no output schema, the description is too brief. It does not explain the structure of the returned list, how to handle pagination, or the relationship to plannerPlan. The parameter descriptions in the schema compensate partially, but the tool's purpose and usage context are insufficiently covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the baseline is 3. The description itself does not describe any parameters; all parameter meaning is derived from the schema. This is acceptable given high coverage, but the description adds no additional semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a list of plannerBucket objects for a plannerPlan. It uses a specific verb ('Retrieve') and resource, and the name reinforces the purpose. While it doesn't explicitly contrast with sibling planner tools, the resource 'buckets' vs 'tasks' or 'plans' provides implicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives (e.g., list-plan-tasks, get-planner-plan). There is no mention of prerequisites (e.g., having the plannerPlanId) or constraints like the need for specific permissions. The description offers no when-to-use or when-not-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-planner-task-messageslist-planner-task-messagesA
Read-only

[beta] Retrieve a list of plannerTaskChatMessage objects associated with a plannerTask.

💡 TIP: Lists messages in a Planner task's chat — the modern Planner 'task chat', distinct from the legacy conversationThreadId comments (which live in the M365 group conversation thread). Each message has id, content (HTML), createdBy, createdDateTime, mentions, reactions. BETA Graph API: subject to change; delegated work/school accounts only — no application permissions, no personal Microsoft accounts, global cloud only (not GCC/DoD/21Vianet).

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
plannerTaskIdYesValue for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds important behavioral details: beta API status, no application permissions, no personal accounts, global cloud only, and lists the content of each message. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs. The first sentence clearly states the purpose, and the tip is helpful. Slightly more could be trimmed, but overall it's well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains return value structure (fields like id, content). It also covers limitations and prerequisites. The number of parameters (12) is high, but schema covers them fully, so the description is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does not add significant parameter meaning beyond what is already in the schema, though it does mention beta constraints not in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a list of plannerTaskChatMessage objects for a plannerTask, using a specific verb ('Retrieve') and resource. It also distinguishes itself from legacy conversationThreadId comments, which helps differentiate from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a tip indicating the modern task chat context vs legacy comments, giving some guidance on when to use this tool. However, it does not explicitly state when not to use it or compare with other tools like get-planner-task-details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-planner-taskslist-planner-tasksB
Read-only

Retrieve a list of plannertask objects assigned to a User.

💡 TIP: Priority values: 0=Urgent, 1=Important, 3=Medium, 5=Low, 9=unset.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds a useful tip about priority value mappings but does not disclose other behaviors such as pagination, filtering support, or rate limits. With annotations covering safety, the description provides adequate but not exceptional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences and a useful tip. No wasted words, and the information is front-loaded. The structure is efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of 11 parameters and no output schema, the description is minimal but the schema descriptions fill the gaps. The description provides the core purpose and a helpful tip. It is complete enough for an agent that can read the schema, but could benefit from a brief note on typical usage patterns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description adds a tip about priority values, which is contextually useful but not directly about parameters. It does not significantly enhance understanding beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (retrieve) and resource (plannertask objects) and specifies the scope (assigned to a User). However, it does not explicitly state which user (likely the current authenticated user), leaving some ambiguity. The sibling 'list-plan-tasks' is distinct but no differentiation is provided.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool vs alternatives like 'list-plan-tasks' or other planner tools. It lacks explicit when/when-not criteria or mentions of prerequisites. The tip about priority values is unrelated to usage decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-plan-taskslist-plan-tasksB
Read-only

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

💡 TIP: Priority values: 0=Urgent, 1=Important, 3=Medium, 5=Low, 9=unset.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
plannerPlanIdYesValue for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, which the description does not contradict. However, the description adds minimal behavioral context beyond the annotations; it only adds a tip about priority values, which is data semantics rather than behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action, and includes an optional tip. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (12 parameters, no output schema), the description is adequate but minimal. The schema descriptions handle parameter details, but the main description lacks high-level context such as authentication requirements, response structure, or error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3. The main description does not add parameter information beyond the schema, but the tip about priority values provides extra context for interpreting task data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieve a list') and the resource ('plannerTask objects associated with a plannerPlan object'). It distinguishes from sibling 'list-planner-tasks' by specifying association with a plan, but does not explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description simply states what it does without any context about prerequisites, limitations, or preferred use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-specific-calendar-eventslist-specific-calendar-eventsA
Read-only

List events from one of the signed-in user's calendars, addressed by calendar ID.

💡 TIP: WARNING: Does NOT expand recurring events — only returns seriesMaster. Use get-specific-calendar-view instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
timezoneNoIANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC.
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
expandExtendedPropertiesNoWhen true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=true and destructiveHint=false, but the description adds a crucial non-obvious behavior: recurring events are not expanded, only seriesMaster is returned. This goes beyond what annotations convey and is highly relevant to the agent's invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: a clear main description and an actionable tip. No filler; front-loaded with the key caveat. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 14 parameters, all thoroughly described in the schema, plus annotations for read-only behavior and the description's critical recurring-events caveat, the description provides enough context for an agent to select and invoke the tool effectively. No output schema exists, but the return is self-evident as a list of events.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with rich per-parameter descriptions (e.g., $top, $filter, $select, fetchAllPages). The tool description itself adds no new parameter-level meaning beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb ('List') and resource ('events from one of the signed-in user's calendars, addressed by calendar ID'), distinguishing from sibling tools like list-calendar-events. The tip also references get-specific-calendar-view as an alternative, reinforcing the specific scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly warns that recurring events are not expanded and directs the agent to use get-specific-calendar-view instead, providing a clear when-not and alternative. It also implies use when a specific calendar ID is known.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-subscriptionslist-subscriptionsA
Read-only

Retrieve the properties and relationships of webhook subscriptions, based on the app ID, the user, and the user's role with a tenant. The content of the response depends on the context in which the app is calling; for details, see the scenarios in the Permissions section.

💡 TIP: Lists webhook subscriptions owned by the current app/user. Returns id, resource, changeType, notificationUrl, expirationDateTime, clientState. Use $filter=resource eq '/me/messages' to find subscriptions for a specific resource. No dedicated 'Subscription.*' scope exists — the caller must already have a read permission for the subscribed resource (e.g. Mail.Read for /me/messages), which is supplied by the tool that reads that resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and destructiveHint. Description adds context: response content depends on context, lists typical returned properties, and explains that no dedicated Subscription scope exists, requiring inherited permissions. Does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise and front-loaded with the main purpose. Includes a tip and important permission note without being overly verbose. Could be slightly tighter but effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description lists expected fields and notes dependency on app context. Covers permission and filtering guidance. Lacks explicit mention of pagination handling via @odata.nextLink, but that is covered in schema parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage with detailed parameter docs. The description adds overall context (filtering, pagination tips) but does not significantly enhance individual parameter meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves webhook subscriptions, specifying the basis (app ID, user, role) and distinguishes it from sibling tools like create-subscription and delete-subscription by focusing on listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a tip on usage: lists subscriptions owned by current app/user, suggests filtering with $filter, and highlights permission requirements. Lacks explicit when-not-to-use, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-supported-languageslist-supported-languagesA
Read-only

Get the list of locales and languages that are supported for the user, as configured on the user's mailbox server. When setting up an Outlook client, the user selects the preferred language from this supported list. You can subsequently get the preferred language by getting the user's mailbox settings.

💡 TIP: Lists locales and languages the user's mailbox server supports for the Outlook UI and message rendering. Returns localeInfo objects with locale (e.g. 'en-US') and displayName ('English (United States)'). Use this to validate the locale value before calling update-mailbox-settings to change the user's preferred language.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that it returns localeInfo objects with locale and displayName, which provides some behavioral context. However, it does not disclose additional traits like potential latency, rate limits, or whether results are cached. The openWorldHint annotation signals non-determinism, which is not elaborated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: 4 sentences plus a front-loaded tip. It immediately states the purpose, then adds context, and finally provides actionable guidance. No redundant phrases, and each sentence serves a clear function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains the return format (localeInfo objects). It also connects the tool to a real workflow (validating locale before updating settings). However, with 8 optional parameters, it does not guide which ones are relevant for this tool (e.g., filter/search may be unnecessary for a small list). Despite this, it is largely complete for a read-only list tool with good annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with detailed descriptions for all 8 parameters (top, skip, count, filter, etc.). The tool description does not add any additional parameter-level meaning beyond what the schema already provides. At high coverage, baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get the list of locales and languages that are supported for the user.' It identifies the specific resource (locales/languages) and related context (mailbox server configuration, Outlook client language selection). This uniquely distinguishes it from sibling tools like list-supported-time-zones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit use cases: 'When setting up an Outlook client, the user selects the preferred language from this supported list.' It also advises to 'Use this to validate the locale value before calling update-mailbox-settings.' This gives clear context and a concrete scenario, though it doesn't explicitly mention when not to use the tool or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-supported-time-zoneslist-supported-time-zonesA
Read-only

Get the list of time zones that are supported for the user, as configured on the user's mailbox server. You can explicitly specify to have time zones returned in the Windows time zone format or Internet Assigned Numbers Authority (IANA) time zone (also known as Olson time zone) format. The Windows format is the default. When setting up an Outlook client, the user selects the preferred time zone from this supported list. You can subsequently get the preferred time zone by getting the user's mailbox settings.

💡 TIP: Lists time zones the user's mailbox server supports. TimeZoneStandard path parameter must be one of: Windows (default — Windows time zone names like 'Pacific Standard Time'), or Iana (IANA / Olson names like 'America/Los_Angeles'). Note the PascalCase — the values are case-sensitive enums, not lowercase strings. Returns timeZoneInformation objects with alias and displayName. Use the result to validate or look up the value before calling update-mailbox-settings to change the user's preferred timeZone — the format must match what the server expects.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
TimeZoneStandardYesValue for the 'TimeZoneStandard' path segment.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only safe operation. Description adds return structure (timeZoneInformation with alias and displayName), case-sensitivity tip, and pagination context, providing useful behavioral details beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with main purpose paragraph and a helpful tip section. Slightly verbose but front-loaded and clear. Could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers output structure (alias, displayName), format options, and integration with update-mailbox-settings. Without output schema, description explains return fields adequately. Standard Graph params are documented in schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds meaningful detail for TimeZoneStandard (explains enum values and case-sensitivity) and reinforces pagination parameters. Adds moderate value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it gets the list of supported time zones for the user's mailbox server, specifies format options (Windows vs IANA), and distinguishes from related tools like update-mailbox-settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explains when to use (e.g., before changing mailbox time zone), which format to choose, and mentions related tool. Does not explicitly state when not to use, but context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-todo-linked-resourceslist-todo-linked-resourcesA
Read-only

Get information of one or more items in a partner application, based on which a specified task was created. The information is represented in a linkedResource object for each item. It includes an external ID for the item in the partner application, and if applicable, a deep link to that item in the application.

💡 TIP: Lists resources linked to a To Do task (emails, URLs, etc.). Each linked resource has displayName, webUrl, applicationName, and externalId.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
todoTaskIdYesValue for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph.
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false, covering safety. Description adds that it returns linkedResource objects with specified fields, but no additional behavioral traits (e.g., rate limits, auth requirements). Adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences plus a tip. No unnecessary words. Main purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description mentions response fields (displayName, webUrl, etc.) and includes a tip. It covers the essential context for a list tool, though pagination or response structure details are omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for all 13 parameters. The description adds no new parameter information beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves linked resources for a To Do task, listing fields like displayName, webUrl, etc. It is distinct from sibling tools (create/delete). No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (list linked resources of a task) but no explicit guidance on when to use vs. other tools, nor when not to use. The tip provides context but lacks explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-todo-task-listslist-todo-task-listsA
Read-only

Get a list of the todoTaskList objects and their properties.

💡 TIP: Lists all To Do task lists. Returns todoTaskList-id needed for all task operations. The default list is typically called 'Tasks'. NOTE: $select is NOT supported by this endpoint — do not pass select parameter, Graph returns 400.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context: the task list id is needed for tasks, the default list is 'Tasks', and $select is unsupported. This goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two short sentences plus a TIP and NOTE. The main purpose is front-loaded, and every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 11 parameters but full schema coverage and no output schema, the description sufficiently explains the output (list of objects with properties) and the key return value (id). It is complete enough for an agent to understand the tool's role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with detailed parameter descriptions. The tool description itself does not add significant new meaning to the parameters beyond noting the $select restriction. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get a list') and the resource ('todoTaskList objects and their properties'). It also adds a TIP that it returns the id needed for all task operations, distinguishing it from other todo tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on when to use the tool (to list task lists and get the id) and includes a warning about $select not being supported. However, it does not explicitly mention when not to use it or compare with alternatives like 'get-todo-task'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-todo-taskslist-todo-tasksA
Read-only

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

💡 TIP: Lists tasks in a To Do list. Requires todoTaskList-id — use list-todo-task-lists to find it. NOTE: $select is NOT supported — do not pass select, Graph returns 400. Use $filter=status eq 'notStarted' or $filter=status eq 'completed' to filter by status. Use $top to limit results. Status values: 'notStarted', 'inProgress', 'completed', 'waitingOnOthers', 'deferred'.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral details: $select is not supported and causes 400 error, provides filter examples with status values, and suggests $top for limiting results. It does not contradict annotations and adds practical constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with no unnecessary words. It front-loads the formal purpose, then uses a clear bullet-style tip section. Every sentence adds value: purpose, prerequisite, warning, filter guidance, limit suggestion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 12 parameters and no output schema, the description covers essential usage: prerequisite tool, main parameters, common filters, and limitation. Pagination details are left to parameter descriptions. The description is sufficient for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning beyond schema by highlighting key parameters (todoTaskListId as required, warning about $select, filter status examples, $top usage). It does not repeat all schema descriptions but adds actionable tips.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves todoTask resources from a specified todoTaskList, using specific verb and resource. It distinguishes from siblings like get-todo-task (single) and create/update/delete. The tip explicitly names the prerequisite tool list-todo-task-lists, reinforcing purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies when to use (to list tasks in a To Do list) and provides clear instructions: require todoTaskListId, get it from list-todo-task-lists, avoid $select, use $filter and $top. It does not explicitly state when not to use, but the naming and context imply it's for bulk listing rather than single retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loginB

Authenticate with Microsoft account

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce a new login even if already logged in

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose all behavioral traits. It only says 'Authenticate with Microsoft account' without explaining side effects like token storage, UI prompts, or what happens when already logged in. The 'force' parameter hint is in schema but not integrated into description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded with the essential purpose. Every word contributes value; there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool involves authentication, which typically has side effects and requires context (e.g., returns a token, affects session). The description omits these details, and with no output schema, the agent lacks information on what to expect after invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the only parameter with a description 'Force a new login even if already logged in' (100% coverage). The tool description adds no additional meaning beyond the schema, so it meets the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'authenticate' and the resource 'Microsoft account', making the tool's purpose unambiguous. It is distinct from sibling tools like 'verify-login' and 'select-account'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as 'verify-login' to check status or 'remove-account' to log out. No prerequisites or context for usage are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logoutA

Log out from Microsoft account

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden but only says 'Log out'. It does not disclose token invalidation, session effects, or whether authentication is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and efficient, containing no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and zero parameters, the description is adequate but could mention the expected outcome (e.g., success indication) for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and schema coverage is 100%. The description correctly confirms no parameters are needed, meeting the baseline for 0-param tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Log out') and the target resource ('Microsoft account'), distinguishing it from sibling tools like 'login' and 'verify-login'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives (e.g., 'remove-account'), nor does it mention any prerequisites or side effects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge-excel-rangemerge-excel-rangeA
Destructive

Merge an Excel range.

💡 TIP: Merge the cells in the given range into a single cell. Body: { across: false } merges the entire range into one cell; { across: true } merges each row separately. Useful for building styled headers, banner rows, and report layouts.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive (destructiveHint: true). The description adds behavioral detail about the merge operation—specifically that body.across determines whether the entire range merges into one cell or each row merges separately. It doesn't warn about potential data loss when merging non-empty cells, but this is partially covered by the destructive hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences plus a clearly structured tip. It front-loads the action and explains behavior without unnecessary length or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a rich schema, the description is sufficiently complete: it covers the core merging behavior, the two modes, and a use case. It lacks details on return values and prerequisites, but these are not critical given the schema and absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (88%), but the description adds essential meaning to the body.across parameter by explaining that false merges the whole range into one cell and true merges each row separately. This goes beyond the bare type/default in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Merge an Excel range' and specifies that it merges cells into a single cell (or row-wise with across: true). This distinguishes it from sibling tools like unmerge-excel-range and other Excel formatting tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides use cases ('building styled headers, banner rows, and report layouts') and explains the two merge modes (across: false vs true), which implies when each setting is appropriate. However, it does not explicitly contrast this tool with alternatives like unmerge-excel-range or mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move-mail-messagemove-mail-messageA
Destructive

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.

💡 TIP: destinationId accepts folder ID or well-known name (inbox, drafts, sentitems, deleteditems, junkemail, archive).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark destructiveHint=true. The description adds behavioral context by explaining that it creates a new copy and removes the original, which clarifies the destructive nature. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences plus a helpful tip. Every sentence adds essential information, and the tip improves usability without excess verbiage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters, no output schema, and moderate schema coverage, the description explains the core action but lacks information about return values, error conditions, or prerequisites. Given the tool's simplicity, it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%. The description adds value beyond the schema by noting that destinationId accepts well-known names (inbox, drafts, etc.), which is not in the schema. Other parameters are already described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool moves a message to another folder, creating a copy and removing the original. This specific verb-resource combination distinguishes it from siblings like copy-mail-message (which only copies) and delete-mail-message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives (e.g., copy-mail-message). The tip about destinationId is helpful but does not address usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move-rename-onedrive-itemmove-rename-onedrive-itemA
Destructive

Move or rename a OneDrive item.

💡 TIP: Move and/or rename a file or folder. To move, provide parentReference with the target folder's id. To rename, provide a new name. Both can be done in a single request.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint and the confirm parameter explains the confirmation gate. The description does not contradict annotations and adds some behavioral context by explaining how to perform move/rename, but it does not go beyond what annotations provide, such as noting that moving can change permissions or that renaming may affect shared links.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with the core purpose first followed by a helpful tip. The emoji and formatting add visual distinction, though it could be slightly more structured, but overall it's efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the schema and the presence of the confirm parameter, the description is complete enough. It explains the key operations and the confirm parameter is described in the schema. No output schema exists, but the return values are standard for such operations and are implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers most parameters, but the description adds critical meaning by explaining that to move you must provide parentReference with the target folder's id and to rename you provide a new name. This is essential guidance that goes beyond the schema's generic property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool moves or renames a OneDrive item, and the tip explicitly explains how to do each operation. This distinguishes it from sibling tools like copy-drive-item and delete-onedrive-file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use each operation, but does not explicitly state when not to use this tool or mention alternatives. However, the tip is practical and gives the necessary context for typical usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse-teams-urlA
Read-only

Converts any Teams meeting URL format (short /meet/, full /meetup-join/, or recap ?threadId=) into a standard joinWebUrl. Use this before list-online-meetings when the user provides a recap or short URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTeams meeting URL in any format

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only (readOnlyHint: true). The description adds context by specifying input URL formats and the output type (standard joinWebUrl), which goes beyond the annotation, though it does not detail error behavior or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences with no redundant words. It is front-loaded with the primary action and efficiently conveys the usage recommendation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter, no output schema, and clear annotations), the description provides all necessary context: what it does, which URL formats it handles, and when to use it. No additional information is required for proper invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'url' has a schema description 'Teams meeting URL in any format' that already captures the essence. The tool description adds no extra semantic information beyond the schema, and with 100% schema coverage, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Converts any Teams meeting URL format into a standard joinWebUrl.' It specifies the verb 'converts' and the resource 'Teams meeting URL', and explicitly lists the supported formats, making it distinct from sibling tools that perform different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: 'Use this before list-online-meetings when the user provides a recap or short URL.' This tells the agent when to invoke the tool, though it does not explicitly state when not to use it or mention alternatives beyond that specific context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reauthorize-subscriptionreauthorize-subscriptionA
Destructive

Reauthorize a subscription when you receive a reauthorizationRequired challenge.

💡 TIP: Reauthorizes a subscription after receiving a 'reauthorizationRequired' lifecycle notification from Microsoft Graph. No body required. Must be called within the reauthorizationRequiredDateTime window (typically 48h) to avoid subscription expiry.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
subscriptionIdYesValue for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, so the description's mutation nature is clear. It adds context about the reauthorizationRequiredDateTime window and no-body requirement, but does not detail the exact outcome (e.g., subscription renewal). This is adequate but not highly informative beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using only 4 sentences plus a tip. Every sentence adds value: purpose, timing, no-body requirement, and expiration window. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters and no output schema, the description covers the core usage scenario, including when to invoke and constraints. It could mention the return value (e.g., updated subscription) but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already well-documented. The description only adds 'No body required' which is implicit from the schema. Baseline 3 is appropriate as no significant additional parameter insight is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reauthorizes a subscription in response to a 'reauthorizationRequired' challenge, distinguishing it from subscription CRUD siblings like create-subscription or delete-subscription.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use: upon receiving a reauthorizationRequired challenge or notification. It also notes the 48-hour window and that no body is required, though it does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove-accountA

Remove a Microsoft account from the cache. Accepts email address (e.g. user@outlook.com) or account ID. Use list-accounts to discover available accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesEmail address or account ID of the account to remove

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full burden. It reveals the action removes from cache (non-destructive to cloud service), but lacks details on required permissions, side effects, or reversibility. This is adequate for a simple tool but leaves some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The action and target are front-loaded, and the sibling reference is helpful. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description covers the key aspects: purpose, input format, and discovery of available accounts via list-accounts. Could mention login requirement or cached state, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a good description. The tool description adds an example (user@outlook.com) and clarifies accepted formats (email or ID), providing additional meaning beyond the schema's parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Remove' and the resource 'Microsoft account from the cache'. It specifies accepted input formats (email or account ID) and distinguishes from siblings like logout and delete-onedrive-file by specifying 'from the cache'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using list-accounts to discover available accounts, providing clear context for when to use this tool. However, it does not explicitly contrast with similar actions like logout or deleting an account from the service.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reply-all-mail-messagereply-all-mail-messageA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral details beyond the annotations: it states the message is saved in Sent Items, explains replyTo precedence per RFC 2822, and warns about HTTP 400 when both comment and body are supplied. This complements the destructiveHint=true annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into JSON and MIME sections with bullet points, making the two modes easy to scan. The tip is useful but slightly informal and partially redundant with the body/comment guidance, so it is not perfectly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, destructive mail-sending tool with no output schema, the description covers the key behaviors: format selection, required parameters, error conditions, replyTo semantics, MIME encoding, and the Sent Items side effect. It does not describe the response shape, but no output schema exists and the schema already documents the generic response flags.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, and the description adds important parameter-level semantics: the Comment/Message body conflict, replyTo handling, MIME base64 requirement, and attachment/S-MIME guidance. It does not explain includeHeaders or excludeResponse, but those are adequately described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Reply to all recipients of a message', which clearly distinguishes it from single-recipient reply and forward tools. It also names the two supported formats (JSON and MIME), so an agent knows exactly what operation this tool performs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context for both JSON and MIME modes, including constraints like the comment/body mutual exclusivity and base64 encoding for MIME. It also names the draft alternative ('create a draft to reply-all to a message and send it later'), but it does not explicitly contrast with reply-mail-message or forward-mail-message.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reply-mail-messagereply-mail-messageA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as non-read-only and destructive. The description adds meaningful behavioral details: specifying both comment and body returns HTTP 400, replies route to replyTo rather than from per RFC 2822, and the method saves the message in the Sent Items folder. It does not overpromise or contradict the destructiveHint annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but earns its length by covering two distinct input formats and a side effect. It is front-loaded with the core purpose, uses bullet separation for JSON and MIME cases, and ends with a genuinely useful formatting tip. Some MIME instructions could be tighter, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with nested schema objects and no output schema, the description covers the key invocation decisions: format choice, required messageId routing, comment/body exclusivity, replyTo behavior, Sent Items side effect, and the draft alternative. It is missing only explicit return-value expectations and a clearer MIME-to-schema mapping, but it is sufficient for correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (80%), and the description adds value on top by explaining the critical constraint: specify either a comment or the body property, not both. The tip that 'comment' is the reply text helps disambiguate the schema's nested body object. MIME content placement is somewhat inferred rather than explicitly mapped to a schema field, which prevents a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Reply to the sender of a message,' which immediately distinguishes this from reply-all-mail-message, forward-mail-message, and draft-creation siblings. It also adds the JSON/MIME dual-mode scope, making the tool's behavior unambiguous beyond the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: send a reply now versus 'alternatively, create a draft to reply to an existing message and send it later.' It also explains the JSON/MIME branches and the mutual-exclusion rule. It does not explicitly name reply-all-mail-message as the alternative for replying to all recipients, so guidance is strong but not fully exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search-onedrive-filessearch-onedrive-filesA
Read-only

Search the hierarchy of items for items matching a query. You can search within a folder hierarchy, a whole drive, or files shared with the current user.

💡 TIP: Searches for files in a drive by name or content. The q parameter searches file names, metadata, and file content. Returns matching driveItems with id, name, webUrl, size, lastModifiedDateTime. Use list-drives first to get the drive-id.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesValue for the 'q' path segment.
topNoPage size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.
skipNoItems to skip for pagination. Not supported with $search.
countNoSet true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().
expandNoNavigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead.
filterNoOData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.
searchNoKQL search query — wrap value in double quotes. Cannot combine with $filter.
selectNoComma-separated fields to return, e.g. id,subject,from,receivedDateTime
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
orderbyNoSort expression, e.g. receivedDateTime desc
fetchAllPagesNoFollow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export. Prefer a small $top first, then paginate or narrow with $filter/$search.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat that. The description adds that the tool searches by name/content and returns specific fields, but does not disclose pagination behavior, rate limits, or other traits beyond what parameter descriptions cover. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences plus a tip, all front-loaded. Every sentence provides essential information without redundancy. The tip is practical and well-placed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters, OData features), the description adequately covers the purpose and prerequisite. The parameter descriptions handle the rest. The description could mention pagination or compare to list-folder-files, but it's fairly complete for the annotations and schema provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description adds value by explaining the search scope (folder hierarchy, whole drive, shared files) and the nature of the q parameter (searches names, metadata, content), which goes beyond the schema's property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for items matching a query within OneDrive, specifying search scope (folder hierarchy, whole drive, shared files). It mentions search by name/content and lists return fields. However, it does not explicitly distinguish from sibling tools like list-folder-files, though the distinction is implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using list-drives first to get the drive-id, which is a helpful prerequisite. It also clarifies the q parameter. However, it does not provide explicit when-to-use vs alternatives (e.g., when to use search vs list-folder-files) or when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

select-accountA

Select a Microsoft account as the default. Accepts email address (e.g. user@outlook.com) or account ID. Use list-accounts to discover available accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesEmail address or account ID of the account to select

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It indicates a state-changing mutation ('Select as default') but does not disclose side effects, persistence, or authentication requirements. Minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two succinct sentences with zero wasted words. Every sentence serves a purpose: main action, accepted input format, and reference to sibling tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple selection tool, the description adequately covers the basic purpose and input. However, it lacks information about return values, how to verify the current default, or whether selection persists across sessions. Moderate completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description already fully covers the parameter (100% coverage). The description adds an example (e.g., user@outlook.com), which is helpful but not essential. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Select a Microsoft account as the default' with a specific verb and resource. It distinguishes from 'list-accounts' by mentioning discovery, but does not differentiate from other account-related tools like login, logout, or remove-account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly advises using 'list-accounts' first to discover available accounts, providing clear context for when to use this tool. It does not include exclusion criteria or alternatives beyond list-accounts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send-draft-messagesend-draft-messageA
Destructive

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.

💡 TIP: No request body needed — just call with the message ID. Draft must exist in Drafts folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, and the description adds that it saves in Sent Items and requires an existing draft. However, it does not elaborate on other behavioral aspects such as permissions or side effects beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise—two sentences plus a tip—with no unnecessary words. It front-loads the purpose and provides a clear tip about usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does not clarify return values or error handling. However, for a simple send action, the essential information is present, and the tip covers the key requirement. It could be more complete but is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add additional meaning beyond what the schema provides for parameters; it only repeats that no request body is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it sends an existing draft message, listing types (new, reply, reply-all, forward) and mentions saving to Sent Items. It also distinguishes from sending a new message in one operation, making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a tip that no request body is needed and draft must exist in Drafts folder, but it does not explicitly compare with sibling tools like send-mail or create-draft-email, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send-mailsend-mailB
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=false and destructiveHint=true, and the description adds meaningful behavior on top: MIME-format sends are saved to Sent Items, and the JSON format supports file attachments in the same call. However, with destructiveHint=true and the irreversibility of an email send, one would expect an explicit acknowledgment of the irreversible/real-world side effect (e.g., confirmation-gate behavior connects to the confirm param, but only the schema explains it). No contradiction with annotations, but the safety-sensitive nature deserved a sentence.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The writing is mostly tight and front-loaded with the primary verb, and the critical warning is visually separated. However, the 'To learn more... see here' link is a dead reference — the URL was stripped, leaving a dangling pointer that an agent cannot follow. The '💡 TIP: CRITICAL:' stacking is also redundant (a tip that is also critical). These small issues keep an otherwise compact description from being polished.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-action tool with 4 parameters and no output schema, the description covers the two most critical behaviors (send, and the JSON-attachment constraint) plus a critical user-safety rule. Yet for a tool marked destructiveHint=true with a confirm-gate parameter, a brief note about the confirmation flow or the likely response shape would have made the description complete. Adequate but not comprehensive for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 75% schema coverage, the baseline is 3, and the description does not need to compensate heavily. The JSON/MIME format discussion adds marginal meaning to the 'body' parameter by telling the agent that attachments are only available in JSON mode. It does not, however, explain the distinction between the two remaining parameters (includeHeaders, excludeResponse) or add anything about the confirm gate, though those are reasonably self-describing in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource ('Send the message specified in the request body') and adds the JSON/MIME format distinction that meaningfully scopes the tool. It differentiates from draft creation ('create a draft message to send later'), which helps an agent distinguish it from the many mail siblings. It loses a point because it never explicitly names sibling tools like send-draft-message or create-draft-email, leaving the agent to infer which sibling it means.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a genuine when-not-to-use signal ('Alternatively, create a draft message to send later') and a highly actionable correctness tip about using list-users rather than guessing recipient addresses. However, the sibling space contains at least four near-cousins (send-draft-message, create-draft-email, forward-mail-message, reply-mail-message) and none are named or contrasted, so an agent navigating the directory gets no help choosing among them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

share-drive-itemshare-drive-itemA
Destructive

Send a sharing invitation for a driveItem. A sharing invitation provides permissions to the recipients and, optionally, sends them an email to notify them that the item was shared.

💡 TIP: Shares a file or folder with specific users. Body: { recipients: [{ email: 'user@example.com' }], roles: ['read'], sendInvitation: true, message: 'Please review this file.' }. Roles: 'read', 'write', 'owner'. Set requireSignIn to true to require authentication.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, so the description's mention of 'sharing invitation' is consistent. The description adds the detail that an email can optionally be sent, but does not disclose other behavioral traits such as whether existing permissions are replaced, what happens on conflicts, or authorization requirements. With annotations covering the destructive nature, the description adds minimal additional behavioral context beyond the email note.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph followed by a tip, totaling about three sentences. It is front-loaded with the main action and efficiently conveys purpose and key usage hints. However, the tip could be integrated more seamlessly, and the description could be slightly more compact without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters, nested objects, and no output schema, the description covers the main action, provides an example body, and explains roles. However, it lacks details on what the response contains (since no output schema exists), error conditions, prerequisites, or the effect on existing permissions. A more complete description would include expected return value or common errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (83%), providing descriptions for many parameters. The description's tip adds value by providing a concrete example of the body (e.g., { recipients: [{ email: 'user@example.com' }], roles: ['read'] }) and clarifying the roles list. While the schema already defines roles and recipients, the example makes usage more intuitive. This goes beyond the schema's structural definitions, justifying a score above the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sends a sharing invitation for a driveItem. It distinguishes from sibling tools like create-drive-item-share-link (which creates a link) and list-drive-item-permissions (which lists permissions). The verb 'Send a sharing invitation' with the resource 'driveItem' is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a tip with an example body and role guidance, implying usage for sharing with specific users. However, it does not explicitly state when to prefer this tool over alternatives (e.g., creating a share link) or when not to use it. The tip provides some guidance but lacks explicit exclusions or context for alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

snooze-calendar-event-remindersnooze-calendar-event-reminderA
Destructive

Postpone a reminder for an event in a user calendar until a new time.

💡 TIP: Postpones a triggered event reminder. Body: { NewReminderTime: { dateTime (ISO 8601), timeZone (IANA or Windows, e.g. 'Pacific Standard Time') } }. The reminder will re-fire at the new time.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains that the reminder will re-fire at the new time, providing behavioral context beyond the destructiveHint annotation. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two clear sentences plus a tip, no wasted words. Front-loaded with core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequately covers the key parameter structure and behavior. No output schema, but the action is simple enough. Could mention eventId but schema covers it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds value for the body parameter (NewReminderTime) with format details, but does not cover other parameters like eventId or confirm. Schema provides descriptions for those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'postpone' and the resource 'reminder for an event in a user calendar'. It distinguishes from sibling tools like dismiss-calendar-event-reminder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip indicates it's for triggered event reminders but does not explicitly state when not to use or compare with dismissing. However, the context of siblings implies the distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sort-excel-rangesort-excel-rangeD
Destructive

Sort an Excel range.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

D1.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description simply says 'Sort' without disclosing side effects, reversibility, or how the range is modified. While annotations do indicate destructiveHint: true and readOnlyHint: false, the description itself contributes no additional behavioral context, and the agent is left to infer what happens to the data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than effective conciseness. It consists of a single sentence that merely repeats the tool name, lacking any meaningful structure or additional information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, a required nested body, and destructive implications, the one-sentence description is grossly inadequate. It fails to explain what sort operation is performed, what the output looks like, or how to construct the request, making it nearly impossible for an agent to invoke correctly without external documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema description coverage is 86%, the core 'body' parameter is required but its schema only includes an optional 'id' with additionalProperties: true, leaving the actual sort configuration unspecified. The description does not clarify what should go in the body, so the agent cannot determine how to specify sort keys, order, or range structure from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Sort an Excel range' is essentially a verbatim restatement of the tool name and provides no additional specification of what sorting entails (e.g., keys, order, orientation). It does identify a verb and resource but adds no distinguishing details beyond the name itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives like update-excel-range or insert-excel-range, nor any context about prerequisites (e.g., whether the range must exist) or when it is appropriate to sort.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tentatively-accept-calendar-eventtentatively-accept-calendar-eventA
Destructive

Tentatively accept the specified event in a user calendar. If the event allows proposals for new times, on responding tentative to the event, an invitee can choose to suggest an alternative time by including the proposedNewTime parameter. For more information on how to propose a time, and how to receive and accept a new time proposal, see Propose new meeting times.

💡 TIP: Tentatively accepts a meeting invitation. Optional body: { sendResponse: true, comment: 'I might be able to attend.' }. Use proposedNewTime to suggest an alternative: { proposedNewTime: { start: { dateTime, timeZone }, end: { dateTime, timeZone } } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=true, so the description doesn't need to repeat that it mutates state. It adds context about the proposedNewTime mechanism and the sendResponse/comment fields, which is useful. However, it does not disclose side effects like sending a response or that the event is modified in the calendar. Given the annotations already cover safety, this is acceptable but could be richer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence. The tip paragraph is an efficient addition with a concrete example. No fluff, but the description is not overly brief; it earns each sentence. Slightly verbose with the second paragraph, but it adds practical value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has multiple nested parameters and no output schema. The description does not explain return values or error behavior, which agents might need. However, given the similarity to other calendar event tools, the response format may be assumed. The confirm gate and headers/flags are described in the schema, so the description doesn't need to repeat them. Still, a brief note on what to expect in response would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the schema already documents most parameters. The description adds a concrete example for the body object in the tip, but this largely duplicates schema content. It does not clarify the 'confirm' parameter beyond what the schema states (which already explains when it is required). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear action ('Tentatively accept') on a specific resource ('the specified event in a user calendar'). The name itself differentiates from siblings like accept-calendar-event and decline-calendar-event, and the description reinforces this by focusing on tentative acceptance and optional proposal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for using the tool (tentatively accepting an event) and mentions the optional proposal flow. Does not explicitly contrast with alternatives (e.g., 'use accept-calendar-event for final acceptance'), but the action is self-evident from the name and description. The tip gives concrete examples of body parameters, enhancing usability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unmerge-excel-rangeunmerge-excel-rangeA
Destructive

Unmerge an Excel range.

💡 TIP: Unmerge any merged cells within the given range back into individual cells. No request body. Inverse of merge-excel-range.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as destructive, and the description adds behavioral detail that the operation targets 'any merged cells' and reverts them 'back to individual cells.' It also states 'No request body,' which is useful. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise: two sentences plus a tip. Every sentence adds value: it states the action, clarifies the scope, notes the request body requirement, and references the sibling tool. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the schema's full parameter coverage, and the destructive annotation, the description is largely adequate. It could add a note about data retention (e.g., which cell value is kept), but that is a minor gap. The 'inverse' relationship and the scope of the operation are clearly communicated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% descriptions for all parameters, including confirmation gates and ID guidance. The description adds no additional parameter-level meaning beyond a global 'No request body' note, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Unmerge an Excel range' and elaborates 'Unmerge any merged cells within the given range back into individual cells.' It also explicitly distinguishes this from the sibling tool by calling itself the 'Inverse of merge-excel-range,' which is a strong differentiator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context by noting this is the inverse of merge-excel-range, implying when to use it. It also adds the practical note 'No request body.' However, it does not explicitly state when not to use it or mention other alternative tools (e.g., clear-excel-range), so it falls slightly short of a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-calendarupdate-calendarA
Destructive

Update a calendar.

💡 TIP: Updates a calendar's properties. Body: { name: 'New Name', color: 'lightBlue' }. Cannot update the default calendar's name.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true and readOnlyHint=false, so the description's update semantics are consistent. It adds a useful constraint about the default calendar's name, providing extra behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core action, followed by a helpful tip and a key constraint. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema and annotations, the description is sufficient for an agent to call the tool correctly. It covers the primary usage example and a critical limitation, while the schema handles detailed field documentation. The lack of output schema is not a gap since responses aren't described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (~80%) and the description adds an example body object, clarifying how to use the 'body' parameter. It also highlights the limitation on renaming the default calendar, which is not obvious from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a calendar's properties, with a concrete example (Body: { name: 'New Name', color: 'lightBlue' }). It implicitly distinguishes from sibling tools like update-calendar-event and create-calendar by targeting the calendar resource itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a usage tip and a constraint (cannot update the default calendar's name) but doesn't explicitly guide when to use this vs alternatives like create-calendar or delete-calendar. No mention of when to defer to other tools for operations like permissions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-calendar-eventupdate-calendar-eventA
Destructive

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. WARNING: Setting attendees replaces the entire attendee list — include all attendees, not just new ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description exceeds the annotation (destructiveHint: true) by explicitly warning that setting attendees replaces the entire list and that email addresses should be sourced from list-users. This transparently discloses side effects and data sourcing requirements, which are critical for safe and correct usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of a single primary statement and two focused tips. It is well-structured with clear emphasis on the critical warnings, avoiding unnecessary elaboration while conveying essential usage information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the extensive nested schema, the description does not explain every field, but the schema itself provides detailed descriptions. The tips address the most complex and error-prone aspects (attendees and email addresses). It does not mention the return value or response format, but the absence of an output schema makes that less critical. Overall, it is reasonably complete for practical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides descriptions for most parameters (80% coverage), but the description adds crucial semantic clarity for the attendees parameter (replacement behavior) and the emailAddress within attendees (use list-users). This supplements the schema, especially for the 'body' and 'eventId' parameters where the tips indirectly clarify expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool updates properties of an event object, using the verb 'update' and identifying the resource as a calendar event. This distinguishes it from sibling tools that create, delete, or retrieve events, and the added tips reinforce its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical guidance on how to use the tool, specifically warning against guessing email addresses and instructing to use the list-users tool, and explaining the behavior when setting attendees. While it does not explicitly mention when to use this versus other update tools like 'update-specific-calendar-event', the tips give sufficient context for typical usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-contact-folderupdate-contact-folderA
Destructive

Update the properties of contactfolder object.

💡 TIP: Updates a contact folder. Body: { displayName?: 'New name', parentFolderId?: '' } — both displayName (rename) and parentFolderId (move) are writable. The default 'Contacts' folder may not be renameable. Get the folder id via list-contact-folders.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
contactFolderIdYesValue for the 'contactFolderId' path segment. Pass it under the name 'contactFolderId', not as 'id'. Use the 'id' field of the contact folder object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond annotations: it states that the default 'Contacts' folder may not be renameable, which is a notable constraint. Annotations already indicate destructiveHint=true, so the description complements this with a specific limitation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: a short sentence stating the purpose, followed by a compact tip with key details. Every sentence earns its place, and the structure is front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters (2 required) and nested body structure, the description covers the essential aspects: the purpose, the main writable fields, and a constraint. It lacks details about the confirm gate or response options, but those are common and inferred from schema. The absence of output schema is acceptable as description does not need to detail return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 80% schema coverage, the description adds value by explicitly stating that displayName and parentFolderId are the writable fields in the body, clarifying what the agent should set. It does not mention the other parameters (confirm, includeHeaders, etc.), but those are standard across tools and do not require additional explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb 'Update' and the resource 'contactfolder object', distinguishing it from siblings like create-contact-folder and delete-contact-folder. It specifies that it updates properties of an existing contact folder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it updates a contact folder, highlights the two writable fields (displayName and parentFolderId), and notes that the default folder may not be renameable. It also suggests getting the folder id via list-contact-folders. However, it does not explicitly contrast with create or delete tools, but the purpose is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-excel-rangeupdate-excel-rangeA
Destructive

Update an Excel range.

💡 TIP: Set cell values, formulas, or number format on any range — does NOT require the worksheet to be a formal Excel table. Body: { values: [['v1','v2','v3']] } for a single row, or [['a','b'],['c','d']] for multi-row. Use this for append (target the next empty row's address, e.g. 'A172:H172'), update (target a single cell like 'H42'), or prepend-style edits (read existing, concatenate, write back). Number of inner-array values must match the column count of the address.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
addressYesValue for the 'address' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookWorksheetIdYesValue for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive (destructiveHint: true) and note the confirm gate. The description adds valuable context: the body shape, the 'no formal table required' caveat, and the requirement that inner-array values match column count. It doesn't discuss overwrite behavior or permissions, but given annotation coverage, the added context is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise but packed with practical details. It starts with a clear purpose statement, then a helpful tip, body format examples, use cases, and a constraint. Each sentence earns its place, though the body-format inline code could be slightly more compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with no output schema, the description covers the purpose, usage patterns, and critical body syntax. It does not describe the return value or error cases beyond the confirm gate, but the core functionality is well-documented and the description differentiates it from siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88% but the 'body' parameter is a generic object with additionalProperties true, providing no structure. The description compensates with explicit body format examples: { values: [['v1','v2','v3']] } for single row and [['a','b'],['c','d']] for multi-row, plus the column-count rule. This is essential information that the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update an Excel range' and elaborates that it sets values, formulas, or number format, distinguishing it from insert/delete/clear operations. It explicitly notes it works on any range, not just formal Excel tables, which differentiates it from table-specific tools like update-excel-table-row.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete use cases: append (target next empty row), update (single cell), and prepend-style edits. It explains the body format and column-count constraint. However, it doesn't explicitly mention when to use alternative tools like insert-excel-range or format-excel-range, though the usage examples imply the intended scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-excel-table-rowupdate-excel-table-rowA
Destructive

Update an Excel table row.

💡 TIP: Update a single row in a formal Excel table by zero-based row index. Body: { values: [[...]] } with one inner array matching the column count.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
indexYesValue for the 'index' path segment.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
workbookTableIdYesValue for the 'workbookTableId' path segment. Pass it under the name 'workbookTableId', not as 'id'. Use the 'id' field of the workbook table object as returned by Microsoft Graph.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's 'Update' adds little beyond the annotation. It does disclose that the operation targets a single row and requires a column-count-matching array, which implies full-row overwrite, but it does not describe return behavior, error cases, or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: a clear one-sentence purpose followed by a focused tip. It front-loads the core intent and adds only the most essential detail about the request body, with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, 5 required, and no output schema, the description covers the core operation and body structure but omits workflow context such as how table/row IDs are obtained, what happens when the row index is out of bounds, or what the response contains. It leans on schema descriptions for path parameters, but the absence of output details is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has descriptions for path parameters and confirm flags, but the tool description adds crucial meaning for 'body' (which is an untyped object in the schema) by specifying '{ values: [[...]] } with one inner array matching the column count.' It also clarifies 'index' is zero-based, which the schema does not. This compensates for the schema's lack of body structure detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates an Excel table row, specifying 'single row in a formal Excel table by zero-based row index.' This distinguishes it from sibling tools like update-excel-range or delete-excel-table-row by focusing on row-level updates in formal tables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for updating a single row in a formal Excel table, and the tip elaborates on the expected body format. However, it does not explicitly contrast with alternatives (e.g., update-excel-range) or state when not to use it, leaving room for ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-focused-inbox-overrideupdate-focused-inbox-overrideA
Destructive

Change the classifyAs field of an override as specified. You cannot use PATCH to change any other fields in an inferenceClassificationOverride instance. If an override exists for a sender and the sender changes his/her display name, you can use POST to force an update to the name field in the existing override. If an override exists for a sender and the sender changes his/her SMTP address, deleting the existing override and creating a new one with the new SMTP address is the only way to 'update' the override for this sender.

💡 TIP: Updates the classifyAs field of an existing override. Body: { classifyAs: 'focused' } or { classifyAs: 'other' }. Per Graph API, PATCH cannot change senderEmailAddress — to change the SMTP address, delete and recreate the override. To rename the display name only, POST a new override with the same SMTP address (it will overwrite the name).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
inferenceClassificationOverrideIdYesValue for the 'inferenceClassificationOverrideId' path segment. Pass it under the name 'inferenceClassificationOverrideId', not as 'id'. Use the 'id' field of the inference classification override object as returned by Microsoft Graph.

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description claims the tool updates a field (non-destructive), but the annotation destructiveHint: true marks it as destructive. This contradiction misleads the agent about the tool's safety. Description provides no detail on destructive aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is front-loaded with the main action and uses a tip for examples. It is slightly verbose but structured effectively. Could trim redundant statements like 'You cannot use PATCH to change any other fields' appearing twice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has 5 parameters, nested objects, no output schema, and a confirm parameter for destructive operations. The description explains the purpose and limitations but does not cover the confirm parameter, response control (includeHeaders/excludeResponse), or the response format. Adequate but missing details for full autonomous use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80% (baseline 3). Description adds value by specifying the valid body values, clarifying that senderEmailAddress cannot be changed via this call, and providing guidance on the inferenceClassificationOverrideId parameter. This compensates for the remaining schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool changes the classifyAs field of an override, distinguishing it from sibling tools like create-focused-inbox-override, delete-focused-inbox-override, and list-focused-inbox-overrides.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (only for changing classifyAs) and when to use alternatives: POST for display name changes, delete and recreate for SMTP address changes. It also notes what cannot be changed via PATCH.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-mailbox-settingsupdate-mailbox-settingsB
Destructive

Enable, configure, or disable one or more of the following settings as part of a user's mailboxSettings: When updating the preferred date or time format for a user, specify it in respectively, the short date or short time format. When updating the preferred time zone for a user, specify it in the Windows or Internet Assigned Numbers Authority (IANA) time zone (also known as Olson time zone) format. You can also further customize the time zone as shown in example 2 below.

💡 TIP: Updates mailbox settings. Common use: configure Out-of-Office (automatic replies). Body example: { automaticRepliesSetting: { status: 'scheduled', scheduledStartDateTime: { dateTime: '2026-03-28T17:00:00', timeZone: 'Eastern Standard Time' }, scheduledEndDateTime: { dateTime: '2026-04-01T08:00:00', timeZone: 'Eastern Standard Time' }, internalReplyMessage: 'I am OOO.', externalReplyMessage: 'I am out of office.' } }. Status values: disabled, alwaysEnabled, scheduled.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as non-readOnly and destructive, so the description does not need to belabor that modifying mailbox settings has side effects. It does add useful context about supported formats for time zone and date/time values, but it does not explain what happens to existing settings that are omitted from the request or what the response will include.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description includes useful example and format guidance, but it is not tightly written. The 'TIP' sentence largely restates the tool name, the status values duplicate the schema enum, and 'as shown in example 2 below' refers to content that is not present, adding unnecessary noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nested objects and no output schema, the description provides one strong common-use example but insufficient general coverage of other settings in the body. It does not describe the response format, behavior when partial settings are updated, or relationship to get-mailboxSettings, leaving the agent to rely on the schema for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description adds real value beyond the schema by explaining short date/time format constraints, Windows/IANA time zone requirements, and providing a concrete automaticRepliesSetting JSON example with valid statuses. It does not cover all nested fields like workingHours or language, but the schema already describes those reasonably well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with specific verbs ('Enable, configure, or disable') tied to mailbox settings, which makes the operation clear and distinguishes it from read-only siblings like get-mailbox-settings. However, it does not explicitly enumerate all the settings it can update, and its sibling differentiation is only implied by the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a common use case ('configure Out-of-Office') and a concrete body example, which helps an agent understand a realistic invocation. It does not explicitly state when to choose this tool over alternatives, nor does it mention related reading tool like get-mailbox-settings, so the usage guidance remains implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-mail-folderupdate-mail-folderA
Destructive

Update the properties of mailfolder object.

💡 TIP: Renames a mail folder by updating its displayName. Use list-mail-folders to find the folder ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, so the description's mention of 'Update' is consistent but adds no new behavioral context (e.g., permissions, side effects, or whether updates are reversible). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences and a tip, with no extraneous words. It is front-loaded with the main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the common renaming use case but does not mention that other properties (e.g., isHidden) can be updated or warn about potential side effects (e.g., moving messages if parentFolderId is changed). The schema fills some gaps, but given the destructive nature, more context would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, and the schema descriptions for parameters are detailed (e.g., mailFolderId usage, confirm gate). The tool description only adds the 'displayName' tip, which is marginal beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update the properties of mailfolder object' with a specific verb and resource. The tip about renaming via displayName distinguishes this from sibling tools like create-mail-folder, delete-mail-folder, and list-mail-folders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance: it explains a common use case (renaming) and advises using list-mail-folders to get the folder ID. However, it does not explicitly state when not to use the tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-mail-messageupdate-mail-messageA
Destructive

Update an existing Outlook email message by its message ID — for example mark it read or unread (isRead), flag it (flag), change its categories, importance, or edit a draft's subject, body, or recipients.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
messageIdYesValue for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as destructive (destructiveHint=true) and read-only=false, so the description doesn't need to restate mutation. It adds some transparency by noting that subject/body/recipients edits apply to a draft, but it does not disclose other side effects such as permanence of changes, potential confirm gate behavior, or that some fields may be read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and resource, then provides illustrative use cases. No wasted words or redundant repetition of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a large nested body schema and no output schema, the description is adequate but not rich. It explains common use cases but omits important operational context such as the confirm gate (covered in schema but not description), the fact that messageId is required, and the distinction between draft vs sent message update constraints beyond the draft mention.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (80%), so the schema already documents most parameters. The description adds value by mapping examples (isRead, flag, categories, importance, subject, body, recipients) to the 'body' parameter, but it doesn't go beyond what a careful agent could infer from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Update'), the resource ('existing Outlook email message'), and the key method ('by its message ID'). It lists concrete examples of updatable fields (isRead, flag, categories, importance) and even distinguishes draft-specific edits, making the tool's purpose unmistakable and distinct from siblings like delete-mail-message or move-mail-message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use when you need to modify an existing Outlook message's properties. It does not explicitly name alternative tools or state when not to use it, but the context is strong enough that the agent can infer the right scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-mail-ruleupdate-mail-ruleA
Destructive

Change writable properties on a messageRule object and save the changes.

💡 TIP: Updates an existing message rule. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules. Send only the properties to change. Common use: { isEnabled: false } to disable a rule, or update conditions/actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
mailFolderIdYesValue for the 'mailFolderId' path segment. Pass it under the name 'mailFolderId', not as 'id'. Use the 'id' field of the mail folder object as returned by Microsoft Graph.
messageRuleIdYesValue for the 'messageRuleId' path segment. Pass it under the name 'messageRuleId', not as 'id'. Use the 'id' field of the message rule object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating/destructive action. The description adds useful behavioral context by explaining that this is a partial update ('send only the properties to change') and that only writable properties should be modified. It also gives a concrete example of disabling a rule, which helps the agent predict the mutation's effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action. The tip section is useful, though there is minor redundancy: 'Updates an existing message rule' largely restates 'Change writable properties on a messageRule object.' Overall, every major sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-body operation with no output schema, the description provides enough practical context: it explains partial update semantics, where to get the inbox folder ID, and shows a realistic minimal payload. It does not explain how the updated rule is returned, but the schema and annotations cover the input side well, and the operation is conventional.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high at 83%, so the schema does the heavy lifting. The description still adds value by clarifying the body parameter semantics: send only changed properties, and provides a concrete common payload shape like { isEnabled: false }. It also gives guidance on sourcing the mailFolderId from list-mail-folders.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Change writable properties on a messageRule object and save the changes.' It also reinforces the intent by saying 'Updates an existing message rule,' which clearly distinguishes this from sibling tools like create-mail-rule, delete-mail-rule, and list-mail-rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical guidance: use the Inbox folder ID from list-mail-folders, send only the properties to change, and gives a common use case for disabling a rule. It does not explicitly say 'use create-mail-rule for new rules' or 'use delete-mail-rule for removal,' but 'existing message rule' implies this distinction clearly enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-my-calendar-permissionupdate-my-calendar-permissionA
Destructive

Update my calendar permission.

💡 TIP: Changes the role (permission level) granted to an existing share recipient or delegate. Body: { role: 'read' | 'write' | 'delegateWithoutPrivateEventAccess' | 'delegateWithPrivateEventAccess' }. Only the role property is writable — to change the recipient's email or other properties, delete and recreate via delete-my-calendar-permission + create-my-calendar-permission. Get the permission id via list-my-calendar-permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
calendarPermissionIdYesValue for the 'calendarPermissionId' path segment. Pass it under the name 'calendarPermissionId', not as 'id'. Use the 'id' field of the calendar permission object as returned by Microsoft Graph.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The tip states that only the role property is writable, which is a key behavioral constraint beyond what the annotations say. The destructiveHint is present, and the description indirectly implies the operation is not purely additive but modifies an existing permission. However, it does not elaborate on potential side effects or irreversibility, so it falls short of a perfect score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one line plus a well-structured tip. The tip is broken into clear statements about the role values, writable property, and how to obtain the permission id. It avoids redundancy and presents information efficiently without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description and schema together cover the operation, constraints, and confirmation parameter. A gap is that the tool does not specify which calendar it operates on (e.g., the user's primary calendar) since there is no calendarId parameter. This could lead to ambiguity, but given the tool name 'my-calendar' and the lack of alternatives, it is reasonably inferable. The absence of an output schema is acceptable, as confirmed by the instructions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers most parameters with descriptive text, so the baseline is 3. The description adds a crucial semantic: 'Only the role property is writable,' which directly clarifies the intended use of the body parameter and the role field. This elevates the score above the baseline, though the description does not dive into other parameter details already covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update my calendar permission.' The tip clarifies that the operation changes the role for an existing share recipient or delegate, and distinguishes it from create/delete operations. This gives a clear purpose that an agent can use to select the correct tool among similar permission tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs when not to use this tool: 'To change the recipient's email or other properties, delete and recreate via delete-my-calendar-permission + create-my-calendar-permission.' It also tells the agent to get the permission id via list-my-calendar-permissions. This provides clear usage boundaries and directs the agent to alternative actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-outlook-contactupdate-outlook-contactA
Destructive

Update the properties of a contact object.

💡 TIP: emailAddresses array is replaced entirely — include all addresses, not just new ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
contactIdYesValue for the 'contactId' path segment. Pass it under the name 'contactId', not as 'id'. Use the 'id' field of the contact object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive (destructiveHint=true) and not read-only, so the description's job is lighter. The tip about emailAddresses being replaced entirely adds valuable non-obvious behavioral context beyond what annotations or the schema description provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The core purpose is stated first, and the critical gotcha is placed immediately after, making the most important operational detail easy to notice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main non-obvious behavior but remains minimal for a mutation tool with a large nested body schema. It does not explicitly state whether omitted properties are preserved or whether the operation is a partial update, and there is no output schema to clarify the response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (80%), so the baseline is 3. The description adds meaningful semantics for the emailAddresses parameter by warning that the array is wholly replaced, which is not stated in the schema's own parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Update') and resource ('contact object'), which distinguishes it from create/get/delete contact siblings. It does not explicitly differentiate from update-contact-folder, but the resource is specific enough for an agent to disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus create-outlook-contact, delete-outlook-contact, or get-outlook-contact. There is also no mention of prerequisites or cases where an update would be inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-planner-bucketupdate-planner-bucketB
Destructive

Update the properties of plannerbucket object.

💡 TIP: CRITICAL: Requires If-Match header with ETag from get-planner-bucket (use includeHeaders=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchYesETag value.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication
plannerBucketIdYesValue for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation nature is disclosed. The description adds the critical If-Match header requirement with a pointer to get-planner-bucket and includeHeaders=true, which is behavioral context beyond the annotations. However, it does not mention partial vs full update semantics, error behavior if the ETag is stale, or the confirm gate (though that is covered in the schema). It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: a clear purpose statement followed by a compact, high-value tip. It is front-loaded with the action and then provides a critical operational note. The phrasing is slightly awkward ('plannerbucket' without a space) but overall concise and efficient. It avoids unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, nested body object, destructive mutation), the description is minimal. It covers the essential If-Match requirement but omits update semantics (e.g., only provided fields are updated), what happens with conflicting ETags, and any prerequisites like existing bucket existence. However, the rich schema descriptions for parameters and the body partially compensate. An agent would need to rely heavily on the schema and external knowledge to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, meaning most parameters (If-Match, includeHeaders, excludeResponse, plannerBucketId) have descriptions in the schema. The body object is deeply nested with its own field descriptions. The tool description adds no new meaning for parameters; the If-Match tip merely repeats what the schema already says ('ETag value'). With high schema coverage, the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Update the properties of plannerbucket object.' This is a specific verb-resource pairing that distinguishes it from create/delete siblings by virtue of the word 'update'. However, it does not explicitly contrast with these alternatives, so it lacks strong differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus create-planner-bucket, delete-planner-bucket, or get-planner-bucket. It only includes a required-header tip, which is a how-to detail, not a usage context. There are no alternatives named, no conditions for selection, and no exclusions. This leaves the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-planner-taskupdate-planner-taskA
Destructive

Update the properties of plannerTask object.

💡 TIP: CRITICAL: Requires If-Match header with the task's @odata.etag value, otherwise returns 412 Precondition Failed. Get the ETag from get-planner-task with includeHeaders=true. Priority values: 0=Urgent, 1=Important, 3=Medium, 5=Low, 9=unset.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchYesETag value.
plannerTaskIdYesValue for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true. The description adds valuable behavioral context: the If-Match header requirement and the 412 error condition, which is a critical behavioral trait not captured by annotations. It also explains the priority value mapping. The description doesn't contradict annotations. It adds meaningful behavioral disclosure beyond what annotations provide, though it could mention that this is a PATCH operation that only updates specified fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core purpose. The critical If-Match tip is prominently placed with a 💡 emoji and CRITICAL label. The priority values are listed compactly. The description is efficient with no wasted words, though the emoji and formatting could be seen as slightly informal for a tool description. Overall, it's well-structured and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with destructiveHint=true and no output schema, the description covers the critical operational requirements: the If-Match header, the error condition, and the priority mapping. It doesn't explain what the response looks like, but with no output schema, that's less critical. It could mention that only specified properties are updated (PATCH semantics) and that read-only properties should not be included. The description is largely complete for an agent to call this tool correctly, with minor gaps around PATCH semantics and response format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, which is high. The description adds value for the If-Match parameter by explaining the ETag requirement and how to obtain it. It also explains priority values in the description, which complements the schema's priority description. The plannerTaskId parameter has a helpful note in the schema about passing it as 'plannerTaskId' not 'id', which is good. The description adds the critical If-Match context that the schema alone doesn't provide, so it compensates well for the 17% gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Update the properties of plannerTask object.' It distinguishes this from sibling tools like create-planner-task and get-planner-task by the verb. However, it doesn't explicitly differentiate from update-planner-task-details, which is a close sibling that also updates planner task properties. The description is clear but could be more specific about which properties are updated (the main task object vs. the details object).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides critical usage guidance: it explains the If-Match header requirement, the 412 error if missing, and how to get the ETag (from get-planner-task with includeHeaders=true). It also explains priority values. However, it doesn't explicitly state when to use this tool vs. update-planner-task-details, which is a significant sibling that also updates planner task properties. The guidance is strong for the If-Match requirement but lacks explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-planner-task-detailsupdate-planner-task-detailsA
Destructive

Update the properties of plannerTaskDetails object.

💡 TIP: CRITICAL: Requires If-Match header with ETag from get-planner-task-details (use includeHeaders=true). Checklist items use GUID keys: {"checklist": {"": {"title": "...", "isChecked": false}}}.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
If-MatchYesETag value.
plannerTaskIdYesValue for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the essential ETag requirement and checklist format, adding value beyond the annotations (destructiveHint=true). It does not contradict annotations, and the concurrency control detail is a key behavioral trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences plus a tip. Every sentence provides essential information, and the critical tip is front-loaded with 'CRITICAL'. No waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers key aspects (ETag, checklist), it omits information about the response structure or possible errors (e.g., ETag mismatch). Since there is no output schema, describing the return format would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 83% schema coverage, the description adds useful semantics: clarifies the If-Match parameter, checklist GUID format, and the correct usage of plannerTaskId (not as id). This goes beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and the resource ('plannerTaskDetails object'). This distinguishes it from sibling tools like 'update-planner-task' which updates a different object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a critical prerequisite (If-Match header from get-planner-task-details) but does not provide explicit guidance on when to use this tool versus alternatives like update-planner-task. The context is clear but lacks when/when-not logic.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-specific-calendar-eventupdate-specific-calendar-eventA
Destructive

Update a specific calendar event.

💡 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. WARNING: Setting attendees replaces the entire attendee list — include all attendees, not just new ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
eventIdYesValue for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph.
calendarIdYesValue for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as destructive, so the key behavioral disclosure is the attendee warning about replacement of the entire list. This is valuable, non-obvious context about how a mutation behaves and goes beyond the schema and declarations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and the key warnings are front-highlighted, but the lead sentence simply repeats the tool name. The warnings are useful and compact, so overall the structure is acceptable with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and annotations cover the required parameters and mutating/destructive nature. Still, the description omits broader context such as how partial body updates interact with existing fields, confirmation requirements, or how this tool differs from update-calendar-event. It's adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (83%), so the baseline is 3. The description adds useful semantics for the attendees list: don't guess emails, use list-users, and supply all existing attendees. This helps the agent construct a correct body even though the schema already documents the attendee shape.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: update a specific calendar event. However, it barely goes beyond the tool name and does not differentiate itself from the similarly named sibling update-calendar-event, so the 'specific' distinction is left for the agent to infer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to choose this tool over the very similar update-calendar-event, nor when not to use it. The list-users tip is a useful prerequisite but does not explain the tool's selection criteria or exclude alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-subscriptionupdate-subscriptionB
Destructive

Renew a subscription by extending its expiry time. The table in the Permissions section lists the resources that support subscribing to change notifications. Subscriptions expire after a length of time that varies by resource type. In order to avoid missing change notifications, an app should renew its subscriptions well in advance of their expiry date. See subscription for maximum length of a subscription for each resource type.

💡 TIP: Renews a webhook subscription by extending its expiration. Body: { expirationDateTime (ISO 8601, new expiry) }. Call before the current expirationDateTime to avoid missing notifications. Max extension varies by resource type — check Microsoft Graph docs for subscription limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
subscriptionIdYesValue for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a destructive operation (destructiveHint=true, readOnlyHint=false). The description says 'renew,' which is consistent, but it adds little behavioral detail beyond the annotations. It does not mention potential side effects or what happens if renewal fails, relying on the annotations to convey non-read-only behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise, with a clear purpose statement followed by a tip. It front-loads the main action but includes somewhat verbose caveats about resource types and documentation. Could be tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 params, nested body, destructive hint, no output schema), the description does not fully cover expected outcomes or error scenarios. It lacks details on what the response looks like or common failure modes. More completeness is needed for safe usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so baseline 3. The description adds value by focusing on the body's expirationDateTime and subscriptionId, including a tip on usage. However, many nested body properties are not explained in the description, leaving some parameter semantics to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool renews a subscription by extending its expiry, using a specific verb ('renew') and resource ('subscription'). It distinguishes from siblings like create-subscription or delete-subscription, though it does not explicitly compare. The tip reinforces the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises renewing well in advance of expiry and mentions checking resource-type-specific maximum extensions. It provides context for when to use the tool but does not explicitly state when not to use it or mention alternatives. The guidance is present but not comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-todo-taskupdate-todo-taskA
Destructive

Update the properties of a todoTask object.

💡 TIP: Updates a Microsoft To Do task. Use this to mark a to-do item complete or done (body: { status: "completed" }), reopen it (status: "notStarted"), rename it (title), or change its due date (dueDateTime), reminder (reminderDateTime), importance, or notes (body). Requires todoTaskListId from list-todo-task-lists and todoTaskId from list-todo-tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
todoTaskIdYesValue for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states that it updates the task, which implies modification, but does not explicitly warn about destructive implications or mention permissions or side effects. The annotations already indicate destructiveHint and readOnlyHint false, so the description adds minimal behavioral context beyond what is implied by 'update'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized: a clear opening sentence followed by a TIP with examples and prerequisites. No redundancy or unnecessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential information needed to invoke the tool: what it does, common use cases, and required parameter sourcing. It does not mention the response format or error cases, but given that there is no output schema and the operation is straightforward, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover most parameters (83% coverage), and the tool description reinforces the purpose of the body parameter (e.g., status, title, dueDateTime) and clarifies the source of the required IDs. It adds practical guidance on how to use parameters, going slightly beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update the properties of a todoTask object') and provides concrete examples of updates (mark complete, rename, change due date, etc.). It unambiguously identifies the resource being modified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'Use this to' guidance with specific scenarios, and mentions the required IDs (todoTaskListId and todoTaskId) that must be sourced from list operations. It also shows example usage for common updates, making it highly actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-todo-task-listupdate-todo-task-listA
Destructive

Update the properties of a todoTaskList object.

💡 TIP: Renames a Microsoft To Do task list. Body: { displayName: 'New name' }. Only displayName is writable. Built-in lists (Flagged emails, the default Tasks list) cannot be renamed — the API returns an error. Get list ids via list-todo-task-lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
todoTaskListIdYesValue for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph.
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description doesn't need to restate that. The description adds valuable behavioral context: the API returns an error for built-in lists, and only displayName is writable. It also mentions the confirm gate in the schema, but the description itself doesn't mention the confirm parameter. However, the description's tip about the error case and the writable property goes beyond annotations, so a 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the purpose, and the tip immediately provides the most critical usage detail (rename, body format, writable property, error case, and how to get IDs). Every sentence earns its place; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 params, nested body object, no output schema), the description covers the essential points: what to update, the only writable field, the error case, and how to obtain the ID. It doesn't mention the confirm parameter or the includeHeaders/excludeResponse options, but those are self-explanatory from the schema. The description is complete enough for an agent to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, and the description adds key semantics: it clarifies that the body should contain { displayName: 'New name' } and that only displayName is writable. It also clarifies the todoTaskListId parameter by saying to pass it under that name and use the 'id' field from list-todo-task-lists. This adds meaning beyond the schema's generic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a todoTaskList object, and the tip explicitly says it renames a Microsoft To Do task list. It specifies the writable property (displayName) and distinguishes it from related operations like list-todo-task-lists. The verb 'update' plus the resource 'todoTaskList' is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: it says only displayName is writable, and it warns that built-in lists (Flagged emails, default Tasks list) cannot be renamed and will return an error. It also tells the agent to get list ids via list-todo-task-lists, which is a clear pointer to the prerequisite step. This is strong usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload-file-contentupload-file-contentB
Destructive

The content stream, if the item represents a file.

💡 TIP: Body is a base64-encoded string of the file bytes; the server decodes it before PUT. Graph accepts up to 250MB here, but the whole string travels as a tool argument and a truncated one decodes to a truncated file with no error, so use create-upload-session rather than emitting a large base64 string. For new files use path format: /items/root:/path/to/file.txt:/content. Overwrites existing files without warning.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesBase64-encoded file content. The server decodes it and PUTs the raw bytes to Microsoft Graph.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
driveIdYesValue for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph.
driveItemIdYesValue for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses several important behaviors: the server decodes base64 before PUT, truncated base64 decodes to a truncated file with no error, and it overwrites existing files without warning. These go beyond the annotations' destructiveHint and provide critical risk information, though it stops short of covering all side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is a vague fragment that does not convey purpose and could be removed. The tip is informative but the description would benefit from a clear verb-first summary and moving the tip into an optional note. As structured, it is under-specified and poorly front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (6 params, destructive operation), the description does a good job warning about overwrites and truncation and pointing to create-upload-session for large files. However, it does not describe the response/return value, prerequisites like authentication, or how the path format interacts with the driveItemId parameter, leaving some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the description adds only marginal value beyond it. It clarifies that 'body' is base64-encoded and mentions an alternative path format for new files, which is useful but not essential given the schema already explains each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the noun phrase 'The content stream, if the item represents a file,' which does not clearly state an action. The tip implies the tool PUTs base64-encoded content to a drive item, but the primary description is vague and never explicitly says what the tool does. It also does not distinguish this tool from siblings in the main description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip explicitly advises using create-upload-session for large files, providing a clear alternative. It also gives a path format for new files, which is a direct usage instruction. However, it does not explicitly state the conditions for using this tool (e.g., small files, overwriting existing content) beyond implication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload-my-profile-photoupload-my-profile-photoA
Destructive

Update the photo for the specified contact, group, team, or user in a tenant. The size of the photo you can update to is limited to 4 MB. You can use either PATCH or PUT for this operation.

💡 TIP: Uploads a new profile photo for the signed-in user. Body is a base64-encoded string of the image bytes (the server decodes before PUT). Photo must be JPEG, max 4 MB; the base64 travels as a tool argument and a truncated one is written without error, so resize before encoding instead of emitting a large string. Microsoft 365 generates HD downsized variants automatically (48x48, 64x64, 96x96, 120x120, 240x240, 360x360, 432x432, 504x504, 648x648). For work or school accounts, ProfilePhoto.ReadWrite.All is the more granular alternative permission. Use download-bytes with target=/me/photo/$value to retrieve the current photo.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesBase64-encoded file content. The server decodes it and PUTs the raw bytes to Microsoft Graph.
confirmNoFor destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: "confirmation_required" } without touching user data.
includeHeadersNoInclude response headers (including ETag) in the response metadata
excludeResponseNoExclude the full response body and only return success or failure indication

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations already mark this as destructive/non-read-only, the description adds genuine behavioral value: the 4 MB size ceiling, the fact that a truncated base64 payload is written 'without error' so the caller must validate, the JPEG-only constraint, server-side decoding behavior, and the auto-generated thumbnails with exact pixel sizes. This makes failure modes and side effects far more predictable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At ~146 words the text is longer than average, but it is efficiently structured with a lead paragraph, a tip, and a retrieval hint, and almost every clause earns its place. The 4 MB limit is mentioned twice and the guidance could be slightly tightened, but it remains scannable and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive write tool with no output schema, the description covers all the key operational aspects: expected format, size caps, error behavior, permissions, and the companion read operation. The only substantive gap is the unresolved scope confusion (tenant-wide entity vs. signed-in user), plus little clarity on the response shape beyond the confirm-gate error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with already-rich per-parameter documentation (e.g., `confirm` explains the gate and error contract). The description supplements this by explaining what the base64 payload becomes on the server (decoded to raw bytes, PUT via Graph), warns about large-string risk, and reinforces JPEG/4MB validation rules—adding context around the schema rather than repeating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb-resource-scope pattern ('Update the photo for the specified contact, group, team, or user') that immediately distinguishes it from sibling tools. However, this scope statement conflicts with the tip, which says it uploads 'for the signed-in user'—and the schema exposes no entity-ID parameter—so an agent might be misled about targeting arbitrary entities. Minor internal redundancy with '4 MB' stated twice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Excellent guidance: it explicitly names the sibling `download-bytes` with a full example target for the inverse operation, and it flags the ProfilePhoto.ReadWrite.All permission as a more granular alternative for work/school accounts. It does not, however, address when to choose this over other update/upload siblings (e.g., upload-file-content), leaving some comparison gaps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify-loginA

Check current Microsoft authentication status

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only says 'check current status' without detailing behavior (e.g., network request, what status means, return type). Misses opportunity to disclose side effects or lack thereof.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no wasted words. Purpose is front-loaded and immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description sufficiently conveys the tool's purpose for a simple status check. Could specify return value format (e.g., boolean) but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. Baseline 4 applies; description adds no parameter info but none needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool checks Microsoft authentication status, distinguishing it from sibling tools like login or logout. Verb 'check' and resource 'authentication status' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., before operations that require authentication). The description does not state context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev0.149.1
    • Changedget-mail-message-mime1 field changed
      • addedInput schema / properties / Accept
        Added value: +{
        +  "description": "Accept header for the response representation. Defaults to \"text/plain\". Only set this when Graph asks for a different format — e.g. a 403 SpeakerAttributionNotAllowed on transcript content names the media type to retry with.",
        +  "type": "string"
        +}
  2. 36 tool updatesv0.145.2
    • Changedcreate-calendar33 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "enum": [
        -      "unknown",
        -      "skypeForBusiness",
        -      "skypeForConsumer",
        -      "teamsForBusiness"
        -    ],
        -    "type": "string"
        -  },
        -  "def1": {
        -    "enum": [
        -      "none",
        -      "freeBusyRead",
        -      "limitedRead",
        -      "read",
        -      "write",
        -      "delegateWithoutPrivateEventAccess",
        -      "delegateWithPrivateEventAccess",
        -      "custom"
        -    ],
        -    "type": "string"
        -  },
        -  "def2": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "allowNewTimeProposals": {
        -        "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "attachments": {
        -        "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "attendees": {
        -        "description": "The collection of attendees for the event.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "emailAddress": {
        -              "$ref": "#/$defs/def7"
        -            },
        -            "proposedNewTime": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "end": {
        -                  "$ref": "#/$defs/def6"
        -                },
        -                "start": {
        -                  "$ref": "#/$defs/def6"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "status": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "response": {
        -                  "enum": [
        -                    "none",
        -                    "organizer",
        -                    "tentativelyAccepted",
        -                    "accepted",
        -                    "declined",
        -                    "notResponded"
        -                  ],
        -                  "type": "string"
        -                },
        -                "time": {
        -                  "anyOf": [
        -                    {
        -                      "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                      "format": "date-time",
        -                      "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": {
        -              "enum": [
        -                "required",
        -                "optional",
        -                "resource"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "end": {
        -        "$ref": "#/$defs/def6"
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "isAllDay": {
        -        "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isOnlineMeeting": {
        -        "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional.  After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isReminderOn": {
        -        "description": "Set to true if an alert is set to remind the user of the event.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "location": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "city": {
        -                "description": "The city.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "countryOrRegion": {
        -                "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "postalCode": {
        -                "description": "The postal code.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "state": {
        -                "description": "The state.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "street": {
        -                "description": "The street.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "coordinates": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "accuracy": {
        -                "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "altitude": {
        -                "description": "The altitude of the location. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "altitudeAccuracy": {
        -                "description": "The accuracy of the altitude. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "latitude": {
        -                "description": "The latitude of the location. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "longitude": {
        -                "description": "The longitude of the location. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "displayName": {
        -            "description": "The name associated with the location.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "locationEmailAddress": {
        -            "description": "Optional email address of the location.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "locationType": {
        -            "enum": [
        -              "default",
        -              "conferenceRoom",
        -              "homeAddress",
        -              "businessAddress",
        -              "geoCoordinates",
        -              "streetAddress",
        -              "hotel",
        -              "restaurant",
        -              "localBusiness",
        -              "postalAddress"
        -            ],
        -            "type": "string"
        -          },
        -          "locationUri": {
        -            "description": "Optional URI representing the location.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "uniqueId": {
        -            "description": "For internal use only.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "uniqueIdType": {
        -            "enum": [
        -              "unknown",
        -              "locationStore",
        -              "directory",
        -              "private",
        -              "bing"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.",
        -        "items": {
        -          "$ref": "#/$defs/def3"
        -        },
        -        "type": "array"
        -      },
        -      "recurrence": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "pattern": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "dayOfMonth": {
        -                "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.",
        -                "maximum": 2147483647,
        -                "minimum": -2147483648,
        -                "type": "number"
        -              },
        -              "daysOfWeek": {
        -                "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern.  Required if type is weekly, relativeMonthly, or relativeYearly.",
        -                "items": {
        -                  "anyOf": [
        -                    {
        -                      "$ref": "#/$defs/def4"
        -                    },
        -                    {
        -                      "additionalProperties": true,
        -                      "properties": {},
        -                      "type": "object"
        -                    }
        -                  ]
        -                },
        -                "type": "array"
        -              },
        -              "firstDayOfWeek": {
        -                "$ref": "#/$defs/def4"
        -              },
        -              "index": {
        -                "enum": [
        -                  "first",
        -                  "second",
        -                  "third",
        -                  "fourth",
        -                  "last"
        -                ],
        -                "type": "string"
        -              },
        -              "interval": {
        -                "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.",
        -                "maximum": 2147483647,
        -                "minimum": -2147483648,
        -                "type": "number"
        -              },
        -              "month": {
        -                "description": "The month in which the event occurs.  This is a number from 1 to 12.",
        -                "maximum": 2147483647,
        -                "minimum": -2147483648,
        -                "type": "number"
        -              },
        -              "type": {
        -                "enum": [
        -                  "daily",
        -                  "weekly",
        -                  "absoluteMonthly",
        -                  "relativeMonthly",
        -                  "absoluteYearly",
        -                  "relativeYearly"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "range": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "endDate": {
        -                "anyOf": [
        -                  {
        -                    "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.",
        -                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate."
        -              },
        -              "numberOfOccurrences": {
        -                "description": "The number of times to repeat the event. Required and must be positive if type is numbered.",
        -                "maximum": 2147483647,
        -                "minimum": -2147483648,
        -                "type": "number"
        -              },
        -              "recurrenceTimeZone": {
        -                "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "startDate": {
        -                "anyOf": [
        -                  {
        -                    "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.",
        -                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required."
        -              },
        -              "type": {
        -                "enum": [
        -                  "endDate",
        -                  "noEnd",
        -                  "numbered"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "reminderMinutesBeforeStart": {
        -        "anyOf": [
        -          {
        -            "description": "The number of minutes before the event start time that the reminder alert occurs.",
        -            "maximum": 2147483647,
        -            "minimum": -2147483648,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The number of minutes before the event start time that the reminder alert occurs."
        -      },
        -      "responseRequested": {
        -        "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "sensitivity": {
        -        "enum": [
        -          "normal",
        -          "personal",
        -          "private",
        -          "confidential"
        -        ],
        -        "type": "string"
        -      },
        -      "showAs": {
        -        "enum": [
        -          "unknown",
        -          "free",
        -          "tentative",
        -          "busy",
        -          "oof",
        -          "workingElsewhere"
        -        ],
        -        "type": "string"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.",
        -        "items": {
        -          "$ref": "#/$defs/def5"
        -        },
        -        "type": "array"
        -      },
        -      "start": {
        -        "$ref": "#/$defs/def6"
        -      },
        -      "subject": {
        -        "description": "The text of the event's subject line.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "enum": [
        -          "singleInstance",
        -          "occurrence",
        -          "exception",
        -          "seriesMaster"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def3": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "value": {
        -        "description": "A collection of property values.",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def4": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  },
        -  "def5": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "value": {
        -        "description": "A property value.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def6": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def7": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "address": {
        -        "description": "The email address of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "The display name of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / allowedOnlineMeetingProviders / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def0"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "unknown",
        +      "skypeForBusiness",
        +      "skypeForConsumer",
        +      "teamsForBusiness"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / body / properties / calendarPermissions / items / properties / allowedRoles / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def1"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "none",
        +      "freeBusyRead",
        +      "limitedRead",
        +      "read",
        +      "write",
        +      "delegateWithoutPrivateEventAccess",
        +      "delegateWithPrivateEventAccess",
        +      "custom"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / properties
        Added value: +{
        +  "address": {
        +    "description": "The email address of the person or entity.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "name": {
        +    "description": "The display name of the person or entity.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / calendarPermissions / items / properties / role / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / role / enum
        Added value: +[
        +  "none",
        +  "freeBusyRead",
        +  "limitedRead",
        +  "read",
        +  "write",
        +  "delegateWithoutPrivateEventAccess",
        +  "delegateWithPrivateEventAccess",
        +  "custom"
        +]
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / role / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / calendarView / items / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / calendarView / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / calendarView / items / properties
        Added value: +{
        +  "allowNewTimeProposals": {
        +    "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "attachments": {
        +    "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "contentType": {
        +          "description": "The MIME type.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "isInline": {
        +          "description": "true if the attachment is an inline attachment; otherwise, false.",
        +          "type": "boolean"
        +        },
        +        "lastModifiedDateTime": {
        +          "anyOf": [
        +            {
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +              "format": "date-time",
        +              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +        },
        +        "name": {
        +          "description": "The attachment's file name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "size": {
        +          "description": "The length of the attachment in bytes.",
        +          "maximum": 2147483647,
        +          "minimum": -2147483648,
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "attendees": {
        +    "description": "The collection of attendees for the event.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "emailAddress": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "address": {
        +              "description": "The email address of the person or entity.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "name": {
        +              "description": "The display name of the person or entity.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "proposedNewTime": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "end": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dateTime": {
        +                  "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                  "type": "string"
        +                },
        +                "timeZone": {
        +                  "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "start": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dateTime": {
        +                  "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                  "type": "string"
        +                },
        +                "timeZone": {
        +                  "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "status": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "response": {
        +              "enum": [
        +                "none",
        +                "organizer",
        +                "tentativelyAccepted",
        +                "accepted",
        +                "declined",
        +                "notResponded"
        +              ],
        +              "type": "string"
        +            },
        +            "time": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": {
        +          "enum": [
        +            "required",
        +            "optional",
        +            "resource"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "body": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "content": {
        +        "description": "The content of the item.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "contentType": {
        +        "enum": [
        +          "text",
        +          "html"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "categories": {
        +    "description": "The categories associated with the item",
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  },
        +  "changeKey": {
        +    "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "createdDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +  },
        +  "end": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "importance": {
        +    "enum": [
        +      "low",
        +      "normal",
        +      "high"
        +    ],
        +    "type": "string"
        +  },
        +  "isAllDay": {
        +    "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isOnlineMeeting": {
        +    "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional.  After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isReminderOn": {
        +    "description": "Set to true if an alert is set to remind the user of the event.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "lastModifiedDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +  },
        +  "location": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "city": {
        +            "description": "The city.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "countryOrRegion": {
        +            "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "postalCode": {
        +            "description": "The postal code.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "state": {
        +            "description": "The state.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "street": {
        +            "description": "The street.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "coordinates": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "accuracy": {
        +            "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "altitude": {
        +            "description": "The altitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "altitudeAccuracy": {
        +            "description": "The accuracy of the altitude. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "latitude": {
        +            "description": "The latitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "longitude": {
        +            "description": "The longitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "displayName": {
        +        "description": "The name associated with the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "locationEmailAddress": {
        +        "description": "Optional email address of the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "locationType": {
        +        "enum": [
        +          "default",
        +          "conferenceRoom",
        +          "homeAddress",
        +          "businessAddress",
        +          "geoCoordinates",
        +          "streetAddress",
        +          "hotel",
        +          "restaurant",
        +          "localBusiness",
        +          "postalAddress"
        +        ],
        +        "type": "string"
        +      },
        +      "locationUri": {
        +        "description": "Optional URI representing the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "uniqueId": {
        +        "description": "For internal use only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "uniqueIdType": {
        +        "enum": [
        +          "unknown",
        +          "locationStore",
        +          "directory",
        +          "private",
        +          "bing"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "multiValueExtendedProperties": {
        +    "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "A collection of property values.",
        +          "items": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "recurrence": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "pattern": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "dayOfMonth": {
        +            "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "daysOfWeek": {
        +            "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern.  Required if type is weekly, relativeMonthly, or relativeYearly.",
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "sunday",
        +                    "monday",
        +                    "tuesday",
        +                    "wednesday",
        +                    "thursday",
        +                    "friday",
        +                    "saturday"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "type": "array"
        +          },
        +          "firstDayOfWeek": {
        +            "enum": [
        +              "sunday",
        +              "monday",
        +              "tuesday",
        +              "wednesday",
        +              "thursday",
        +              "friday",
        +              "saturday"
        +            ],
        +            "type": "string"
        +          },
        +          "index": {
        +            "enum": [
        +              "first",
        +              "second",
        +              "third",
        +              "fourth",
        +              "last"
        +            ],
        +            "type": "string"
        +          },
        +          "interval": {
        +            "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "month": {
        +            "description": "The month in which the event occurs.  This is a number from 1 to 12.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "type": {
        +            "enum": [
        +              "daily",
        +              "weekly",
        +              "absoluteMonthly",
        +              "relativeMonthly",
        +              "absoluteYearly",
        +              "relativeYearly"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "range": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "endDate": {
        +            "anyOf": [
        +              {
        +                "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate."
        +          },
        +          "numberOfOccurrences": {
        +            "description": "The number of times to repeat the event. Required and must be positive if type is numbered.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "recurrenceTimeZone": {
        +            "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "startDate": {
        +            "anyOf": [
        +              {
        +                "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required."
        +          },
        +          "type": {
        +            "enum": [
        +              "endDate",
        +              "noEnd",
        +              "numbered"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "reminderMinutesBeforeStart": {
        +    "anyOf": [
        +      {
        +        "description": "The number of minutes before the event start time that the reminder alert occurs.",
        +        "maximum": 2147483647,
        +        "minimum": -2147483648,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The number of minutes before the event start time that the reminder alert occurs."
        +  },
        +  "responseRequested": {
        +    "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "sensitivity": {
        +    "enum": [
        +      "normal",
        +      "personal",
        +      "private",
        +      "confidential"
        +    ],
        +    "type": "string"
        +  },
        +  "showAs": {
        +    "enum": [
        +      "unknown",
        +      "free",
        +      "tentative",
        +      "busy",
        +      "oof",
        +      "workingElsewhere"
        +    ],
        +    "type": "string"
        +  },
        +  "singleValueExtendedProperties": {
        +    "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "A property value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "start": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "subject": {
        +    "description": "The text of the event's subject line.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "type": {
        +    "enum": [
        +      "singleInstance",
        +      "occurrence",
        +      "exception",
        +      "seriesMaster"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / calendarView / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / defaultOnlineMeetingProvider / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / defaultOnlineMeetingProvider / enum
        Added value: +[
        +  "unknown",
        +  "skypeForBusiness",
        +  "skypeForConsumer",
        +  "teamsForBusiness"
        +]
      • addedInput schema / properties / body / properties / defaultOnlineMeetingProvider / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / events / items / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / events / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / events / items / properties
        Added value: +{
        +  "allowNewTimeProposals": {
        +    "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "attachments": {
        +    "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "contentType": {
        +          "description": "The MIME type.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "isInline": {
        +          "description": "true if the attachment is an inline attachment; otherwise, false.",
        +          "type": "boolean"
        +        },
        +        "lastModifiedDateTime": {
        +          "anyOf": [
        +            {
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +              "format": "date-time",
        +              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +        },
        +        "name": {
        +          "description": "The attachment's file name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "size": {
        +          "description": "The length of the attachment in bytes.",
        +          "maximum": 2147483647,
        +          "minimum": -2147483648,
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "attendees": {
        +    "description": "The collection of attendees for the event.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "emailAddress": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "address": {
        +              "description": "The email address of the person or entity.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "name": {
        +              "description": "The display name of the person or entity.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "proposedNewTime": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "end": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dateTime": {
        +                  "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                  "type": "string"
        +                },
        +                "timeZone": {
        +                  "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "start": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dateTime": {
        +                  "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                  "type": "string"
        +                },
        +                "timeZone": {
        +                  "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "status": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "response": {
        +              "enum": [
        +                "none",
        +                "organizer",
        +                "tentativelyAccepted",
        +                "accepted",
        +                "declined",
        +                "notResponded"
        +              ],
        +              "type": "string"
        +            },
        +            "time": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": {
        +          "enum": [
        +            "required",
        +            "optional",
        +            "resource"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "body": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "content": {
        +        "description": "The content of the item.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "contentType": {
        +        "enum": [
        +          "text",
        +          "html"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "categories": {
        +    "description": "The categories associated with the item",
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  },
        +  "changeKey": {
        +    "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "createdDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +  },
        +  "end": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "importance": {
        +    "enum": [
        +      "low",
        +      "normal",
        +      "high"
        +    ],
        +    "type": "string"
        +  },
        +  "isAllDay": {
        +    "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isOnlineMeeting": {
        +    "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional.  After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isReminderOn": {
        +    "description": "Set to true if an alert is set to remind the user of the event.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "lastModifiedDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +  },
        +  "location": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "city": {
        +            "description": "The city.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "countryOrRegion": {
        +            "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "postalCode": {
        +            "description": "The postal code.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "state": {
        +            "description": "The state.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "street": {
        +            "description": "The street.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "coordinates": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "accuracy": {
        +            "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "altitude": {
        +            "description": "The altitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "altitudeAccuracy": {
        +            "description": "The accuracy of the altitude. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "latitude": {
        +            "description": "The latitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "longitude": {
        +            "description": "The longitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "displayName": {
        +        "description": "The name associated with the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "locationEmailAddress": {
        +        "description": "Optional email address of the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "locationType": {
        +        "enum": [
        +          "default",
        +          "conferenceRoom",
        +          "homeAddress",
        +          "businessAddress",
        +          "geoCoordinates",
        +          "streetAddress",
        +          "hotel",
        +          "restaurant",
        +          "localBusiness",
        +          "postalAddress"
        +        ],
        +        "type": "string"
        +      },
        +      "locationUri": {
        +        "description": "Optional URI representing the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "uniqueId": {
        +        "description": "For internal use only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "uniqueIdType": {
        +        "enum": [
        +          "unknown",
        +          "locationStore",
        +          "directory",
        +          "private",
        +          "bing"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "multiValueExtendedProperties": {
        +    "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "A collection of property values.",
        +          "items": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "recurrence": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "pattern": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "dayOfMonth": {
        +            "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "daysOfWeek": {
        +            "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern.  Required if type is weekly, relativeMonthly, or relativeYearly.",
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "sunday",
        +                    "monday",
        +                    "tuesday",
        +                    "wednesday",
        +                    "thursday",
        +                    "friday",
        +                    "saturday"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "type": "array"
        +          },
        +          "firstDayOfWeek": {
        +            "enum": [
        +              "sunday",
        +              "monday",
        +              "tuesday",
        +              "wednesday",
        +              "thursday",
        +              "friday",
        +              "saturday"
        +            ],
        +            "type": "string"
        +          },
        +          "index": {
        +            "enum": [
        +              "first",
        +              "second",
        +              "third",
        +              "fourth",
        +              "last"
        +            ],
        +            "type": "string"
        +          },
        +          "interval": {
        +            "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "month": {
        +            "description": "The month in which the event occurs.  This is a number from 1 to 12.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "type": {
        +            "enum": [
        +              "daily",
        +              "weekly",
        +              "absoluteMonthly",
        +              "relativeMonthly",
        +              "absoluteYearly",
        +              "relativeYearly"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "range": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "endDate": {
        +            "anyOf": [
        +              {
        +                "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate."
        +          },
        +          "numberOfOccurrences": {
        +            "description": "The number of times to repeat the event. Required and must be positive if type is numbered.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "recurrenceTimeZone": {
        +            "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "startDate": {
        +            "anyOf": [
        +              {
        +                "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required."
        +          },
        +          "type": {
        +            "enum": [
        +              "endDate",
        +              "noEnd",
        +              "numbered"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "reminderMinutesBeforeStart": {
        +    "anyOf": [
        +      {
        +        "description": "The number of minutes before the event start time that the reminder alert occurs.",
        +        "maximum": 2147483647,
        +        "minimum": -2147483648,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The number of minutes before the event start time that the reminder alert occurs."
        +  },
        +  "responseRequested": {
        +    "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "sensitivity": {
        +    "enum": [
        +      "normal",
        +      "personal",
        +      "private",
        +      "confidential"
        +    ],
        +    "type": "string"
        +  },
        +  "showAs": {
        +    "enum": [
        +      "unknown",
        +      "free",
        +      "tentative",
        +      "busy",
        +      "oof",
        +      "workingElsewhere"
        +    ],
        +    "type": "string"
        +  },
        +  "singleValueExtendedProperties": {
        +    "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "A property value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "start": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "subject": {
        +    "description": "The text of the event's subject line.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "type": {
        +    "enum": [
        +      "singleInstance",
        +      "occurrence",
        +      "exception",
        +      "seriesMaster"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / events / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / multiValueExtendedProperties / items / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / multiValueExtendedProperties / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / multiValueExtendedProperties / items / properties
        Added value: +{
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "value": {
        +    "description": "A collection of property values.",
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / body / properties / multiValueExtendedProperties / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / owner / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / owner / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / owner / properties
        Added value: +{
        +  "address": {
        +    "description": "The email address of the person or entity.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "name": {
        +    "description": "The display name of the person or entity.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / owner / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / singleValueExtendedProperties / items / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / singleValueExtendedProperties / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / singleValueExtendedProperties / items / properties
        Added value: +{
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "value": {
        +    "description": "A property value.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / singleValueExtendedProperties / items / type
        Added value: +"object"
    • Changedcreate-calendar-event21 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / end / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / end / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / end / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / end / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def0"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enum
        Added value: +[
        +  "sunday",
        +  "monday",
        +  "tuesday",
        +  "wednesday",
        +  "thursday",
        +  "friday",
        +  "saturday"
        +]
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / start / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / start / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / start / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / start / type
        Added value: +"object"
    • Changedcreate-contact-in-folder9 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "city": {
        -        "description": "The city.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "countryOrRegion": {
        -        "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postalCode": {
        -        "description": "The postal code.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "state": {
        -        "description": "The state.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "street": {
        -        "description": "The street.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / businessAddress / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / businessAddress / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / businessAddress / properties
        Added value: +{
        +  "city": {
        +    "description": "The city.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "countryOrRegion": {
        +    "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "postalCode": {
        +    "description": "The postal code.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "state": {
        +    "description": "The state.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "street": {
        +    "description": "The street.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / businessAddress / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / homeAddress / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / homeAddress / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / homeAddress / properties
        Added value: +{
        +  "city": {
        +    "description": "The city.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "countryOrRegion": {
        +    "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "postalCode": {
        +    "description": "The postal code.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "state": {
        +    "description": "The state.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "street": {
        +    "description": "The street.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / homeAddress / type
        Added value: +"object"
    • Changedcreate-draft-email29 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / bccRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / bccRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / bccRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / bccRecipients / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / ccRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / ccRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / ccRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / ccRecipients / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / flag / properties / completedDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / flag / properties / completedDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / flag / properties / completedDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / flag / properties / completedDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / flag / properties / dueDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / flag / properties / dueDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / flag / properties / dueDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / flag / properties / dueDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / flag / properties / startDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / flag / properties / startDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / flag / properties / startDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / flag / properties / startDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / from / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / from / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / from / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / from / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / toRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / toRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / toRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / toRecipients / items / type
        Added value: +"object"
    • Changedcreate-forward-draft6 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/$defs/def0"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "dueDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "emailAddress": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "address": {
        +                "description": "The email address of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "name": {
        +                "description": "The display name of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / ToRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / ToRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / ToRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / ToRecipients / items / type
        Added value: +"object"
    • Changedcreate-mail-rule180 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "enum": [
        -      "low",
        -      "normal",
        -      "high"
        -    ],
        -    "type": "string"
        -  },
        -  "def10": {
        -    "description": "Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def11": {
        -    "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def12": {
        -    "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def13": {
        -    "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def14": {
        -    "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def15": {
        -    "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def16": {
        -    "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def17": {
        -    "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def18": {
        -    "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def19": {
        -    "description": "Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def2": {
        -    "description": "Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def20": {
        -    "enum": [
        -      "any",
        -      "call",
        -      "doNotForward",
        -      "followUp",
        -      "fyi",
        -      "forward",
        -      "noResponseNecessary",
        -      "read",
        -      "reply",
        -      "replyToAll",
        -      "review"
        -    ],
        -    "type": "string"
        -  },
        -  "def21": {
        -    "description": "Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def22": {
        -    "description": "Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def23": {
        -    "description": "Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def24": {
        -    "enum": [
        -      "normal",
        -      "personal",
        -      "private",
        -      "confidential"
        -    ],
        -    "type": "string"
        -  },
        -  "def25": {
        -    "description": "Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def26": {
        -    "description": "Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def3": {
        -    "description": "Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def4": {
        -    "description": "Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def5": {
        -    "description": "Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "$ref": "#/$defs/def0"
        -    },
        -    "type": "array"
        -  },
        -  "def6": {
        -    "description": "Indicates whether an incoming message must have attachments in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def7": {
        -    "description": "Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def8": {
        -    "$ref": "#/$defs/def1"
        -  },
        -  "def9": {
        -    "description": "Indicates whether an incoming message must be an approval request in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / actions / properties / forwardTo / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / actions / properties / forwardTo / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / actions / properties / forwardTo / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / actions / properties / forwardTo / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / actions / properties / markImportance / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / actions / properties / markImportance / enum
        Added value: +[
        +  "low",
        +  "normal",
        +  "high"
        +]
      • addedInput schema / properties / body / properties / actions / properties / markImportance / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / actions / properties / redirectTo / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / actions / properties / redirectTo / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / actions / properties / redirectTo / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / actions / properties / redirectTo / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / conditions / properties / bodyContains / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / conditions / properties / bodyContains / description
        Added value: +"Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / bodyContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / bodyContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / description
        Added value: +"Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / categories / $ref
        Removed value: -"#/$defs/def4"
      • addedInput schema / properties / body / properties / conditions / properties / categories / description
        Added value: +"Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / categories / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / categories / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / fromAddresses / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / conditions / properties / fromAddresses / description
        Added value: +"Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / fromAddresses / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "emailAddress": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "address": {
        +          "description": "The email address of the person or entity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "The display name of the person or entity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / conditions / properties / fromAddresses / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / hasAttachments / $ref
        Removed value: -"#/$defs/def6"
      • addedInput schema / properties / body / properties / conditions / properties / hasAttachments / description
        Added value: +"Indicates whether an incoming message must have attachments in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / hasAttachments / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / headerContains / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / conditions / properties / headerContains / description
        Added value: +"Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / headerContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / headerContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / importance / $ref
        Removed value: -"#/$defs/def8"
      • addedInput schema / properties / body / properties / conditions / properties / importance / enum
        Added value: +[
        +  "low",
        +  "normal",
        +  "high"
        +]
      • addedInput schema / properties / body / properties / conditions / properties / importance / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / conditions / properties / isApprovalRequest / $ref
        Removed value: -"#/$defs/def9"
      • addedInput schema / properties / body / properties / conditions / properties / isApprovalRequest / description
        Added value: +"Indicates whether an incoming message must be an approval request in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isApprovalRequest / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isAutomaticForward / $ref
        Removed value: -"#/$defs/def10"
      • addedInput schema / properties / body / properties / conditions / properties / isAutomaticForward / description
        Added value: +"Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isAutomaticForward / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isAutomaticReply / $ref
        Removed value: -"#/$defs/def11"
      • addedInput schema / properties / body / properties / conditions / properties / isAutomaticReply / description
        Added value: +"Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isAutomaticReply / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isEncrypted / $ref
        Removed value: -"#/$defs/def12"
      • addedInput schema / properties / body / properties / conditions / properties / isEncrypted / description
        Added value: +"Indicates whether an incoming message must be encrypted in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isEncrypted / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isMeetingRequest / $ref
        Removed value: -"#/$defs/def13"
      • addedInput schema / properties / body / properties / conditions / properties / isMeetingRequest / description
        Added value: +"Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isMeetingRequest / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isMeetingResponse / $ref
        Removed value: -"#/$defs/def14"
      • addedInput schema / properties / body / properties / conditions / properties / isMeetingResponse / description
        Added value: +"Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isMeetingResponse / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isNonDeliveryReport / $ref
        Removed value: -"#/$defs/def15"
      • addedInput schema / properties / body / properties / conditions / properties / isNonDeliveryReport / description
        Added value: +"Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isNonDeliveryReport / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isPermissionControlled / $ref
        Removed value: -"#/$defs/def16"
      • addedInput schema / properties / body / properties / conditions / properties / isPermissionControlled / description
        Added value: +"Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isPermissionControlled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isReadReceipt / $ref
        Removed value: -"#/$defs/def17"
      • addedInput schema / properties / body / properties / conditions / properties / isReadReceipt / description
        Added value: +"Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isReadReceipt / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isSigned / $ref
        Removed value: -"#/$defs/def18"
      • addedInput schema / properties / body / properties / conditions / properties / isSigned / description
        Added value: +"Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isSigned / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isVoicemail / $ref
        Removed value: -"#/$defs/def19"
      • addedInput schema / properties / body / properties / conditions / properties / isVoicemail / description
        Added value: +"Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isVoicemail / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / messageActionFlag / $ref
        Removed value: -"#/$defs/def20"
      • addedInput schema / properties / body / properties / conditions / properties / messageActionFlag / enum
        Added value: +[
        +  "any",
        +  "call",
        +  "doNotForward",
        +  "followUp",
        +  "fyi",
        +  "forward",
        +  "noResponseNecessary",
        +  "read",
        +  "reply",
        +  "replyToAll",
        +  "review"
        +]
      • addedInput schema / properties / body / properties / conditions / properties / messageActionFlag / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / conditions / properties / notSentToMe / $ref
        Removed value: -"#/$defs/def21"
      • addedInput schema / properties / body / properties / conditions / properties / notSentToMe / description
        Added value: +"Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / notSentToMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / recipientContains / $ref
        Removed value: -"#/$defs/def22"
      • addedInput schema / properties / body / properties / conditions / properties / recipientContains / description
        Added value: +"Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / recipientContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / recipientContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / senderContains / $ref
        Removed value: -"#/$defs/def23"
      • addedInput schema / properties / body / properties / conditions / properties / senderContains / description
        Added value: +"Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / senderContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / senderContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / sensitivity / $ref
        Removed value: -"#/$defs/def24"
      • addedInput schema / properties / body / properties / conditions / properties / sensitivity / enum
        Added value: +[
        +  "normal",
        +  "personal",
        +  "private",
        +  "confidential"
        +]
      • addedInput schema / properties / body / properties / conditions / properties / sensitivity / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / conditions / properties / sentCcMe / $ref
        Removed value: -"#/$defs/def25"
      • addedInput schema / properties / body / properties / conditions / properties / sentCcMe / description
        Added value: +"Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / sentCcMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / sentOnlyToMe / $ref
        Removed value: -"#/$defs/def26"
      • addedInput schema / properties / body / properties / conditions / properties / sentOnlyToMe / description
        Added value: +"Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / sentOnlyToMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / bodyContains / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / exceptions / properties / bodyContains / description
        Added value: +"Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / bodyContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / bodyContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / description
        Added value: +"Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / categories / $ref
        Removed value: -"#/$defs/def4"
      • addedInput schema / properties / body / properties / exceptions / properties / categories / description
        Added value: +"Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / categories / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / categories / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / fromAddresses / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / exceptions / properties / fromAddresses / description
        Added value: +"Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / fromAddresses / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "emailAddress": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "address": {
        +          "description": "The email address of the person or entity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "The display name of the person or entity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / fromAddresses / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / hasAttachments / $ref
        Removed value: -"#/$defs/def6"
      • addedInput schema / properties / body / properties / exceptions / properties / hasAttachments / description
        Added value: +"Indicates whether an incoming message must have attachments in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / hasAttachments / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / headerContains / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / exceptions / properties / headerContains / description
        Added value: +"Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / headerContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / headerContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / importance / $ref
        Removed value: -"#/$defs/def8"
      • addedInput schema / properties / body / properties / exceptions / properties / importance / enum
        Added value: +[
        +  "low",
        +  "normal",
        +  "high"
        +]
      • addedInput schema / properties / body / properties / exceptions / properties / importance / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / exceptions / properties / isApprovalRequest / $ref
        Removed value: -"#/$defs/def9"
      • addedInput schema / properties / body / properties / exceptions / properties / isApprovalRequest / description
        Added value: +"Indicates whether an incoming message must be an approval request in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isApprovalRequest / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isAutomaticForward / $ref
        Removed value: -"#/$defs/def10"
      • addedInput schema / properties / body / properties / exceptions / properties / isAutomaticForward / description
        Added value: +"Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isAutomaticForward / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isAutomaticReply / $ref
        Removed value: -"#/$defs/def11"
      • addedInput schema / properties / body / properties / exceptions / properties / isAutomaticReply / description
        Added value: +"Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isAutomaticReply / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isEncrypted / $ref
        Removed value: -"#/$defs/def12"
      • addedInput schema / properties / body / properties / exceptions / properties / isEncrypted / description
        Added value: +"Indicates whether an incoming message must be encrypted in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isEncrypted / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isMeetingRequest / $ref
        Removed value: -"#/$defs/def13"
      • addedInput schema / properties / body / properties / exceptions / properties / isMeetingRequest / description
        Added value: +"Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isMeetingRequest / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isMeetingResponse / $ref
        Removed value: -"#/$defs/def14"
      • addedInput schema / properties / body / properties / exceptions / properties / isMeetingResponse / description
        Added value: +"Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isMeetingResponse / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / $ref
        Removed value: -"#/$defs/def15"
      • addedInput schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / description
        Added value: +"Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isPermissionControlled / $ref
        Removed value: -"#/$defs/def16"
      • addedInput schema / properties / body / properties / exceptions / properties / isPermissionControlled / description
        Added value: +"Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isPermissionControlled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isReadReceipt / $ref
        Removed value: -"#/$defs/def17"
      • addedInput schema / properties / body / properties / exceptions / properties / isReadReceipt / description
        Added value: +"Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isReadReceipt / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isSigned / $ref
        Removed value: -"#/$defs/def18"
      • addedInput schema / properties / body / properties / exceptions / properties / isSigned / description
        Added value: +"Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isSigned / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isVoicemail / $ref
        Removed value: -"#/$defs/def19"
      • addedInput schema / properties / body / properties / exceptions / properties / isVoicemail / description
        Added value: +"Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isVoicemail / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / messageActionFlag / $ref
        Removed value: -"#/$defs/def20"
      • addedInput schema / properties / body / properties / exceptions / properties / messageActionFlag / enum
        Added value: +[
        +  "any",
        +  "call",
        +  "doNotForward",
        +  "followUp",
        +  "fyi",
        +  "forward",
        +  "noResponseNecessary",
        +  "read",
        +  "reply",
        +  "replyToAll",
        +  "review"
        +]
      • addedInput schema / properties / body / properties / exceptions / properties / messageActionFlag / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / exceptions / properties / notSentToMe / $ref
        Removed value: -"#/$defs/def21"
      • addedInput schema / properties / body / properties / exceptions / properties / notSentToMe / description
        Added value: +"Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / notSentToMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / recipientContains / $ref
        Removed value: -"#/$defs/def22"
      • addedInput schema / properties / body / properties / exceptions / properties / recipientContains / description
        Added value: +"Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / recipientContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / recipientContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / senderContains / $ref
        Removed value: -"#/$defs/def23"
      • addedInput schema / properties / body / properties / exceptions / properties / senderContains / description
        Added value: +"Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / senderContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / senderContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / sensitivity / $ref
        Removed value: -"#/$defs/def24"
      • addedInput schema / properties / body / properties / exceptions / properties / sensitivity / enum
        Added value: +[
        +  "normal",
        +  "personal",
        +  "private",
        +  "confidential"
        +]
      • addedInput schema / properties / body / properties / exceptions / properties / sensitivity / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / exceptions / properties / sentCcMe / $ref
        Removed value: -"#/$defs/def25"
      • addedInput schema / properties / body / properties / exceptions / properties / sentCcMe / description
        Added value: +"Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / sentCcMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / sentOnlyToMe / $ref
        Removed value: -"#/$defs/def26"
      • addedInput schema / properties / body / properties / exceptions / properties / sentOnlyToMe / description
        Added value: +"Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / sentOnlyToMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
    • Changedcreate-my-calendar-permission5 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "enum": [
        -      "none",
        -      "freeBusyRead",
        -      "limitedRead",
        -      "read",
        -      "write",
        -      "delegateWithoutPrivateEventAccess",
        -      "delegateWithPrivateEventAccess",
        -      "custom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • changedInput schema / properties / body / properties / allowedRoles / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def0"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "none",
        +      "freeBusyRead",
        +      "limitedRead",
        +      "read",
        +      "write",
        +      "delegateWithoutPrivateEventAccess",
        +      "delegateWithPrivateEventAccess",
        +      "custom"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / role / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / role / enum
        Added value: +[
        +  "none",
        +  "freeBusyRead",
        +  "limitedRead",
        +  "read",
        +  "write",
        +  "delegateWithoutPrivateEventAccess",
        +  "delegateWithPrivateEventAccess",
        +  "custom"
        +]
      • addedInput schema / properties / body / properties / role / type
        Added value: +"string"
    • Changedcreate-onedrive-folder177 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "device": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "user": {
        -        "$ref": "#/$defs/def1"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def10": {
        -    "description": "The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def11": {
        -    "description": "The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def12": {
        -    "description": "Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def13": {
        -    "description": "The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def14": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
        -  },
        -  "def15": {
        -    "description": "Indicates whether the user account was created through one of the following methods:  As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def16": {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  "def17": {
        -    "anyOf": [
        -      {
        -        "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted."
        -  },
        -  "def18": {
        -    "description": "The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def19": {
        -    "description": "The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000.",
        -    "maximum": 2147483647,
        -    "minimum": -2147483648,
        -    "type": "number"
        -  },
        -  "def2": {
        -    "description": "A freeform text entry field for the user to describe themselves. Requires $select to retrieve.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def20": {
        -    "description": "The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def21": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
        -  },
        -  "def22": {
        -    "description": "The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def23": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user."
        -  },
        -  "def24": {
        -    "description": "The unique identifier for an entity. Read-only.",
        -    "type": "string"
        -  },
        -  "def25": {
        -    "description": "The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def26": {
        -    "description": "The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def3": {
        -    "description": "true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def4": {
        -    "description": "Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def5": {
        -    "description": "The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0).",
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "disabledPlans": {
        -          "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.",
        -          "items": {
        -            "format": "uuid",
        -            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        "skuId": {
        -          "anyOf": [
        -            {
        -              "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.",
        -              "format": "uuid",
        -              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "def6": {
        -    "description": "The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not).",
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "assignedDateTime": {
        -          "anyOf": [
        -            {
        -              "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
        -              "format": "date-time",
        -              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z."
        -        },
        -        "capabilityStatus": {
        -          "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "service": {
        -          "description": "The name of the service; for example, exchange.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "servicePlanId": {
        -          "anyOf": [
        -            {
        -              "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.",
        -              "format": "uuid",
        -              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing."
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "def7": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "certificateUserIds": {
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def8": {
        -    "description": "The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve.",
        -    "format": "date-time",
        -    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -    "type": "string"
        -  },
        -  "def9": {
        -    "description": "The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.",
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -}
      • removedInput schema / properties / body / properties / createdBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / createdBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / createdByUser / properties / aboutMe / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / createdByUser / properties / aboutMe / description
        Added value: +"A freeform text entry field for the user to describe themselves. Requires $select to retrieve."
      • addedInput schema / properties / body / properties / createdByUser / properties / aboutMe / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / accountEnabled / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / createdByUser / properties / accountEnabled / description
        Added value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / createdByUser / properties / accountEnabled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / ageGroup / $ref
        Removed value: -"#/$defs/def4"
      • addedInput schema / properties / body / properties / createdByUser / properties / ageGroup / description
        Added value: +"Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."
      • addedInput schema / properties / body / properties / createdByUser / properties / ageGroup / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / assignedLicenses / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedLicenses / description
        Added value: +"The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0)."
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedLicenses / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "disabledPlans": {
        +      "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.",
        +      "items": {
        +        "format": "uuid",
        +        "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "skuId": {
        +      "anyOf": [
        +        {
        +          "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.",
        +          "format": "uuid",
        +          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedLicenses / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / createdByUser / properties / assignedPlans / $ref
        Removed value: -"#/$defs/def6"
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedPlans / description
        Added value: +"The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not)."
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedPlans / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "assignedDateTime": {
        +      "anyOf": [
        +        {
        +          "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
        +          "format": "date-time",
        +          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z."
        +    },
        +    "capabilityStatus": {
        +      "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "service": {
        +      "description": "The name of the service; for example, exchange.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "servicePlanId": {
        +      "anyOf": [
        +        {
        +          "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.",
        +          "format": "uuid",
        +          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing."
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedPlans / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / createdByUser / properties / authorizationInfo / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / createdByUser / properties / authorizationInfo / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdByUser / properties / authorizationInfo / properties
        Added value: +{
        +  "certificateUserIds": {
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdByUser / properties / authorizationInfo / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / createdByUser / properties / birthday / $ref
        Removed value: -"#/$defs/def8"
      • addedInput schema / properties / body / properties / createdByUser / properties / birthday / description
        Added value: +"The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve."
      • addedInput schema / properties / body / properties / createdByUser / properties / birthday / format
        Added value: +"date-time"
      • addedInput schema / properties / body / properties / createdByUser / properties / birthday / pattern
        Added value: +"^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$"
      • addedInput schema / properties / body / properties / createdByUser / properties / birthday / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / createdByUser / properties / businessPhones / $ref
        Removed value: -"#/$defs/def9"
      • addedInput schema / properties / body / properties / createdByUser / properties / businessPhones / description
        Added value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / createdByUser / properties / businessPhones / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / body / properties / createdByUser / properties / businessPhones / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / createdByUser / properties / city / $ref
        Removed value: -"#/$defs/def10"
      • addedInput schema / properties / body / properties / createdByUser / properties / city / description
        Added value: +"The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / city / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / companyName / $ref
        Removed value: -"#/$defs/def11"
      • addedInput schema / properties / body / properties / createdByUser / properties / companyName / description
        Added value: +"The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / companyName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / $ref
        Removed value: -"#/$defs/def12"
      • addedInput schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / description
        Added value: +"Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."
      • addedInput schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / country / $ref
        Removed value: -"#/$defs/def13"
      • addedInput schema / properties / body / properties / createdByUser / properties / country / description
        Added value: +"The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / country / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / createdDateTime / $ref
        Removed value: -"#/$defs/def14"
      • addedInput schema / properties / body / properties / createdByUser / properties / createdDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / createdByUser / properties / createdDateTime / description
        Added value: +"The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
      • removedInput schema / properties / body / properties / createdByUser / properties / creationType / $ref
        Removed value: -"#/$defs/def15"
      • addedInput schema / properties / body / properties / createdByUser / properties / creationType / description
        Added value: +"Indicates whether the user account was created through one of the following methods:  As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in)."
      • addedInput schema / properties / body / properties / createdByUser / properties / creationType / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / $ref
        Removed value: -"#/$defs/def16"
      • addedInput schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / properties
        Added value: +{}
      • addedInput schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / createdByUser / properties / deletedDateTime / $ref
        Removed value: -"#/$defs/def17"
      • addedInput schema / properties / body / properties / createdByUser / properties / deletedDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / createdByUser / properties / deletedDateTime / description
        Added value: +"Date and time when this object was deleted. Always null when the object hasn't been deleted."
      • removedInput schema / properties / body / properties / createdByUser / properties / department / $ref
        Removed value: -"#/$defs/def18"
      • addedInput schema / properties / body / properties / createdByUser / properties / department / description
        Added value: +"The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / department / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / $ref
        Removed value: -"#/$defs/def19"
      • addedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / description
        Added value: +"The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000."
      • addedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / maximum
        Added value: +2147483647
      • addedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / minimum
        Added value: +-2147483648
      • addedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / type
        Added value: +"number"
      • removedInput schema / properties / body / properties / createdByUser / properties / displayName / $ref
        Removed value: -"#/$defs/def20"
      • addedInput schema / properties / body / properties / createdByUser / properties / displayName / description
        Added value: +"The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search."
      • addedInput schema / properties / body / properties / createdByUser / properties / displayName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / employeeHireDate / $ref
        Removed value: -"#/$defs/def21"
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeHireDate / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeHireDate / description
        Added value: +"The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
      • removedInput schema / properties / body / properties / createdByUser / properties / employeeId / $ref
        Removed value: -"#/$defs/def22"
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeId / description
        Added value: +"The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / $ref
        Removed value: -"#/$defs/def23"
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / description
        Added value: +"The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user."
      • removedInput schema / properties / body / properties / createdByUser / properties / id / $ref
        Removed value: -"#/$defs/def24"
      • addedInput schema / properties / body / properties / createdByUser / properties / id / description
        Added value: +"The unique identifier for an entity. Read-only."
      • addedInput schema / properties / body / properties / createdByUser / properties / id / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / createdByUser / properties / state / $ref
        Removed value: -"#/$defs/def25"
      • addedInput schema / properties / body / properties / createdByUser / properties / state / description
        Added value: +"The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / state / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / userPrincipalName / $ref
        Removed value: -"#/$defs/def26"
      • addedInput schema / properties / body / properties / createdByUser / properties / userPrincipalName / description
        Added value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / createdByUser / properties / userPrincipalName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / lastModifiedBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / lastModifiedBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / lastModifiedBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / description
        Added value: +"A freeform text entry field for the user to describe themselves. Requires $select to retrieve."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / description
        Added value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / $ref
        Removed value: -"#/$defs/def4"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / description
        Added value: +"Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / description
        Added value: +"The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "disabledPlans": {
        +      "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.",
        +      "items": {
        +        "format": "uuid",
        +        "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "skuId": {
        +      "anyOf": [
        +        {
        +          "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.",
        +          "format": "uuid",
        +          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / $ref
        Removed value: -"#/$defs/def6"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / description
        Added value: +"The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "assignedDateTime": {
        +      "anyOf": [
        +        {
        +          "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
        +          "format": "date-time",
        +          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z."
        +    },
        +    "capabilityStatus": {
        +      "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "service": {
        +      "description": "The name of the service; for example, exchange.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "servicePlanId": {
        +      "anyOf": [
        +        {
        +          "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.",
        +          "format": "uuid",
        +          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing."
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / properties
        Added value: +{
        +  "certificateUserIds": {
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / $ref
        Removed value: -"#/$defs/def8"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / description
        Added value: +"The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / format
        Added value: +"date-time"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / pattern
        Added value: +"^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / $ref
        Removed value: -"#/$defs/def9"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / description
        Added value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / city / $ref
        Removed value: -"#/$defs/def10"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / city / description
        Added value: +"The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / city / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / companyName / $ref
        Removed value: -"#/$defs/def11"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / companyName / description
        Added value: +"The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / companyName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / $ref
        Removed value: -"#/$defs/def12"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / description
        Added value: +"Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / country / $ref
        Removed value: -"#/$defs/def13"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / country / description
        Added value: +"The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / country / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / $ref
        Removed value: -"#/$defs/def14"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / description
        Added value: +"The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / creationType / $ref
        Removed value: -"#/$defs/def15"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / creationType / description
        Added value: +"Indicates whether the user account was created through one of the following methods:  As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / creationType / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / $ref
        Removed value: -"#/$defs/def16"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / properties
        Added value: +{}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / $ref
        Removed value: -"#/$defs/def17"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / description
        Added value: +"Date and time when this object was deleted. Always null when the object hasn't been deleted."
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / department / $ref
        Removed value: -"#/$defs/def18"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / department / description
        Added value: +"The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / department / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / $ref
        Removed value: -"#/$defs/def19"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / description
        Added value: +"The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / maximum
        Added value: +2147483647
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / minimum
        Added value: +-2147483648
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / type
        Added value: +"number"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / displayName / $ref
        Removed value: -"#/$defs/def20"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / displayName / description
        Added value: +"The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / displayName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / $ref
        Removed value: -"#/$defs/def21"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / description
        Added value: +"The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeId / $ref
        Removed value: -"#/$defs/def22"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeId / description
        Added value: +"The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / $ref
        Removed value: -"#/$defs/def23"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / description
        Added value: +"The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user."
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / id / $ref
        Removed value: -"#/$defs/def24"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / id / description
        Added value: +"The unique identifier for an entity. Read-only."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / id / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / state / $ref
        Removed value: -"#/$defs/def25"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / state / description
        Added value: +"The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / state / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / $ref
        Removed value: -"#/$defs/def26"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / description
        Added value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedcreate-outlook-contact9 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "city": {
        -        "description": "The city.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "countryOrRegion": {
        -        "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postalCode": {
        -        "description": "The postal code.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "state": {
        -        "description": "The state.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "street": {
        -        "description": "The street.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / businessAddress / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / businessAddress / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / businessAddress / properties
        Added value: +{
        +  "city": {
        +    "description": "The city.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "countryOrRegion": {
        +    "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "postalCode": {
        +    "description": "The postal code.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "state": {
        +    "description": "The state.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "street": {
        +    "description": "The street.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / businessAddress / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / homeAddress / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / homeAddress / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / homeAddress / properties
        Added value: +{
        +  "city": {
        +    "description": "The city.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "countryOrRegion": {
        +    "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "postalCode": {
        +    "description": "The postal code.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "state": {
        +    "description": "The state.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "street": {
        +    "description": "The street.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / homeAddress / type
        Added value: +"object"
    • Changedcreate-planner-bucket15 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "device": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "user": {
        -        "$ref": "#/$defs/def1"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def2": {
        -    "enum": [
        -      "automatic",
        -      "noPreview",
        -      "checklist",
        -      "description",
        -      "reference"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / tasks / items / properties / completedBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / tasks / items / properties / completedBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / completedBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / completedBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / createdBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / tasks / items / properties / createdBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / createdBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / createdBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / enum
        Added value: +[
        +  "automatic",
        +  "noPreview",
        +  "checklist",
        +  "description",
        +  "reference"
        +]
      • addedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / tasks / items / properties / previewType / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / tasks / items / properties / previewType / enum
        Added value: +[
        +  "automatic",
        +  "noPreview",
        +  "checklist",
        +  "description",
        +  "reference"
        +]
      • addedInput schema / properties / body / properties / tasks / items / properties / previewType / type
        Added value: +"string"
    • Changedcreate-planner-task15 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "device": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "user": {
        -        "$ref": "#/$defs/def1"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def2": {
        -    "enum": [
        -      "automatic",
        -      "noPreview",
        -      "checklist",
        -      "description",
        -      "reference"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / completedBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / completedBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / completedBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / completedBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / createdBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / createdBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / details / properties / previewType / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / details / properties / previewType / enum
        Added value: +[
        +  "automatic",
        +  "noPreview",
        +  "checklist",
        +  "description",
        +  "reference"
        +]
      • addedInput schema / properties / body / properties / details / properties / previewType / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / previewType / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / previewType / enum
        Added value: +[
        +  "automatic",
        +  "noPreview",
        +  "checklist",
        +  "description",
        +  "reference"
        +]
      • addedInput schema / properties / body / properties / previewType / type
        Added value: +"string"
    • Changedcreate-planner-task-message9 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "device": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "user": {
        -        "$ref": "#/$defs/def1"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / createdBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / createdBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / type
        Added value: +"object"
    • Changedcreate-reply-all-draft2 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/$defs/def0"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "dueDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "emailAddress": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "address": {
        +                "description": "The email address of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "name": {
        +                "description": "The display name of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
    • Changedcreate-reply-draft2 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/$defs/def0"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "dueDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "emailAddress": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "address": {
        +                "description": "The email address of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "name": {
        +                "description": "The display name of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
    • Changedcreate-specific-calendar-event21 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / end / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / end / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / end / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / end / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def0"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enum
        Added value: +[
        +  "sunday",
        +  "monday",
        +  "tuesday",
        +  "wednesday",
        +  "thursday",
        +  "friday",
        +  "saturday"
        +]
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / start / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / start / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / start / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / start / type
        Added value: +"object"
    • Changedcreate-todo-task21 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / completedDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / completedDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / completedDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / completedDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / dueDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / dueDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / dueDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / dueDateTime / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def1"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enum
        Added value: +[
        +  "sunday",
        +  "monday",
        +  "tuesday",
        +  "wednesday",
        +  "thursday",
        +  "friday",
        +  "saturday"
        +]
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / reminderDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / reminderDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / reminderDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / reminderDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / startDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / startDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / startDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / startDateTime / type
        Added value: +"object"
    • Changedcreate-todo-task-list29 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def2": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / extensions / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / extensions / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / extensions / items / properties
        Added value: +{
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / extensions / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / completedDateTime / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / tasks / items / properties / completedDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / completedDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / completedDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / dueDateTime / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / tasks / items / properties / dueDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / dueDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / dueDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / extensions / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / tasks / items / properties / extensions / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / extensions / items / properties
        Added value: +{
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / extensions / items / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def2"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enum
        Added value: +[
        +  "sunday",
        +  "monday",
        +  "tuesday",
        +  "wednesday",
        +  "thursday",
        +  "friday",
        +  "saturday"
        +]
      • addedInput schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / tasks / items / properties / reminderDateTime / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / tasks / items / properties / reminderDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / reminderDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / reminderDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / startDateTime / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / tasks / items / properties / startDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / startDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / startDateTime / type
        Added value: +"object"
    • Changeddecline-calendar-event2 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / ProposedNewTime / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "end": {
        -        "$ref": "#/$defs/def0"
        -      },
        -      "start": {
        -        "$ref": "#/$defs/def0"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "end": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "dateTime": {
        +            "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +            "type": "string"
        +          },
        +          "timeZone": {
        +            "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "start": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "dateTime": {
        +            "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +            "type": "string"
        +          },
        +          "timeZone": {
        +            "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
    • Changedforward-mail-message6 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/$defs/def0"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "dueDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "emailAddress": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "address": {
        +                "description": "The email address of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "name": {
        +                "description": "The display name of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / ToRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / ToRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / ToRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / ToRecipients / items / type
        Added value: +"object"
    • Changedmove-rename-onedrive-item177 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "device": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "user": {
        -        "$ref": "#/$defs/def1"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def10": {
        -    "description": "The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def11": {
        -    "description": "The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def12": {
        -    "description": "Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def13": {
        -    "description": "The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def14": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
        -  },
        -  "def15": {
        -    "description": "Indicates whether the user account was created through one of the following methods:  As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def16": {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  "def17": {
        -    "anyOf": [
        -      {
        -        "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted."
        -  },
        -  "def18": {
        -    "description": "The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def19": {
        -    "description": "The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000.",
        -    "maximum": 2147483647,
        -    "minimum": -2147483648,
        -    "type": "number"
        -  },
        -  "def2": {
        -    "description": "A freeform text entry field for the user to describe themselves. Requires $select to retrieve.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def20": {
        -    "description": "The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def21": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
        -  },
        -  "def22": {
        -    "description": "The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def23": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user."
        -  },
        -  "def24": {
        -    "description": "The unique identifier for an entity. Read-only.",
        -    "type": "string"
        -  },
        -  "def25": {
        -    "description": "The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def26": {
        -    "description": "The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def3": {
        -    "description": "true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def4": {
        -    "description": "Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "def5": {
        -    "description": "The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0).",
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "disabledPlans": {
        -          "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.",
        -          "items": {
        -            "format": "uuid",
        -            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        "skuId": {
        -          "anyOf": [
        -            {
        -              "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.",
        -              "format": "uuid",
        -              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "def6": {
        -    "description": "The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not).",
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "assignedDateTime": {
        -          "anyOf": [
        -            {
        -              "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
        -              "format": "date-time",
        -              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z."
        -        },
        -        "capabilityStatus": {
        -          "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "service": {
        -          "description": "The name of the service; for example, exchange.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "servicePlanId": {
        -          "anyOf": [
        -            {
        -              "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.",
        -              "format": "uuid",
        -              "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing."
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "def7": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "certificateUserIds": {
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def8": {
        -    "description": "The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve.",
        -    "format": "date-time",
        -    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -    "type": "string"
        -  },
        -  "def9": {
        -    "description": "The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.",
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -}
      • removedInput schema / properties / body / properties / createdBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / createdBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / createdByUser / properties / aboutMe / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / createdByUser / properties / aboutMe / description
        Added value: +"A freeform text entry field for the user to describe themselves. Requires $select to retrieve."
      • addedInput schema / properties / body / properties / createdByUser / properties / aboutMe / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / accountEnabled / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / createdByUser / properties / accountEnabled / description
        Added value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / createdByUser / properties / accountEnabled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / ageGroup / $ref
        Removed value: -"#/$defs/def4"
      • addedInput schema / properties / body / properties / createdByUser / properties / ageGroup / description
        Added value: +"Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."
      • addedInput schema / properties / body / properties / createdByUser / properties / ageGroup / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / assignedLicenses / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedLicenses / description
        Added value: +"The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0)."
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedLicenses / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "disabledPlans": {
        +      "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.",
        +      "items": {
        +        "format": "uuid",
        +        "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "skuId": {
        +      "anyOf": [
        +        {
        +          "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.",
        +          "format": "uuid",
        +          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedLicenses / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / createdByUser / properties / assignedPlans / $ref
        Removed value: -"#/$defs/def6"
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedPlans / description
        Added value: +"The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not)."
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedPlans / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "assignedDateTime": {
        +      "anyOf": [
        +        {
        +          "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
        +          "format": "date-time",
        +          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z."
        +    },
        +    "capabilityStatus": {
        +      "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "service": {
        +      "description": "The name of the service; for example, exchange.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "servicePlanId": {
        +      "anyOf": [
        +        {
        +          "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.",
        +          "format": "uuid",
        +          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing."
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / createdByUser / properties / assignedPlans / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / createdByUser / properties / authorizationInfo / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / createdByUser / properties / authorizationInfo / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdByUser / properties / authorizationInfo / properties
        Added value: +{
        +  "certificateUserIds": {
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdByUser / properties / authorizationInfo / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / createdByUser / properties / birthday / $ref
        Removed value: -"#/$defs/def8"
      • addedInput schema / properties / body / properties / createdByUser / properties / birthday / description
        Added value: +"The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve."
      • addedInput schema / properties / body / properties / createdByUser / properties / birthday / format
        Added value: +"date-time"
      • addedInput schema / properties / body / properties / createdByUser / properties / birthday / pattern
        Added value: +"^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$"
      • addedInput schema / properties / body / properties / createdByUser / properties / birthday / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / createdByUser / properties / businessPhones / $ref
        Removed value: -"#/$defs/def9"
      • addedInput schema / properties / body / properties / createdByUser / properties / businessPhones / description
        Added value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / createdByUser / properties / businessPhones / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / body / properties / createdByUser / properties / businessPhones / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / createdByUser / properties / city / $ref
        Removed value: -"#/$defs/def10"
      • addedInput schema / properties / body / properties / createdByUser / properties / city / description
        Added value: +"The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / city / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / companyName / $ref
        Removed value: -"#/$defs/def11"
      • addedInput schema / properties / body / properties / createdByUser / properties / companyName / description
        Added value: +"The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / companyName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / $ref
        Removed value: -"#/$defs/def12"
      • addedInput schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / description
        Added value: +"Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."
      • addedInput schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / country / $ref
        Removed value: -"#/$defs/def13"
      • addedInput schema / properties / body / properties / createdByUser / properties / country / description
        Added value: +"The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / country / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / createdDateTime / $ref
        Removed value: -"#/$defs/def14"
      • addedInput schema / properties / body / properties / createdByUser / properties / createdDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / createdByUser / properties / createdDateTime / description
        Added value: +"The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
      • removedInput schema / properties / body / properties / createdByUser / properties / creationType / $ref
        Removed value: -"#/$defs/def15"
      • addedInput schema / properties / body / properties / createdByUser / properties / creationType / description
        Added value: +"Indicates whether the user account was created through one of the following methods:  As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in)."
      • addedInput schema / properties / body / properties / createdByUser / properties / creationType / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / $ref
        Removed value: -"#/$defs/def16"
      • addedInput schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / properties
        Added value: +{}
      • addedInput schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / createdByUser / properties / deletedDateTime / $ref
        Removed value: -"#/$defs/def17"
      • addedInput schema / properties / body / properties / createdByUser / properties / deletedDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / createdByUser / properties / deletedDateTime / description
        Added value: +"Date and time when this object was deleted. Always null when the object hasn't been deleted."
      • removedInput schema / properties / body / properties / createdByUser / properties / department / $ref
        Removed value: -"#/$defs/def18"
      • addedInput schema / properties / body / properties / createdByUser / properties / department / description
        Added value: +"The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / department / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / $ref
        Removed value: -"#/$defs/def19"
      • addedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / description
        Added value: +"The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000."
      • addedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / maximum
        Added value: +2147483647
      • addedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / minimum
        Added value: +-2147483648
      • addedInput schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / type
        Added value: +"number"
      • removedInput schema / properties / body / properties / createdByUser / properties / displayName / $ref
        Removed value: -"#/$defs/def20"
      • addedInput schema / properties / body / properties / createdByUser / properties / displayName / description
        Added value: +"The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search."
      • addedInput schema / properties / body / properties / createdByUser / properties / displayName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / employeeHireDate / $ref
        Removed value: -"#/$defs/def21"
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeHireDate / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeHireDate / description
        Added value: +"The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
      • removedInput schema / properties / body / properties / createdByUser / properties / employeeId / $ref
        Removed value: -"#/$defs/def22"
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeId / description
        Added value: +"The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / $ref
        Removed value: -"#/$defs/def23"
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / description
        Added value: +"The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user."
      • removedInput schema / properties / body / properties / createdByUser / properties / id / $ref
        Removed value: -"#/$defs/def24"
      • addedInput schema / properties / body / properties / createdByUser / properties / id / description
        Added value: +"The unique identifier for an entity. Read-only."
      • addedInput schema / properties / body / properties / createdByUser / properties / id / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / createdByUser / properties / state / $ref
        Removed value: -"#/$defs/def25"
      • addedInput schema / properties / body / properties / createdByUser / properties / state / description
        Added value: +"The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / createdByUser / properties / state / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / createdByUser / properties / userPrincipalName / $ref
        Removed value: -"#/$defs/def26"
      • addedInput schema / properties / body / properties / createdByUser / properties / userPrincipalName / description
        Added value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / createdByUser / properties / userPrincipalName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / lastModifiedBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / lastModifiedBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / lastModifiedBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / description
        Added value: +"A freeform text entry field for the user to describe themselves. Requires $select to retrieve."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / description
        Added value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / $ref
        Removed value: -"#/$defs/def4"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / description
        Added value: +"Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / description
        Added value: +"The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "disabledPlans": {
        +      "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.",
        +      "items": {
        +        "format": "uuid",
        +        "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "skuId": {
        +      "anyOf": [
        +        {
        +          "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.",
        +          "format": "uuid",
        +          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / $ref
        Removed value: -"#/$defs/def6"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / description
        Added value: +"The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "assignedDateTime": {
        +      "anyOf": [
        +        {
        +          "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
        +          "format": "date-time",
        +          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z."
        +    },
        +    "capabilityStatus": {
        +      "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "service": {
        +      "description": "The name of the service; for example, exchange.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "servicePlanId": {
        +      "anyOf": [
        +        {
        +          "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.",
        +          "format": "uuid",
        +          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing."
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / properties
        Added value: +{
        +  "certificateUserIds": {
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / $ref
        Removed value: -"#/$defs/def8"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / description
        Added value: +"The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / format
        Added value: +"date-time"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / pattern
        Added value: +"^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / birthday / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / $ref
        Removed value: -"#/$defs/def9"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / description
        Added value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / city / $ref
        Removed value: -"#/$defs/def10"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / city / description
        Added value: +"The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / city / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / companyName / $ref
        Removed value: -"#/$defs/def11"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / companyName / description
        Added value: +"The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / companyName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / $ref
        Removed value: -"#/$defs/def12"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / description
        Added value: +"Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / country / $ref
        Removed value: -"#/$defs/def13"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / country / description
        Added value: +"The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / country / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / $ref
        Removed value: -"#/$defs/def14"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / description
        Added value: +"The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / creationType / $ref
        Removed value: -"#/$defs/def15"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / creationType / description
        Added value: +"Indicates whether the user account was created through one of the following methods:  As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / creationType / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / $ref
        Removed value: -"#/$defs/def16"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / properties
        Added value: +{}
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / $ref
        Removed value: -"#/$defs/def17"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / description
        Added value: +"Date and time when this object was deleted. Always null when the object hasn't been deleted."
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / department / $ref
        Removed value: -"#/$defs/def18"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / department / description
        Added value: +"The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / department / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / $ref
        Removed value: -"#/$defs/def19"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / description
        Added value: +"The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / maximum
        Added value: +2147483647
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / minimum
        Added value: +-2147483648
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / type
        Added value: +"number"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / displayName / $ref
        Removed value: -"#/$defs/def20"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / displayName / description
        Added value: +"The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / displayName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / $ref
        Removed value: -"#/$defs/def21"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / description
        Added value: +"The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)."
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeId / $ref
        Removed value: -"#/$defs/def22"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeId / description
        Added value: +"The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / $ref
        Removed value: -"#/$defs/def23"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / anyOf
        Added value: +[
        +  {
        +    "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.",
        +    "format": "date-time",
        +    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / description
        Added value: +"The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user."
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / id / $ref
        Removed value: -"#/$defs/def24"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / id / description
        Added value: +"The unique identifier for an entity. Read-only."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / id / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / state / $ref
        Removed value: -"#/$defs/def25"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / state / description
        Added value: +"The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / state / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / $ref
        Removed value: -"#/$defs/def26"
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / description
        Added value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedreply-all-mail-message2 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/$defs/def0"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "dueDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "emailAddress": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "address": {
        +                "description": "The email address of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "name": {
        +                "description": "The display name of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
    • Changedreply-mail-message2 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/$defs/def0"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/$defs/def0"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/$defs/def1"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "dueDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dateTime": {
        +                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                "type": "string"
        +              },
        +              "timeZone": {
        +                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "emailAddress": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "address": {
        +                "description": "The email address of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "name": {
        +                "description": "The display name of the person or entity.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "emailAddress": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "address": {
        +                  "description": "The email address of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "The display name of the person or entity.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
    • Changedsend-mail29 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / Message / properties / bccRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / Message / properties / bccRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / Message / properties / bccRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / Message / properties / bccRecipients / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / Message / properties / ccRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / Message / properties / ccRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / Message / properties / ccRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / Message / properties / ccRecipients / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / Message / properties / flag / properties / startDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / startDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / startDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / startDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / Message / properties / from / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / Message / properties / from / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / Message / properties / from / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / Message / properties / from / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / Message / properties / toRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / Message / properties / toRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / Message / properties / toRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / Message / properties / toRecipients / items / type
        Added value: +"object"
    • Changedtentatively-accept-calendar-event2 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / ProposedNewTime / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "end": {
        -        "$ref": "#/$defs/def0"
        -      },
        -      "start": {
        -        "$ref": "#/$defs/def0"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "end": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "dateTime": {
        +            "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +            "type": "string"
        +          },
        +          "timeZone": {
        +            "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "start": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "dateTime": {
        +            "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +            "type": "string"
        +          },
        +          "timeZone": {
        +            "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
    • Changedupdate-calendar33 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "enum": [
        -      "unknown",
        -      "skypeForBusiness",
        -      "skypeForConsumer",
        -      "teamsForBusiness"
        -    ],
        -    "type": "string"
        -  },
        -  "def1": {
        -    "enum": [
        -      "none",
        -      "freeBusyRead",
        -      "limitedRead",
        -      "read",
        -      "write",
        -      "delegateWithoutPrivateEventAccess",
        -      "delegateWithPrivateEventAccess",
        -      "custom"
        -    ],
        -    "type": "string"
        -  },
        -  "def2": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "allowNewTimeProposals": {
        -        "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "attachments": {
        -        "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "attendees": {
        -        "description": "The collection of attendees for the event.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "emailAddress": {
        -              "$ref": "#/$defs/def7"
        -            },
        -            "proposedNewTime": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "end": {
        -                  "$ref": "#/$defs/def6"
        -                },
        -                "start": {
        -                  "$ref": "#/$defs/def6"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "status": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "response": {
        -                  "enum": [
        -                    "none",
        -                    "organizer",
        -                    "tentativelyAccepted",
        -                    "accepted",
        -                    "declined",
        -                    "notResponded"
        -                  ],
        -                  "type": "string"
        -                },
        -                "time": {
        -                  "anyOf": [
        -                    {
        -                      "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                      "format": "date-time",
        -                      "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": {
        -              "enum": [
        -                "required",
        -                "optional",
        -                "resource"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "end": {
        -        "$ref": "#/$defs/def6"
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "isAllDay": {
        -        "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isOnlineMeeting": {
        -        "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional.  After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isReminderOn": {
        -        "description": "Set to true if an alert is set to remind the user of the event.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "location": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "city": {
        -                "description": "The city.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "countryOrRegion": {
        -                "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "postalCode": {
        -                "description": "The postal code.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "state": {
        -                "description": "The state.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "street": {
        -                "description": "The street.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "coordinates": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "accuracy": {
        -                "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "altitude": {
        -                "description": "The altitude of the location. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "altitudeAccuracy": {
        -                "description": "The accuracy of the altitude. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "latitude": {
        -                "description": "The latitude of the location. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "longitude": {
        -                "description": "The longitude of the location. [Simplified from 3 options]",
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "displayName": {
        -            "description": "The name associated with the location.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "locationEmailAddress": {
        -            "description": "Optional email address of the location.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "locationType": {
        -            "enum": [
        -              "default",
        -              "conferenceRoom",
        -              "homeAddress",
        -              "businessAddress",
        -              "geoCoordinates",
        -              "streetAddress",
        -              "hotel",
        -              "restaurant",
        -              "localBusiness",
        -              "postalAddress"
        -            ],
        -            "type": "string"
        -          },
        -          "locationUri": {
        -            "description": "Optional URI representing the location.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "uniqueId": {
        -            "description": "For internal use only.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "uniqueIdType": {
        -            "enum": [
        -              "unknown",
        -              "locationStore",
        -              "directory",
        -              "private",
        -              "bing"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.",
        -        "items": {
        -          "$ref": "#/$defs/def3"
        -        },
        -        "type": "array"
        -      },
        -      "recurrence": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "pattern": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "dayOfMonth": {
        -                "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.",
        -                "maximum": 2147483647,
        -                "minimum": -2147483648,
        -                "type": "number"
        -              },
        -              "daysOfWeek": {
        -                "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern.  Required if type is weekly, relativeMonthly, or relativeYearly.",
        -                "items": {
        -                  "anyOf": [
        -                    {
        -                      "$ref": "#/$defs/def4"
        -                    },
        -                    {
        -                      "additionalProperties": true,
        -                      "properties": {},
        -                      "type": "object"
        -                    }
        -                  ]
        -                },
        -                "type": "array"
        -              },
        -              "firstDayOfWeek": {
        -                "$ref": "#/$defs/def4"
        -              },
        -              "index": {
        -                "enum": [
        -                  "first",
        -                  "second",
        -                  "third",
        -                  "fourth",
        -                  "last"
        -                ],
        -                "type": "string"
        -              },
        -              "interval": {
        -                "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.",
        -                "maximum": 2147483647,
        -                "minimum": -2147483648,
        -                "type": "number"
        -              },
        -              "month": {
        -                "description": "The month in which the event occurs.  This is a number from 1 to 12.",
        -                "maximum": 2147483647,
        -                "minimum": -2147483648,
        -                "type": "number"
        -              },
        -              "type": {
        -                "enum": [
        -                  "daily",
        -                  "weekly",
        -                  "absoluteMonthly",
        -                  "relativeMonthly",
        -                  "absoluteYearly",
        -                  "relativeYearly"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "range": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "endDate": {
        -                "anyOf": [
        -                  {
        -                    "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.",
        -                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate."
        -              },
        -              "numberOfOccurrences": {
        -                "description": "The number of times to repeat the event. Required and must be positive if type is numbered.",
        -                "maximum": 2147483647,
        -                "minimum": -2147483648,
        -                "type": "number"
        -              },
        -              "recurrenceTimeZone": {
        -                "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "startDate": {
        -                "anyOf": [
        -                  {
        -                    "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.",
        -                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required."
        -              },
        -              "type": {
        -                "enum": [
        -                  "endDate",
        -                  "noEnd",
        -                  "numbered"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "reminderMinutesBeforeStart": {
        -        "anyOf": [
        -          {
        -            "description": "The number of minutes before the event start time that the reminder alert occurs.",
        -            "maximum": 2147483647,
        -            "minimum": -2147483648,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The number of minutes before the event start time that the reminder alert occurs."
        -      },
        -      "responseRequested": {
        -        "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "sensitivity": {
        -        "enum": [
        -          "normal",
        -          "personal",
        -          "private",
        -          "confidential"
        -        ],
        -        "type": "string"
        -      },
        -      "showAs": {
        -        "enum": [
        -          "unknown",
        -          "free",
        -          "tentative",
        -          "busy",
        -          "oof",
        -          "workingElsewhere"
        -        ],
        -        "type": "string"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.",
        -        "items": {
        -          "$ref": "#/$defs/def5"
        -        },
        -        "type": "array"
        -      },
        -      "start": {
        -        "$ref": "#/$defs/def6"
        -      },
        -      "subject": {
        -        "description": "The text of the event's subject line.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "enum": [
        -          "singleInstance",
        -          "occurrence",
        -          "exception",
        -          "seriesMaster"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def3": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "value": {
        -        "description": "A collection of property values.",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def4": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  },
        -  "def5": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "value": {
        -        "description": "A property value.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def6": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def7": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "address": {
        -        "description": "The email address of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "The display name of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • changedInput schema / properties / body / properties / allowedOnlineMeetingProviders / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def0"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "unknown",
        +      "skypeForBusiness",
        +      "skypeForConsumer",
        +      "teamsForBusiness"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / body / properties / calendarPermissions / items / properties / allowedRoles / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def1"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "none",
        +      "freeBusyRead",
        +      "limitedRead",
        +      "read",
        +      "write",
        +      "delegateWithoutPrivateEventAccess",
        +      "delegateWithPrivateEventAccess",
        +      "custom"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / properties
        Added value: +{
        +  "address": {
        +    "description": "The email address of the person or entity.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "name": {
        +    "description": "The display name of the person or entity.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / calendarPermissions / items / properties / role / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / role / enum
        Added value: +[
        +  "none",
        +  "freeBusyRead",
        +  "limitedRead",
        +  "read",
        +  "write",
        +  "delegateWithoutPrivateEventAccess",
        +  "delegateWithPrivateEventAccess",
        +  "custom"
        +]
      • addedInput schema / properties / body / properties / calendarPermissions / items / properties / role / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / calendarView / items / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / calendarView / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / calendarView / items / properties
        Added value: +{
        +  "allowNewTimeProposals": {
        +    "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "attachments": {
        +    "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "contentType": {
        +          "description": "The MIME type.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "isInline": {
        +          "description": "true if the attachment is an inline attachment; otherwise, false.",
        +          "type": "boolean"
        +        },
        +        "lastModifiedDateTime": {
        +          "anyOf": [
        +            {
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +              "format": "date-time",
        +              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +        },
        +        "name": {
        +          "description": "The attachment's file name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "size": {
        +          "description": "The length of the attachment in bytes.",
        +          "maximum": 2147483647,
        +          "minimum": -2147483648,
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "attendees": {
        +    "description": "The collection of attendees for the event.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "emailAddress": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "address": {
        +              "description": "The email address of the person or entity.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "name": {
        +              "description": "The display name of the person or entity.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "proposedNewTime": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "end": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dateTime": {
        +                  "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                  "type": "string"
        +                },
        +                "timeZone": {
        +                  "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "start": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dateTime": {
        +                  "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                  "type": "string"
        +                },
        +                "timeZone": {
        +                  "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "status": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "response": {
        +              "enum": [
        +                "none",
        +                "organizer",
        +                "tentativelyAccepted",
        +                "accepted",
        +                "declined",
        +                "notResponded"
        +              ],
        +              "type": "string"
        +            },
        +            "time": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": {
        +          "enum": [
        +            "required",
        +            "optional",
        +            "resource"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "body": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "content": {
        +        "description": "The content of the item.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "contentType": {
        +        "enum": [
        +          "text",
        +          "html"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "categories": {
        +    "description": "The categories associated with the item",
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  },
        +  "changeKey": {
        +    "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "createdDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +  },
        +  "end": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "importance": {
        +    "enum": [
        +      "low",
        +      "normal",
        +      "high"
        +    ],
        +    "type": "string"
        +  },
        +  "isAllDay": {
        +    "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isOnlineMeeting": {
        +    "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional.  After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isReminderOn": {
        +    "description": "Set to true if an alert is set to remind the user of the event.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "lastModifiedDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +  },
        +  "location": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "city": {
        +            "description": "The city.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "countryOrRegion": {
        +            "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "postalCode": {
        +            "description": "The postal code.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "state": {
        +            "description": "The state.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "street": {
        +            "description": "The street.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "coordinates": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "accuracy": {
        +            "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "altitude": {
        +            "description": "The altitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "altitudeAccuracy": {
        +            "description": "The accuracy of the altitude. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "latitude": {
        +            "description": "The latitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "longitude": {
        +            "description": "The longitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "displayName": {
        +        "description": "The name associated with the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "locationEmailAddress": {
        +        "description": "Optional email address of the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "locationType": {
        +        "enum": [
        +          "default",
        +          "conferenceRoom",
        +          "homeAddress",
        +          "businessAddress",
        +          "geoCoordinates",
        +          "streetAddress",
        +          "hotel",
        +          "restaurant",
        +          "localBusiness",
        +          "postalAddress"
        +        ],
        +        "type": "string"
        +      },
        +      "locationUri": {
        +        "description": "Optional URI representing the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "uniqueId": {
        +        "description": "For internal use only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "uniqueIdType": {
        +        "enum": [
        +          "unknown",
        +          "locationStore",
        +          "directory",
        +          "private",
        +          "bing"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "multiValueExtendedProperties": {
        +    "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "A collection of property values.",
        +          "items": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "recurrence": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "pattern": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "dayOfMonth": {
        +            "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "daysOfWeek": {
        +            "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern.  Required if type is weekly, relativeMonthly, or relativeYearly.",
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "sunday",
        +                    "monday",
        +                    "tuesday",
        +                    "wednesday",
        +                    "thursday",
        +                    "friday",
        +                    "saturday"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "type": "array"
        +          },
        +          "firstDayOfWeek": {
        +            "enum": [
        +              "sunday",
        +              "monday",
        +              "tuesday",
        +              "wednesday",
        +              "thursday",
        +              "friday",
        +              "saturday"
        +            ],
        +            "type": "string"
        +          },
        +          "index": {
        +            "enum": [
        +              "first",
        +              "second",
        +              "third",
        +              "fourth",
        +              "last"
        +            ],
        +            "type": "string"
        +          },
        +          "interval": {
        +            "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "month": {
        +            "description": "The month in which the event occurs.  This is a number from 1 to 12.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "type": {
        +            "enum": [
        +              "daily",
        +              "weekly",
        +              "absoluteMonthly",
        +              "relativeMonthly",
        +              "absoluteYearly",
        +              "relativeYearly"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "range": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "endDate": {
        +            "anyOf": [
        +              {
        +                "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate."
        +          },
        +          "numberOfOccurrences": {
        +            "description": "The number of times to repeat the event. Required and must be positive if type is numbered.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "recurrenceTimeZone": {
        +            "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "startDate": {
        +            "anyOf": [
        +              {
        +                "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required."
        +          },
        +          "type": {
        +            "enum": [
        +              "endDate",
        +              "noEnd",
        +              "numbered"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "reminderMinutesBeforeStart": {
        +    "anyOf": [
        +      {
        +        "description": "The number of minutes before the event start time that the reminder alert occurs.",
        +        "maximum": 2147483647,
        +        "minimum": -2147483648,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The number of minutes before the event start time that the reminder alert occurs."
        +  },
        +  "responseRequested": {
        +    "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "sensitivity": {
        +    "enum": [
        +      "normal",
        +      "personal",
        +      "private",
        +      "confidential"
        +    ],
        +    "type": "string"
        +  },
        +  "showAs": {
        +    "enum": [
        +      "unknown",
        +      "free",
        +      "tentative",
        +      "busy",
        +      "oof",
        +      "workingElsewhere"
        +    ],
        +    "type": "string"
        +  },
        +  "singleValueExtendedProperties": {
        +    "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "A property value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "start": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "subject": {
        +    "description": "The text of the event's subject line.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "type": {
        +    "enum": [
        +      "singleInstance",
        +      "occurrence",
        +      "exception",
        +      "seriesMaster"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / calendarView / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / defaultOnlineMeetingProvider / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / defaultOnlineMeetingProvider / enum
        Added value: +[
        +  "unknown",
        +  "skypeForBusiness",
        +  "skypeForConsumer",
        +  "teamsForBusiness"
        +]
      • addedInput schema / properties / body / properties / defaultOnlineMeetingProvider / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / events / items / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / events / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / events / items / properties
        Added value: +{
        +  "allowNewTimeProposals": {
        +    "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "attachments": {
        +    "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "contentType": {
        +          "description": "The MIME type.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "isInline": {
        +          "description": "true if the attachment is an inline attachment; otherwise, false.",
        +          "type": "boolean"
        +        },
        +        "lastModifiedDateTime": {
        +          "anyOf": [
        +            {
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +              "format": "date-time",
        +              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +        },
        +        "name": {
        +          "description": "The attachment's file name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "size": {
        +          "description": "The length of the attachment in bytes.",
        +          "maximum": 2147483647,
        +          "minimum": -2147483648,
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "attendees": {
        +    "description": "The collection of attendees for the event.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "emailAddress": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "address": {
        +              "description": "The email address of the person or entity.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "name": {
        +              "description": "The display name of the person or entity.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "proposedNewTime": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "end": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dateTime": {
        +                  "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                  "type": "string"
        +                },
        +                "timeZone": {
        +                  "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "start": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dateTime": {
        +                  "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +                  "type": "string"
        +                },
        +                "timeZone": {
        +                  "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "status": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "response": {
        +              "enum": [
        +                "none",
        +                "organizer",
        +                "tentativelyAccepted",
        +                "accepted",
        +                "declined",
        +                "notResponded"
        +              ],
        +              "type": "string"
        +            },
        +            "time": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": {
        +          "enum": [
        +            "required",
        +            "optional",
        +            "resource"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "body": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "content": {
        +        "description": "The content of the item.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "contentType": {
        +        "enum": [
        +          "text",
        +          "html"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "categories": {
        +    "description": "The categories associated with the item",
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  },
        +  "changeKey": {
        +    "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "createdDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +  },
        +  "end": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "importance": {
        +    "enum": [
        +      "low",
        +      "normal",
        +      "high"
        +    ],
        +    "type": "string"
        +  },
        +  "isAllDay": {
        +    "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isOnlineMeeting": {
        +    "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional.  After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isReminderOn": {
        +    "description": "Set to true if an alert is set to remind the user of the event.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "lastModifiedDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +  },
        +  "location": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "city": {
        +            "description": "The city.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "countryOrRegion": {
        +            "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "postalCode": {
        +            "description": "The postal code.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "state": {
        +            "description": "The state.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "street": {
        +            "description": "The street.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "coordinates": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "accuracy": {
        +            "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "altitude": {
        +            "description": "The altitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "altitudeAccuracy": {
        +            "description": "The accuracy of the altitude. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "latitude": {
        +            "description": "The latitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "longitude": {
        +            "description": "The longitude of the location. [Simplified from 3 options]",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "displayName": {
        +        "description": "The name associated with the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "locationEmailAddress": {
        +        "description": "Optional email address of the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "locationType": {
        +        "enum": [
        +          "default",
        +          "conferenceRoom",
        +          "homeAddress",
        +          "businessAddress",
        +          "geoCoordinates",
        +          "streetAddress",
        +          "hotel",
        +          "restaurant",
        +          "localBusiness",
        +          "postalAddress"
        +        ],
        +        "type": "string"
        +      },
        +      "locationUri": {
        +        "description": "Optional URI representing the location.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "uniqueId": {
        +        "description": "For internal use only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "uniqueIdType": {
        +        "enum": [
        +          "unknown",
        +          "locationStore",
        +          "directory",
        +          "private",
        +          "bing"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "multiValueExtendedProperties": {
        +    "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "A collection of property values.",
        +          "items": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "recurrence": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "pattern": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "dayOfMonth": {
        +            "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "daysOfWeek": {
        +            "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern.  Required if type is weekly, relativeMonthly, or relativeYearly.",
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "sunday",
        +                    "monday",
        +                    "tuesday",
        +                    "wednesday",
        +                    "thursday",
        +                    "friday",
        +                    "saturday"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "type": "array"
        +          },
        +          "firstDayOfWeek": {
        +            "enum": [
        +              "sunday",
        +              "monday",
        +              "tuesday",
        +              "wednesday",
        +              "thursday",
        +              "friday",
        +              "saturday"
        +            ],
        +            "type": "string"
        +          },
        +          "index": {
        +            "enum": [
        +              "first",
        +              "second",
        +              "third",
        +              "fourth",
        +              "last"
        +            ],
        +            "type": "string"
        +          },
        +          "interval": {
        +            "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "month": {
        +            "description": "The month in which the event occurs.  This is a number from 1 to 12.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "type": {
        +            "enum": [
        +              "daily",
        +              "weekly",
        +              "absoluteMonthly",
        +              "relativeMonthly",
        +              "absoluteYearly",
        +              "relativeYearly"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "range": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "endDate": {
        +            "anyOf": [
        +              {
        +                "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate."
        +          },
        +          "numberOfOccurrences": {
        +            "description": "The number of times to repeat the event. Required and must be positive if type is numbered.",
        +            "maximum": 2147483647,
        +            "minimum": -2147483648,
        +            "type": "number"
        +          },
        +          "recurrenceTimeZone": {
        +            "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "startDate": {
        +            "anyOf": [
        +              {
        +                "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required."
        +          },
        +          "type": {
        +            "enum": [
        +              "endDate",
        +              "noEnd",
        +              "numbered"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "reminderMinutesBeforeStart": {
        +    "anyOf": [
        +      {
        +        "description": "The number of minutes before the event start time that the reminder alert occurs.",
        +        "maximum": 2147483647,
        +        "minimum": -2147483648,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The number of minutes before the event start time that the reminder alert occurs."
        +  },
        +  "responseRequested": {
        +    "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "sensitivity": {
        +    "enum": [
        +      "normal",
        +      "personal",
        +      "private",
        +      "confidential"
        +    ],
        +    "type": "string"
        +  },
        +  "showAs": {
        +    "enum": [
        +      "unknown",
        +      "free",
        +      "tentative",
        +      "busy",
        +      "oof",
        +      "workingElsewhere"
        +    ],
        +    "type": "string"
        +  },
        +  "singleValueExtendedProperties": {
        +    "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "A property value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "start": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "subject": {
        +    "description": "The text of the event's subject line.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "type": {
        +    "enum": [
        +      "singleInstance",
        +      "occurrence",
        +      "exception",
        +      "seriesMaster"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / events / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / multiValueExtendedProperties / items / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / multiValueExtendedProperties / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / multiValueExtendedProperties / items / properties
        Added value: +{
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "value": {
        +    "description": "A collection of property values.",
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / body / properties / multiValueExtendedProperties / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / owner / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / owner / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / owner / properties
        Added value: +{
        +  "address": {
        +    "description": "The email address of the person or entity.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "name": {
        +    "description": "The display name of the person or entity.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / owner / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / singleValueExtendedProperties / items / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / singleValueExtendedProperties / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / singleValueExtendedProperties / items / properties
        Added value: +{
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "value": {
        +    "description": "A property value.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / singleValueExtendedProperties / items / type
        Added value: +"object"
    • Changedupdate-calendar-event21 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / end / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / end / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / end / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / end / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def0"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enum
        Added value: +[
        +  "sunday",
        +  "monday",
        +  "tuesday",
        +  "wednesday",
        +  "thursday",
        +  "friday",
        +  "saturday"
        +]
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / start / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / start / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / start / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / start / type
        Added value: +"object"
    • Changedupdate-mail-message29 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / bccRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / bccRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / bccRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / bccRecipients / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / ccRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / ccRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / ccRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / ccRecipients / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / flag / properties / completedDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / flag / properties / completedDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / flag / properties / completedDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / flag / properties / completedDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / flag / properties / dueDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / flag / properties / dueDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / flag / properties / dueDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / flag / properties / dueDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / flag / properties / startDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / flag / properties / startDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / flag / properties / startDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / flag / properties / startDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / from / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / from / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / from / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / from / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / toRecipients / items / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / toRecipients / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / toRecipients / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / toRecipients / items / type
        Added value: +"object"
    • Changedupdate-mail-rule180 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "emailAddress": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "address": {
        -            "description": "The email address of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "The display name of the person or entity.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "enum": [
        -      "low",
        -      "normal",
        -      "high"
        -    ],
        -    "type": "string"
        -  },
        -  "def10": {
        -    "description": "Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def11": {
        -    "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def12": {
        -    "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def13": {
        -    "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def14": {
        -    "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def15": {
        -    "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def16": {
        -    "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def17": {
        -    "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def18": {
        -    "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def19": {
        -    "description": "Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def2": {
        -    "description": "Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def20": {
        -    "enum": [
        -      "any",
        -      "call",
        -      "doNotForward",
        -      "followUp",
        -      "fyi",
        -      "forward",
        -      "noResponseNecessary",
        -      "read",
        -      "reply",
        -      "replyToAll",
        -      "review"
        -    ],
        -    "type": "string"
        -  },
        -  "def21": {
        -    "description": "Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def22": {
        -    "description": "Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def23": {
        -    "description": "Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def24": {
        -    "enum": [
        -      "normal",
        -      "personal",
        -      "private",
        -      "confidential"
        -    ],
        -    "type": "string"
        -  },
        -  "def25": {
        -    "description": "Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def26": {
        -    "description": "Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def3": {
        -    "description": "Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def4": {
        -    "description": "Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def5": {
        -    "description": "Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "$ref": "#/$defs/def0"
        -    },
        -    "type": "array"
        -  },
        -  "def6": {
        -    "description": "Indicates whether an incoming message must have attachments in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "def7": {
        -    "description": "Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "def8": {
        -    "$ref": "#/$defs/def1"
        -  },
        -  "def9": {
        -    "description": "Indicates whether an incoming message must be an approval request in order for the condition or exception to apply.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / actions / properties / forwardTo / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / actions / properties / forwardTo / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / actions / properties / forwardTo / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / actions / properties / forwardTo / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / actions / properties / markImportance / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / actions / properties / markImportance / enum
        Added value: +[
        +  "low",
        +  "normal",
        +  "high"
        +]
      • addedInput schema / properties / body / properties / actions / properties / markImportance / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / actions / properties / redirectTo / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / actions / properties / redirectTo / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / actions / properties / redirectTo / items / properties
        Added value: +{
        +  "emailAddress": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "address": {
        +        "description": "The email address of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "The display name of the person or entity.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / actions / properties / redirectTo / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / conditions / properties / bodyContains / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / conditions / properties / bodyContains / description
        Added value: +"Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / bodyContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / bodyContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / description
        Added value: +"Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / categories / $ref
        Removed value: -"#/$defs/def4"
      • addedInput schema / properties / body / properties / conditions / properties / categories / description
        Added value: +"Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / categories / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / categories / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / fromAddresses / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / conditions / properties / fromAddresses / description
        Added value: +"Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / fromAddresses / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "emailAddress": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "address": {
        +          "description": "The email address of the person or entity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "The display name of the person or entity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / conditions / properties / fromAddresses / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / hasAttachments / $ref
        Removed value: -"#/$defs/def6"
      • addedInput schema / properties / body / properties / conditions / properties / hasAttachments / description
        Added value: +"Indicates whether an incoming message must have attachments in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / hasAttachments / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / headerContains / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / conditions / properties / headerContains / description
        Added value: +"Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / headerContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / headerContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / importance / $ref
        Removed value: -"#/$defs/def8"
      • addedInput schema / properties / body / properties / conditions / properties / importance / enum
        Added value: +[
        +  "low",
        +  "normal",
        +  "high"
        +]
      • addedInput schema / properties / body / properties / conditions / properties / importance / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / conditions / properties / isApprovalRequest / $ref
        Removed value: -"#/$defs/def9"
      • addedInput schema / properties / body / properties / conditions / properties / isApprovalRequest / description
        Added value: +"Indicates whether an incoming message must be an approval request in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isApprovalRequest / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isAutomaticForward / $ref
        Removed value: -"#/$defs/def10"
      • addedInput schema / properties / body / properties / conditions / properties / isAutomaticForward / description
        Added value: +"Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isAutomaticForward / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isAutomaticReply / $ref
        Removed value: -"#/$defs/def11"
      • addedInput schema / properties / body / properties / conditions / properties / isAutomaticReply / description
        Added value: +"Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isAutomaticReply / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isEncrypted / $ref
        Removed value: -"#/$defs/def12"
      • addedInput schema / properties / body / properties / conditions / properties / isEncrypted / description
        Added value: +"Indicates whether an incoming message must be encrypted in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isEncrypted / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isMeetingRequest / $ref
        Removed value: -"#/$defs/def13"
      • addedInput schema / properties / body / properties / conditions / properties / isMeetingRequest / description
        Added value: +"Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isMeetingRequest / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isMeetingResponse / $ref
        Removed value: -"#/$defs/def14"
      • addedInput schema / properties / body / properties / conditions / properties / isMeetingResponse / description
        Added value: +"Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isMeetingResponse / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isNonDeliveryReport / $ref
        Removed value: -"#/$defs/def15"
      • addedInput schema / properties / body / properties / conditions / properties / isNonDeliveryReport / description
        Added value: +"Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isNonDeliveryReport / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isPermissionControlled / $ref
        Removed value: -"#/$defs/def16"
      • addedInput schema / properties / body / properties / conditions / properties / isPermissionControlled / description
        Added value: +"Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isPermissionControlled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isReadReceipt / $ref
        Removed value: -"#/$defs/def17"
      • addedInput schema / properties / body / properties / conditions / properties / isReadReceipt / description
        Added value: +"Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isReadReceipt / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isSigned / $ref
        Removed value: -"#/$defs/def18"
      • addedInput schema / properties / body / properties / conditions / properties / isSigned / description
        Added value: +"Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isSigned / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / isVoicemail / $ref
        Removed value: -"#/$defs/def19"
      • addedInput schema / properties / body / properties / conditions / properties / isVoicemail / description
        Added value: +"Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / isVoicemail / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / messageActionFlag / $ref
        Removed value: -"#/$defs/def20"
      • addedInput schema / properties / body / properties / conditions / properties / messageActionFlag / enum
        Added value: +[
        +  "any",
        +  "call",
        +  "doNotForward",
        +  "followUp",
        +  "fyi",
        +  "forward",
        +  "noResponseNecessary",
        +  "read",
        +  "reply",
        +  "replyToAll",
        +  "review"
        +]
      • addedInput schema / properties / body / properties / conditions / properties / messageActionFlag / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / conditions / properties / notSentToMe / $ref
        Removed value: -"#/$defs/def21"
      • addedInput schema / properties / body / properties / conditions / properties / notSentToMe / description
        Added value: +"Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / notSentToMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / recipientContains / $ref
        Removed value: -"#/$defs/def22"
      • addedInput schema / properties / body / properties / conditions / properties / recipientContains / description
        Added value: +"Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / recipientContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / recipientContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / senderContains / $ref
        Removed value: -"#/$defs/def23"
      • addedInput schema / properties / body / properties / conditions / properties / senderContains / description
        Added value: +"Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / senderContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / conditions / properties / senderContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / conditions / properties / sensitivity / $ref
        Removed value: -"#/$defs/def24"
      • addedInput schema / properties / body / properties / conditions / properties / sensitivity / enum
        Added value: +[
        +  "normal",
        +  "personal",
        +  "private",
        +  "confidential"
        +]
      • addedInput schema / properties / body / properties / conditions / properties / sensitivity / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / conditions / properties / sentCcMe / $ref
        Removed value: -"#/$defs/def25"
      • addedInput schema / properties / body / properties / conditions / properties / sentCcMe / description
        Added value: +"Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / sentCcMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / conditions / properties / sentOnlyToMe / $ref
        Removed value: -"#/$defs/def26"
      • addedInput schema / properties / body / properties / conditions / properties / sentOnlyToMe / description
        Added value: +"Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / conditions / properties / sentOnlyToMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / bodyContains / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / exceptions / properties / bodyContains / description
        Added value: +"Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / bodyContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / bodyContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / $ref
        Removed value: -"#/$defs/def3"
      • addedInput schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / description
        Added value: +"Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / categories / $ref
        Removed value: -"#/$defs/def4"
      • addedInput schema / properties / body / properties / exceptions / properties / categories / description
        Added value: +"Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / categories / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / categories / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / fromAddresses / $ref
        Removed value: -"#/$defs/def5"
      • addedInput schema / properties / body / properties / exceptions / properties / fromAddresses / description
        Added value: +"Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / fromAddresses / items
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "emailAddress": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "address": {
        +          "description": "The email address of the person or entity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "The display name of the person or entity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / fromAddresses / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / hasAttachments / $ref
        Removed value: -"#/$defs/def6"
      • addedInput schema / properties / body / properties / exceptions / properties / hasAttachments / description
        Added value: +"Indicates whether an incoming message must have attachments in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / hasAttachments / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / headerContains / $ref
        Removed value: -"#/$defs/def7"
      • addedInput schema / properties / body / properties / exceptions / properties / headerContains / description
        Added value: +"Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / headerContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / headerContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / importance / $ref
        Removed value: -"#/$defs/def8"
      • addedInput schema / properties / body / properties / exceptions / properties / importance / enum
        Added value: +[
        +  "low",
        +  "normal",
        +  "high"
        +]
      • addedInput schema / properties / body / properties / exceptions / properties / importance / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / exceptions / properties / isApprovalRequest / $ref
        Removed value: -"#/$defs/def9"
      • addedInput schema / properties / body / properties / exceptions / properties / isApprovalRequest / description
        Added value: +"Indicates whether an incoming message must be an approval request in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isApprovalRequest / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isAutomaticForward / $ref
        Removed value: -"#/$defs/def10"
      • addedInput schema / properties / body / properties / exceptions / properties / isAutomaticForward / description
        Added value: +"Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isAutomaticForward / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isAutomaticReply / $ref
        Removed value: -"#/$defs/def11"
      • addedInput schema / properties / body / properties / exceptions / properties / isAutomaticReply / description
        Added value: +"Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isAutomaticReply / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isEncrypted / $ref
        Removed value: -"#/$defs/def12"
      • addedInput schema / properties / body / properties / exceptions / properties / isEncrypted / description
        Added value: +"Indicates whether an incoming message must be encrypted in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isEncrypted / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isMeetingRequest / $ref
        Removed value: -"#/$defs/def13"
      • addedInput schema / properties / body / properties / exceptions / properties / isMeetingRequest / description
        Added value: +"Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isMeetingRequest / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isMeetingResponse / $ref
        Removed value: -"#/$defs/def14"
      • addedInput schema / properties / body / properties / exceptions / properties / isMeetingResponse / description
        Added value: +"Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isMeetingResponse / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / $ref
        Removed value: -"#/$defs/def15"
      • addedInput schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / description
        Added value: +"Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isPermissionControlled / $ref
        Removed value: -"#/$defs/def16"
      • addedInput schema / properties / body / properties / exceptions / properties / isPermissionControlled / description
        Added value: +"Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isPermissionControlled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isReadReceipt / $ref
        Removed value: -"#/$defs/def17"
      • addedInput schema / properties / body / properties / exceptions / properties / isReadReceipt / description
        Added value: +"Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isReadReceipt / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isSigned / $ref
        Removed value: -"#/$defs/def18"
      • addedInput schema / properties / body / properties / exceptions / properties / isSigned / description
        Added value: +"Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isSigned / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / isVoicemail / $ref
        Removed value: -"#/$defs/def19"
      • addedInput schema / properties / body / properties / exceptions / properties / isVoicemail / description
        Added value: +"Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / isVoicemail / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / messageActionFlag / $ref
        Removed value: -"#/$defs/def20"
      • addedInput schema / properties / body / properties / exceptions / properties / messageActionFlag / enum
        Added value: +[
        +  "any",
        +  "call",
        +  "doNotForward",
        +  "followUp",
        +  "fyi",
        +  "forward",
        +  "noResponseNecessary",
        +  "read",
        +  "reply",
        +  "replyToAll",
        +  "review"
        +]
      • addedInput schema / properties / body / properties / exceptions / properties / messageActionFlag / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / exceptions / properties / notSentToMe / $ref
        Removed value: -"#/$defs/def21"
      • addedInput schema / properties / body / properties / exceptions / properties / notSentToMe / description
        Added value: +"Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / notSentToMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / recipientContains / $ref
        Removed value: -"#/$defs/def22"
      • addedInput schema / properties / body / properties / exceptions / properties / recipientContains / description
        Added value: +"Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / recipientContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / recipientContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / senderContains / $ref
        Removed value: -"#/$defs/def23"
      • addedInput schema / properties / body / properties / exceptions / properties / senderContains / description
        Added value: +"Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / senderContains / items
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / exceptions / properties / senderContains / type
        Added value: +"array"
      • removedInput schema / properties / body / properties / exceptions / properties / sensitivity / $ref
        Removed value: -"#/$defs/def24"
      • addedInput schema / properties / body / properties / exceptions / properties / sensitivity / enum
        Added value: +[
        +  "normal",
        +  "personal",
        +  "private",
        +  "confidential"
        +]
      • addedInput schema / properties / body / properties / exceptions / properties / sensitivity / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / exceptions / properties / sentCcMe / $ref
        Removed value: -"#/$defs/def25"
      • addedInput schema / properties / body / properties / exceptions / properties / sentCcMe / description
        Added value: +"Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / sentCcMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / body / properties / exceptions / properties / sentOnlyToMe / $ref
        Removed value: -"#/$defs/def26"
      • addedInput schema / properties / body / properties / exceptions / properties / sentOnlyToMe / description
        Added value: +"Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply."
      • addedInput schema / properties / body / properties / exceptions / properties / sentOnlyToMe / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
    • Changedupdate-mailbox-settings9 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / automaticRepliesSetting / properties / scheduledEndDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / automaticRepliesSetting / properties / scheduledEndDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / automaticRepliesSetting / properties / scheduledEndDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / automaticRepliesSetting / properties / scheduledEndDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / automaticRepliesSetting / properties / scheduledStartDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / automaticRepliesSetting / properties / scheduledStartDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / automaticRepliesSetting / properties / scheduledStartDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / automaticRepliesSetting / properties / scheduledStartDateTime / type
        Added value: +"object"
    • Changedupdate-my-calendar-permission5 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "enum": [
        -      "none",
        -      "freeBusyRead",
        -      "limitedRead",
        -      "read",
        -      "write",
        -      "delegateWithoutPrivateEventAccess",
        -      "delegateWithPrivateEventAccess",
        -      "custom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • changedInput schema / properties / body / properties / allowedRoles / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def0"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "none",
        +      "freeBusyRead",
        +      "limitedRead",
        +      "read",
        +      "write",
        +      "delegateWithoutPrivateEventAccess",
        +      "delegateWithPrivateEventAccess",
        +      "custom"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / role / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / role / enum
        Added value: +[
        +  "none",
        +  "freeBusyRead",
        +  "limitedRead",
        +  "read",
        +  "write",
        +  "delegateWithoutPrivateEventAccess",
        +  "delegateWithPrivateEventAccess",
        +  "custom"
        +]
      • addedInput schema / properties / body / properties / role / type
        Added value: +"string"
    • Changedupdate-outlook-contact9 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "city": {
        -        "description": "The city.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "countryOrRegion": {
        -        "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postalCode": {
        -        "description": "The postal code.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "state": {
        -        "description": "The state.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "street": {
        -        "description": "The street.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / businessAddress / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / businessAddress / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / businessAddress / properties
        Added value: +{
        +  "city": {
        +    "description": "The city.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "countryOrRegion": {
        +    "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "postalCode": {
        +    "description": "The postal code.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "state": {
        +    "description": "The state.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "street": {
        +    "description": "The street.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / businessAddress / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / homeAddress / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / homeAddress / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / homeAddress / properties
        Added value: +{
        +  "city": {
        +    "description": "The city.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "countryOrRegion": {
        +    "description": "The country or region. It's a free-format string value, for example, 'United States'.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "postalCode": {
        +    "description": "The postal code.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "state": {
        +    "description": "The state.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "street": {
        +    "description": "The street.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / homeAddress / type
        Added value: +"object"
    • Changedupdate-planner-bucket15 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "device": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "user": {
        -        "$ref": "#/$defs/def1"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def2": {
        -    "enum": [
        -      "automatic",
        -      "noPreview",
        -      "checklist",
        -      "description",
        -      "reference"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / tasks / items / properties / completedBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / tasks / items / properties / completedBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / completedBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / completedBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / createdBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / tasks / items / properties / createdBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / createdBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / createdBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / enum
        Added value: +[
        +  "automatic",
        +  "noPreview",
        +  "checklist",
        +  "description",
        +  "reference"
        +]
      • addedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / tasks / items / properties / previewType / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / tasks / items / properties / previewType / enum
        Added value: +[
        +  "automatic",
        +  "noPreview",
        +  "checklist",
        +  "description",
        +  "reference"
        +]
      • addedInput schema / properties / body / properties / tasks / items / properties / previewType / type
        Added value: +"string"
    • Changedupdate-planner-task15 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "device": {
        -        "$ref": "#/$defs/def1"
        -      },
        -      "user": {
        -        "$ref": "#/$defs/def1"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def2": {
        -    "enum": [
        -      "automatic",
        -      "noPreview",
        -      "checklist",
        -      "description",
        -      "reference"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / completedBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / completedBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / completedBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / completedBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / createdBy / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / createdBy / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / createdBy / properties
        Added value: +{
        +  "application": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "device": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "user": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdBy / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / details / properties / previewType / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / details / properties / previewType / enum
        Added value: +[
        +  "automatic",
        +  "noPreview",
        +  "checklist",
        +  "description",
        +  "reference"
        +]
      • addedInput schema / properties / body / properties / details / properties / previewType / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / previewType / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / previewType / enum
        Added value: +[
        +  "automatic",
        +  "noPreview",
        +  "checklist",
        +  "description",
        +  "reference"
        +]
      • addedInput schema / properties / body / properties / previewType / type
        Added value: +"string"
    • Changedupdate-specific-calendar-event21 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / end / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / end / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / end / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / end / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def0"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enum
        Added value: +[
        +  "sunday",
        +  "monday",
        +  "tuesday",
        +  "wednesday",
        +  "thursday",
        +  "friday",
        +  "saturday"
        +]
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / start / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / start / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / start / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / start / type
        Added value: +"object"
    • Changedupdate-todo-task21 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / completedDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / completedDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / completedDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / completedDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / dueDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / dueDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / dueDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / dueDateTime / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def1"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enum
        Added value: +[
        +  "sunday",
        +  "monday",
        +  "tuesday",
        +  "wednesday",
        +  "thursday",
        +  "friday",
        +  "saturday"
        +]
      • addedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / reminderDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / reminderDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / reminderDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / reminderDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / startDateTime / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / startDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / startDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / startDateTime / type
        Added value: +"object"
    • Changedupdate-todo-task-list29 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "def0": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def1": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dateTime": {
        -        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -        "type": "string"
        -      },
        -      "timeZone": {
        -        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "def2": {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / extensions / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / extensions / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / extensions / items / properties
        Added value: +{
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / extensions / items / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / completedDateTime / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / tasks / items / properties / completedDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / completedDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / completedDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / dueDateTime / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / tasks / items / properties / dueDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / dueDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / dueDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / extensions / items / $ref
        Removed value: -"#/$defs/def0"
      • addedInput schema / properties / body / properties / tasks / items / properties / extensions / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / extensions / items / properties
        Added value: +{
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / extensions / items / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/def2"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Removed value: -"#/$defs/def2"
      • addedInput schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enum
        Added value: +[
        +  "sunday",
        +  "monday",
        +  "tuesday",
        +  "wednesday",
        +  "thursday",
        +  "friday",
        +  "saturday"
        +]
      • addedInput schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / body / properties / tasks / items / properties / reminderDateTime / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / tasks / items / properties / reminderDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / reminderDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / reminderDateTime / type
        Added value: +"object"
      • removedInput schema / properties / body / properties / tasks / items / properties / startDateTime / $ref
        Removed value: -"#/$defs/def1"
      • addedInput schema / properties / body / properties / tasks / items / properties / startDateTime / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / tasks / items / properties / startDateTime / properties
        Added value: +{
        +  "dateTime": {
        +    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +    "type": "string"
        +  },
        +  "timeZone": {
        +    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / startDateTime / type
        Added value: +"object"
  3. 2 tool updatesv0.137.0
    • Changedcreate-onedrive-folder2 fields changed
      • changedInput schema / properties / body / properties / createdByUser / description
        Previous value: -"[Note: Simplified from 136 properties to 25 most common ones]"New value: +"[Note: Simplified from 137 properties to 25 most common ones]"
      • changedInput schema / properties / body / properties / lastModifiedByUser / description
        Previous value: -"[Note: Simplified from 136 properties to 25 most common ones]"New value: +"[Note: Simplified from 137 properties to 25 most common ones]"
    • Changedmove-rename-onedrive-item2 fields changed
      • changedInput schema / properties / body / properties / createdByUser / description
        Previous value: -"[Note: Simplified from 136 properties to 25 most common ones]"New value: +"[Note: Simplified from 137 properties to 25 most common ones]"
      • changedInput schema / properties / body / properties / lastModifiedByUser / description
        Previous value: -"[Note: Simplified from 136 properties to 25 most common ones]"New value: +"[Note: Simplified from 137 properties to 25 most common ones]"
  4. 4 tool updatesv0.135.0
    • Addedcreate-todo-task-list
    • Addeddelete-todo-task-list
    • Addedlist-todo-tasks
    • Addedupdate-todo-task-list
  5. 180 tool updatesv0.134.4
    • Addedaccept-calendar-event
    • Addedadd-excel-table-rows
    • Changedadd-mail-attachment1 field changed
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedcancel-calendar-event
    • Addedclear-excel-range
    • Addedcopy-drive-item
    • Changedcopy-mail-message1 field changed
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedcreate-calendar
    • Addedcreate-calendar-event
    • Addedcreate-contact-child-folder
    • Addedcreate-contact-folder
    • Addedcreate-contact-in-folder
    • Changedcreate-draft-email14 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / bccRecipients / items / $ref
        Previous value: -"#/properties/body/properties/from"New value: +"#/$defs/def1"
      • changedInput schema / properties / body / properties / ccRecipients / items / $ref
        Previous value: -"#/properties/body/properties/from"New value: +"#/$defs/def1"
      • addedInput schema / properties / body / properties / flag / properties / completedDateTime / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / flag / properties / completedDateTime / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / flag / properties / completedDateTime / properties
        Removed value: -{
        -  "dateTime": {
        -    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -    "type": "string"
        -  },
        -  "timeZone": {
        -    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / flag / properties / completedDateTime / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / flag / properties / dueDateTime / $ref
        Previous value: -"#/properties/body/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / body / properties / flag / properties / startDateTime / $ref
        Previous value: -"#/properties/body/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0"
      • addedInput schema / properties / body / properties / from / $ref
        Added value: +"#/$defs/def1"
      • removedInput schema / properties / body / properties / from / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / from / properties
        Removed value: -{
        -  "emailAddress": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "address": {
        -        "description": "The email address of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "The display name of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / from / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / toRecipients / items / $ref
        Previous value: -"#/properties/body/properties/from"New value: +"#/$defs/def1"
    • Addedcreate-drive-item-preview
    • Addedcreate-drive-item-share-link
    • Addedcreate-excel-chart
    • Changedcreate-excel-table3 fields changed
      • changedInput schema / properties / driveId / description
        Previous value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph."
      • changedInput schema / properties / driveItemId / description
        Previous value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph."
      • changedInput schema / properties / workbookWorksheetId / description
        Previous value: -"Path parameter: workbookWorksheetId"New value: +"Value for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph."
    • Changedcreate-forward-draft7 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/ToRecipients/items"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/ToRecipients/items"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "dateTime": {
        -                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -                "type": "string"
        -              },
        -              "timeZone": {
        -                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "$ref": "#/properties/body/properties/ToRecipients/items"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/ToRecipients/items"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "dueDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "$ref": "#/$defs/def0"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / body / properties / ToRecipients / items / $ref
        Added value: +"#/$defs/def1"
      • removedInput schema / properties / body / properties / ToRecipients / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / ToRecipients / items / properties
        Removed value: -{
        -  "emailAddress": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "address": {
        -        "description": "The email address of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "The display name of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / ToRecipients / items / type
        Removed value: -"object"
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Changedcreate-mail-attachment-upload-session1 field changed
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedcreate-mail-child-folder
    • Addedcreate-mail-folder
    • Addedcreate-mail-rule
    • Addedcreate-my-calendar-permission
    • Addedcreate-onedrive-folder
    • Changedcreate-onenote-notebook18 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "application": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "device": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "user": {
        +        "$ref": "#/$defs/def1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def2": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "oneNoteClientUrl": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "oneNoteWebUrl": {
        +        "$ref": "#/$defs/def3"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def3": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "href": {
        +        "description": "The URL of the link.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def4": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def0"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def0"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "parentNotebook": {
        +        "$ref": "#/$defs/def5"
        +      },
        +      "parentSectionGroup": {
        +        "$ref": "#/$defs/def4"
        +      },
        +      "sectionGroups": {
        +        "description": "The section groups in the section. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def4"
        +        },
        +        "type": "array"
        +      },
        +      "sectionGroupsUrl": {
        +        "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sections": {
        +        "description": "The sections in the section group. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def6"
        +        },
        +        "type": "array"
        +      },
        +      "sectionsUrl": {
        +        "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def5": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def0"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "isDefault": {
        +        "description": "Indicates whether this is the user's default notebook. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isShared": {
        +        "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def0"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "links": {
        +        "$ref": "#/$defs/def2"
        +      },
        +      "sectionGroups": {
        +        "description": "The section groups in the notebook. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def4"
        +        },
        +        "type": "array"
        +      },
        +      "sectionGroupsUrl": {
        +        "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sections": {
        +        "description": "The sections in the notebook. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def6"
        +        },
        +        "type": "array"
        +      },
        +      "sectionsUrl": {
        +        "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "userRole": {
        +        "$ref": "#/$defs/def7"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def6": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def0"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "isDefault": {
        +        "description": "Indicates whether this is the user's default section. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def0"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "links": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "oneNoteClientUrl": {
        +            "$ref": "#/$defs/def3"
        +          },
        +          "oneNoteWebUrl": {
        +            "$ref": "#/$defs/def3"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "pages": {
        +        "description": "The collection of pages in the section.  Read-only. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "content": {
        +              "description": "The page's HTML content.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "contentUrl": {
        +              "description": "The URL for the page's HTML content.  Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "createdByAppId": {
        +              "description": "The unique identifier of the application that created the page. Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "createdDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +            },
        +            "level": {
        +              "anyOf": [
        +                {
        +                  "description": "The indentation level of the page. Read-only.",
        +                  "maximum": 2147483647,
        +                  "minimum": -2147483648,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The indentation level of the page. Read-only."
        +            },
        +            "links": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "oneNoteClientUrl": {
        +                  "$ref": "#/$defs/def3"
        +                },
        +                "oneNoteWebUrl": {
        +                  "$ref": "#/$defs/def3"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "order": {
        +              "anyOf": [
        +                {
        +                  "description": "The order of the page within its parent section. Read-only.",
        +                  "maximum": 2147483647,
        +                  "minimum": -2147483648,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The order of the page within its parent section. Read-only."
        +            },
        +            "parentNotebook": {
        +              "$ref": "#/$defs/def5"
        +            },
        +            "parentSection": {
        +              "$ref": "#/$defs/def6"
        +            },
        +            "self": {
        +              "description": "The endpoint where you can get details about the page. Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "title": {
        +              "description": "The title of the page.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "userTags": {
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "pagesUrl": {
        +        "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "parentNotebook": {
        +        "$ref": "#/$defs/def5"
        +      },
        +      "parentSectionGroup": {
        +        "$ref": "#/$defs/def4"
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def7": {
        +    "enum": [
        +      "None",
        +      "Owner",
        +      "Contributor",
        +      "Reader"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdBy / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / createdBy / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / createdBy / properties
        Removed value: -{
        -  "application": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "device": {
        -    "$ref": "#/properties/body/properties/createdBy/properties/application"
        -  },
        -  "user": {
        -    "$ref": "#/properties/body/properties/createdBy/properties/application"
        -  }
        -}
      • removedInput schema / properties / body / properties / createdBy / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / lastModifiedBy / $ref
        Previous value: -"#/properties/body/properties/createdBy"New value: +"#/$defs/def0"
      • addedInput schema / properties / body / properties / links / $ref
        Added value: +"#/$defs/def2"
      • removedInput schema / properties / body / properties / links / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / links / properties
        Removed value: -{
        -  "oneNoteClientUrl": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "href": {
        -        "description": "The URL of the link.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "oneNoteWebUrl": {
        -    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -  }
        -}
      • removedInput schema / properties / body / properties / links / type
        Removed value: -"object"
      • addedInput schema / properties / body / properties / sectionGroups / items / $ref
        Added value: +"#/$defs/def4"
      • removedInput schema / properties / body / properties / sectionGroups / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / sectionGroups / items / properties
        Removed value: -{
        -  "createdBy": {
        -    "$ref": "#/properties/body/properties/createdBy"
        -  },
        -  "createdDateTime": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -  },
        -  "displayName": {
        -    "description": "The name of the notebook.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "id": {
        -    "description": "The unique identifier for an entity. Read-only.",
        -    "type": "string"
        -  },
        -  "lastModifiedBy": {
        -    "$ref": "#/properties/body/properties/createdBy"
        -  },
        -  "lastModifiedDateTime": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -  },
        -  "parentNotebook": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "createdBy": {
        -        "$ref": "#/properties/body/properties/createdBy"
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -      },
        -      "displayName": {
        -        "description": "The name of the notebook.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "isDefault": {
        -        "description": "Indicates whether this is the user's default notebook. Read-only.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isShared": {
        -        "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedBy": {
        -        "$ref": "#/properties/body/properties/createdBy"
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -      },
        -      "links": {
        -        "$ref": "#/properties/body/properties/links"
        -      },
        -      "sectionGroups": {
        -        "description": "The section groups in the notebook. Read-only. Nullable.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/sectionGroups/items"
        -        },
        -        "type": "array"
        -      },
        -      "sectionGroupsUrl": {
        -        "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "sections": {
        -        "description": "The sections in the notebook. Read-only. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "createdBy": {
        -              "$ref": "#/properties/body/properties/createdBy"
        -            },
        -            "createdDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -            },
        -            "displayName": {
        -              "description": "The name of the notebook.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isDefault": {
        -              "description": "Indicates whether this is the user's default section. Read-only.",
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            },
        -            "lastModifiedBy": {
        -              "$ref": "#/properties/body/properties/createdBy"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -            },
        -            "links": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "oneNoteClientUrl": {
        -                  "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -                },
        -                "oneNoteWebUrl": {
        -                  "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "pages": {
        -              "description": "The collection of pages in the section.  Read-only. Nullable.",
        -              "items": {
        -                "additionalProperties": true,
        -                "properties": {
        -                  "content": {
        -                    "description": "The page's HTML content.",
        -                    "type": [
        -                      "string",
        -                      "null"
        -                    ]
        -                  },
        -                  "contentUrl": {
        -                    "description": "The URL for the page's HTML content.  Read-only.",
        -                    "type": [
        -                      "string",
        -                      "null"
        -                    ]
        -                  },
        -                  "createdByAppId": {
        -                    "description": "The unique identifier of the application that created the page. Read-only.",
        -                    "type": [
        -                      "string",
        -                      "null"
        -                    ]
        -                  },
        -                  "createdDateTime": {
        -                    "anyOf": [
        -                      {
        -                        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                        "format": "date-time",
        -                        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -                  },
        -                  "id": {
        -                    "description": "The unique identifier for an entity. Read-only.",
        -                    "type": "string"
        -                  },
        -                  "lastModifiedDateTime": {
        -                    "anyOf": [
        -                      {
        -                        "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                        "format": "date-time",
        -                        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -                  },
        -                  "level": {
        -                    "anyOf": [
        -                      {
        -                        "description": "The indentation level of the page. Read-only.",
        -                        "maximum": 2147483647,
        -                        "minimum": -2147483648,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The indentation level of the page. Read-only."
        -                  },
        -                  "links": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "oneNoteClientUrl": {
        -                        "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -                      },
        -                      "oneNoteWebUrl": {
        -                        "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -                      }
        -                    },
        -                    "type": "object"
        -                  },
        -                  "order": {
        -                    "anyOf": [
        -                      {
        -                        "description": "The order of the page within its parent section. Read-only.",
        -                        "maximum": 2147483647,
        -                        "minimum": -2147483648,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The order of the page within its parent section. Read-only."
        -                  },
        -                  "parentNotebook": {
        -                    "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook"
        -                  },
        -                  "parentSection": {
        -                    "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items"
        -                  },
        -                  "self": {
        -                    "description": "The endpoint where you can get details about the page. Read-only.",
        -                    "type": [
        -                      "string",
        -                      "null"
        -                    ]
        -                  },
        -                  "title": {
        -                    "description": "The title of the page.",
        -                    "type": [
        -                      "string",
        -                      "null"
        -                    ]
        -                  },
        -                  "userTags": {
        -                    "items": {
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "type": "array"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "type": "array"
        -            },
        -            "pagesUrl": {
        -              "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "parentNotebook": {
        -              "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook"
        -            },
        -            "parentSectionGroup": {
        -              "$ref": "#/properties/body/properties/sectionGroups/items"
        -            },
        -            "self": {
        -              "description": "The endpoint where you can get details about the page. Read-only.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "sectionsUrl": {
        -        "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "self": {
        -        "description": "The endpoint where you can get details about the page. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "userRole": {
        -        "$ref": "#/properties/body/properties/userRole"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "parentSectionGroup": {
        -    "$ref": "#/properties/body/properties/sectionGroups/items"
        -  },
        -  "sectionGroups": {
        -    "description": "The section groups in the section. Read-only. Nullable.",
        -    "items": {
        -      "$ref": "#/properties/body/properties/sectionGroups/items"
        -    },
        -    "type": "array"
        -  },
        -  "sectionGroupsUrl": {
        -    "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "sections": {
        -    "description": "The sections in the section group. Read-only. Nullable.",
        -    "items": {
        -      "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items"
        -    },
        -    "type": "array"
        -  },
        -  "sectionsUrl": {
        -    "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "self": {
        -    "description": "The endpoint where you can get details about the page. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / sectionGroups / items / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / sections / items / $ref
        Previous value: -"#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items"New value: +"#/$defs/def6"
      • addedInput schema / properties / body / properties / userRole / $ref
        Added value: +"#/$defs/def7"
      • removedInput schema / properties / body / properties / userRole / enum
        Removed value: -[
        -  "None",
        -  "Owner",
        -  "Contributor",
        -  "Reader"
        -]
      • removedInput schema / properties / body / properties / userRole / type
        Removed value: -"string"
    • Changedcreate-onenote-page10 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "oneNoteClientUrl": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "oneNoteWebUrl": {
        +        "$ref": "#/$defs/def1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "href": {
        +        "description": "The URL of the link.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def2": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "isDefault": {
        +        "description": "Indicates whether this is the user's default notebook. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isShared": {
        +        "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "links": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "oneNoteClientUrl": {
        +            "$ref": "#/$defs/def1"
        +          },
        +          "oneNoteWebUrl": {
        +            "$ref": "#/$defs/def1"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "sectionGroups": {
        +        "description": "The section groups in the notebook. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def5"
        +        },
        +        "type": "array"
        +      },
        +      "sectionGroupsUrl": {
        +        "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sections": {
        +        "description": "The sections in the notebook. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def6"
        +        },
        +        "type": "array"
        +      },
        +      "sectionsUrl": {
        +        "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "userRole": {
        +        "enum": [
        +          "None",
        +          "Owner",
        +          "Contributor",
        +          "Reader"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def3": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "application": {
        +        "$ref": "#/$defs/def4"
        +      },
        +      "device": {
        +        "$ref": "#/$defs/def4"
        +      },
        +      "user": {
        +        "$ref": "#/$defs/def4"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def4": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def5": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "parentNotebook": {
        +        "$ref": "#/$defs/def2"
        +      },
        +      "parentSectionGroup": {
        +        "$ref": "#/$defs/def5"
        +      },
        +      "sectionGroups": {
        +        "description": "The section groups in the section. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def5"
        +        },
        +        "type": "array"
        +      },
        +      "sectionGroupsUrl": {
        +        "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sections": {
        +        "description": "The sections in the section group. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def6"
        +        },
        +        "type": "array"
        +      },
        +      "sectionsUrl": {
        +        "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def6": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "isDefault": {
        +        "description": "Indicates whether this is the user's default section. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "links": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "oneNoteClientUrl": {
        +            "$ref": "#/$defs/def1"
        +          },
        +          "oneNoteWebUrl": {
        +            "$ref": "#/$defs/def1"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "pages": {
        +        "description": "The collection of pages in the section.  Read-only. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "content": {
        +              "description": "The page's HTML content.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "contentUrl": {
        +              "description": "The URL for the page's HTML content.  Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "createdByAppId": {
        +              "description": "The unique identifier of the application that created the page. Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "createdDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +            },
        +            "level": {
        +              "anyOf": [
        +                {
        +                  "description": "The indentation level of the page. Read-only.",
        +                  "maximum": 2147483647,
        +                  "minimum": -2147483648,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The indentation level of the page. Read-only."
        +            },
        +            "links": {
        +              "$ref": "#/$defs/def0"
        +            },
        +            "order": {
        +              "anyOf": [
        +                {
        +                  "description": "The order of the page within its parent section. Read-only.",
        +                  "maximum": 2147483647,
        +                  "minimum": -2147483648,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The order of the page within its parent section. Read-only."
        +            },
        +            "parentNotebook": {
        +              "$ref": "#/$defs/def2"
        +            },
        +            "parentSection": {
        +              "$ref": "#/$defs/def6"
        +            },
        +            "self": {
        +              "description": "The endpoint where you can get details about the page. Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "title": {
        +              "description": "The title of the page.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "userTags": {
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "pagesUrl": {
        +        "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "parentNotebook": {
        +        "$ref": "#/$defs/def2"
        +      },
        +      "parentSectionGroup": {
        +        "$ref": "#/$defs/def5"
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / links / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / links / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / links / properties
        Removed value: -{
        -  "oneNoteClientUrl": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "href": {
        -        "description": "The URL of the link.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "oneNoteWebUrl": {
        -    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -  }
        -}
      • removedInput schema / properties / body / properties / links / type
        Removed value: -"object"
      • addedInput schema / properties / body / properties / parentNotebook / $ref
        Added value: +"#/$defs/def2"
      • removedInput schema / properties / body / properties / parentNotebook / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / parentNotebook / properties
        Removed value: -{
        -  "createdBy": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "displayName": {
        -            "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "id": {
        -            "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "device": {
        -        "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy/properties/application"
        -      },
        -      "user": {
        -        "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy/properties/application"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "createdDateTime": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -  },
        -  "displayName": {
        -    "description": "The name of the notebook.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "id": {
        -    "description": "The unique identifier for an entity. Read-only.",
        -    "type": "string"
        -  },
        -  "isDefault": {
        -    "description": "Indicates whether this is the user's default notebook. Read-only.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "isShared": {
        -    "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "lastModifiedBy": {
        -    "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -  },
        -  "lastModifiedDateTime": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -  },
        -  "links": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "oneNoteClientUrl": {
        -        "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -      },
        -      "oneNoteWebUrl": {
        -        "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "sectionGroups": {
        -    "description": "The section groups in the notebook. Read-only. Nullable.",
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "createdBy": {
        -          "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -        },
        -        "createdDateTime": {
        -          "anyOf": [
        -            {
        -              "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -              "format": "date-time",
        -              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -        },
        -        "displayName": {
        -          "description": "The name of the notebook.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "description": "The unique identifier for an entity. Read-only.",
        -          "type": "string"
        -        },
        -        "lastModifiedBy": {
        -          "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -        },
        -        "lastModifiedDateTime": {
        -          "anyOf": [
        -            {
        -              "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -              "format": "date-time",
        -              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -        },
        -        "parentNotebook": {
        -          "$ref": "#/properties/body/properties/parentNotebook"
        -        },
        -        "parentSectionGroup": {
        -          "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items"
        -        },
        -        "sectionGroups": {
        -          "description": "The section groups in the section. Read-only. Nullable.",
        -          "items": {
        -            "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items"
        -          },
        -          "type": "array"
        -        },
        -        "sectionGroupsUrl": {
        -          "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sections": {
        -          "description": "The sections in the section group. Read-only. Nullable.",
        -          "items": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "createdBy": {
        -                "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -              },
        -              "createdDateTime": {
        -                "anyOf": [
        -                  {
        -                    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                    "format": "date-time",
        -                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -              },
        -              "displayName": {
        -                "description": "The name of the notebook.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "id": {
        -                "description": "The unique identifier for an entity. Read-only.",
        -                "type": "string"
        -              },
        -              "isDefault": {
        -                "description": "Indicates whether this is the user's default section. Read-only.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "lastModifiedBy": {
        -                "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -              },
        -              "lastModifiedDateTime": {
        -                "anyOf": [
        -                  {
        -                    "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                    "format": "date-time",
        -                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -              },
        -              "links": {
        -                "additionalProperties": true,
        -                "properties": {
        -                  "oneNoteClientUrl": {
        -                    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -                  },
        -                  "oneNoteWebUrl": {
        -                    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "pages": {
        -                "description": "The collection of pages in the section.  Read-only. Nullable.",
        -                "items": {
        -                  "additionalProperties": true,
        -                  "properties": {
        -                    "content": {
        -                      "description": "The page's HTML content.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "contentUrl": {
        -                      "description": "The URL for the page's HTML content.  Read-only.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "createdByAppId": {
        -                      "description": "The unique identifier of the application that created the page. Read-only.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "createdDateTime": {
        -                      "anyOf": [
        -                        {
        -                          "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                          "format": "date-time",
        -                          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -                    },
        -                    "id": {
        -                      "description": "The unique identifier for an entity. Read-only.",
        -                      "type": "string"
        -                    },
        -                    "lastModifiedDateTime": {
        -                      "anyOf": [
        -                        {
        -                          "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                          "format": "date-time",
        -                          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -                    },
        -                    "level": {
        -                      "anyOf": [
        -                        {
        -                          "description": "The indentation level of the page. Read-only.",
        -                          "maximum": 2147483647,
        -                          "minimum": -2147483648,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The indentation level of the page. Read-only."
        -                    },
        -                    "links": {
        -                      "$ref": "#/properties/body/properties/links"
        -                    },
        -                    "order": {
        -                      "anyOf": [
        -                        {
        -                          "description": "The order of the page within its parent section. Read-only.",
        -                          "maximum": 2147483647,
        -                          "minimum": -2147483648,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The order of the page within its parent section. Read-only."
        -                    },
        -                    "parentNotebook": {
        -                      "$ref": "#/properties/body/properties/parentNotebook"
        -                    },
        -                    "parentSection": {
        -                      "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
        -                    },
        -                    "self": {
        -                      "description": "The endpoint where you can get details about the page. Read-only.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "title": {
        -                      "description": "The title of the page.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "userTags": {
        -                      "items": {
        -                        "type": [
        -                          "string",
        -                          "null"
        -                        ]
        -                      },
        -                      "type": "array"
        -                    }
        -                  },
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              },
        -              "pagesUrl": {
        -                "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "parentNotebook": {
        -                "$ref": "#/properties/body/properties/parentNotebook"
        -              },
        -              "parentSectionGroup": {
        -                "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items"
        -              },
        -              "self": {
        -                "description": "The endpoint where you can get details about the page. Read-only.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "sectionsUrl": {
        -          "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "self": {
        -          "description": "The endpoint where you can get details about the page. Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "sectionGroupsUrl": {
        -    "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "sections": {
        -    "description": "The sections in the notebook. Read-only. Nullable.",
        -    "items": {
        -      "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
        -    },
        -    "type": "array"
        -  },
        -  "sectionsUrl": {
        -    "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "self": {
        -    "description": "The endpoint where you can get details about the page. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "userRole": {
        -    "enum": [
        -      "None",
        -      "Owner",
        -      "Contributor",
        -      "Reader"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / parentNotebook / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / parentSection / $ref
        Previous value: -"#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"New value: +"#/$defs/def6"
    • Addedcreate-onenote-section
    • Changedcreate-onenote-section-page11 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "oneNoteClientUrl": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "oneNoteWebUrl": {
        +        "$ref": "#/$defs/def1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "href": {
        +        "description": "The URL of the link.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def2": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "isDefault": {
        +        "description": "Indicates whether this is the user's default notebook. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isShared": {
        +        "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "links": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "oneNoteClientUrl": {
        +            "$ref": "#/$defs/def1"
        +          },
        +          "oneNoteWebUrl": {
        +            "$ref": "#/$defs/def1"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "sectionGroups": {
        +        "description": "The section groups in the notebook. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def5"
        +        },
        +        "type": "array"
        +      },
        +      "sectionGroupsUrl": {
        +        "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sections": {
        +        "description": "The sections in the notebook. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def6"
        +        },
        +        "type": "array"
        +      },
        +      "sectionsUrl": {
        +        "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "userRole": {
        +        "enum": [
        +          "None",
        +          "Owner",
        +          "Contributor",
        +          "Reader"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def3": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "application": {
        +        "$ref": "#/$defs/def4"
        +      },
        +      "device": {
        +        "$ref": "#/$defs/def4"
        +      },
        +      "user": {
        +        "$ref": "#/$defs/def4"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def4": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def5": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "parentNotebook": {
        +        "$ref": "#/$defs/def2"
        +      },
        +      "parentSectionGroup": {
        +        "$ref": "#/$defs/def5"
        +      },
        +      "sectionGroups": {
        +        "description": "The section groups in the section. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def5"
        +        },
        +        "type": "array"
        +      },
        +      "sectionGroupsUrl": {
        +        "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sections": {
        +        "description": "The sections in the section group. Read-only. Nullable.",
        +        "items": {
        +          "$ref": "#/$defs/def6"
        +        },
        +        "type": "array"
        +      },
        +      "sectionsUrl": {
        +        "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def6": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "displayName": {
        +        "description": "The name of the notebook.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "isDefault": {
        +        "description": "Indicates whether this is the user's default section. Read-only.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedBy": {
        +        "$ref": "#/$defs/def3"
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +      },
        +      "links": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "oneNoteClientUrl": {
        +            "$ref": "#/$defs/def1"
        +          },
        +          "oneNoteWebUrl": {
        +            "$ref": "#/$defs/def1"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "pages": {
        +        "description": "The collection of pages in the section.  Read-only. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "content": {
        +              "description": "The page's HTML content.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "contentUrl": {
        +              "description": "The URL for the page's HTML content.  Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "createdByAppId": {
        +              "description": "The unique identifier of the application that created the page. Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "createdDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +            },
        +            "level": {
        +              "anyOf": [
        +                {
        +                  "description": "The indentation level of the page. Read-only.",
        +                  "maximum": 2147483647,
        +                  "minimum": -2147483648,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The indentation level of the page. Read-only."
        +            },
        +            "links": {
        +              "$ref": "#/$defs/def0"
        +            },
        +            "order": {
        +              "anyOf": [
        +                {
        +                  "description": "The order of the page within its parent section. Read-only.",
        +                  "maximum": 2147483647,
        +                  "minimum": -2147483648,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The order of the page within its parent section. Read-only."
        +            },
        +            "parentNotebook": {
        +              "$ref": "#/$defs/def2"
        +            },
        +            "parentSection": {
        +              "$ref": "#/$defs/def6"
        +            },
        +            "self": {
        +              "description": "The endpoint where you can get details about the page. Read-only.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "title": {
        +              "description": "The title of the page.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "userTags": {
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "pagesUrl": {
        +        "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "parentNotebook": {
        +        "$ref": "#/$defs/def2"
        +      },
        +      "parentSectionGroup": {
        +        "$ref": "#/$defs/def5"
        +      },
        +      "self": {
        +        "description": "The endpoint where you can get details about the page. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / links / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / links / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / links / properties
        Removed value: -{
        -  "oneNoteClientUrl": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "href": {
        -        "description": "The URL of the link.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "oneNoteWebUrl": {
        -    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -  }
        -}
      • removedInput schema / properties / body / properties / links / type
        Removed value: -"object"
      • addedInput schema / properties / body / properties / parentNotebook / $ref
        Added value: +"#/$defs/def2"
      • removedInput schema / properties / body / properties / parentNotebook / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / parentNotebook / properties
        Removed value: -{
        -  "createdBy": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "application": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "displayName": {
        -            "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "id": {
        -            "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "device": {
        -        "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy/properties/application"
        -      },
        -      "user": {
        -        "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy/properties/application"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "createdDateTime": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -  },
        -  "displayName": {
        -    "description": "The name of the notebook.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "id": {
        -    "description": "The unique identifier for an entity. Read-only.",
        -    "type": "string"
        -  },
        -  "isDefault": {
        -    "description": "Indicates whether this is the user's default notebook. Read-only.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "isShared": {
        -    "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "lastModifiedBy": {
        -    "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -  },
        -  "lastModifiedDateTime": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -  },
        -  "links": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "oneNoteClientUrl": {
        -        "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -      },
        -      "oneNoteWebUrl": {
        -        "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "sectionGroups": {
        -    "description": "The section groups in the notebook. Read-only. Nullable.",
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "createdBy": {
        -          "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -        },
        -        "createdDateTime": {
        -          "anyOf": [
        -            {
        -              "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -              "format": "date-time",
        -              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -        },
        -        "displayName": {
        -          "description": "The name of the notebook.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "description": "The unique identifier for an entity. Read-only.",
        -          "type": "string"
        -        },
        -        "lastModifiedBy": {
        -          "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -        },
        -        "lastModifiedDateTime": {
        -          "anyOf": [
        -            {
        -              "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -              "format": "date-time",
        -              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -        },
        -        "parentNotebook": {
        -          "$ref": "#/properties/body/properties/parentNotebook"
        -        },
        -        "parentSectionGroup": {
        -          "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items"
        -        },
        -        "sectionGroups": {
        -          "description": "The section groups in the section. Read-only. Nullable.",
        -          "items": {
        -            "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items"
        -          },
        -          "type": "array"
        -        },
        -        "sectionGroupsUrl": {
        -          "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sections": {
        -          "description": "The sections in the section group. Read-only. Nullable.",
        -          "items": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "createdBy": {
        -                "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -              },
        -              "createdDateTime": {
        -                "anyOf": [
        -                  {
        -                    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                    "format": "date-time",
        -                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -              },
        -              "displayName": {
        -                "description": "The name of the notebook.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "id": {
        -                "description": "The unique identifier for an entity. Read-only.",
        -                "type": "string"
        -              },
        -              "isDefault": {
        -                "description": "Indicates whether this is the user's default section. Read-only.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "lastModifiedBy": {
        -                "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy"
        -              },
        -              "lastModifiedDateTime": {
        -                "anyOf": [
        -                  {
        -                    "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                    "format": "date-time",
        -                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -              },
        -              "links": {
        -                "additionalProperties": true,
        -                "properties": {
        -                  "oneNoteClientUrl": {
        -                    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -                  },
        -                  "oneNoteWebUrl": {
        -                    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "pages": {
        -                "description": "The collection of pages in the section.  Read-only. Nullable.",
        -                "items": {
        -                  "additionalProperties": true,
        -                  "properties": {
        -                    "content": {
        -                      "description": "The page's HTML content.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "contentUrl": {
        -                      "description": "The URL for the page's HTML content.  Read-only.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "createdByAppId": {
        -                      "description": "The unique identifier of the application that created the page. Read-only.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "createdDateTime": {
        -                      "anyOf": [
        -                        {
        -                          "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                          "format": "date-time",
        -                          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -                    },
        -                    "id": {
        -                      "description": "The unique identifier for an entity. Read-only.",
        -                      "type": "string"
        -                    },
        -                    "lastModifiedDateTime": {
        -                      "anyOf": [
        -                        {
        -                          "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -                          "format": "date-time",
        -                          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -                    },
        -                    "level": {
        -                      "anyOf": [
        -                        {
        -                          "description": "The indentation level of the page. Read-only.",
        -                          "maximum": 2147483647,
        -                          "minimum": -2147483648,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The indentation level of the page. Read-only."
        -                    },
        -                    "links": {
        -                      "$ref": "#/properties/body/properties/links"
        -                    },
        -                    "order": {
        -                      "anyOf": [
        -                        {
        -                          "description": "The order of the page within its parent section. Read-only.",
        -                          "maximum": 2147483647,
        -                          "minimum": -2147483648,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The order of the page within its parent section. Read-only."
        -                    },
        -                    "parentNotebook": {
        -                      "$ref": "#/properties/body/properties/parentNotebook"
        -                    },
        -                    "parentSection": {
        -                      "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
        -                    },
        -                    "self": {
        -                      "description": "The endpoint where you can get details about the page. Read-only.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "title": {
        -                      "description": "The title of the page.",
        -                      "type": [
        -                        "string",
        -                        "null"
        -                      ]
        -                    },
        -                    "userTags": {
        -                      "items": {
        -                        "type": [
        -                          "string",
        -                          "null"
        -                        ]
        -                      },
        -                      "type": "array"
        -                    }
        -                  },
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              },
        -              "pagesUrl": {
        -                "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "parentNotebook": {
        -                "$ref": "#/properties/body/properties/parentNotebook"
        -              },
        -              "parentSectionGroup": {
        -                "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items"
        -              },
        -              "self": {
        -                "description": "The endpoint where you can get details about the page. Read-only.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "sectionsUrl": {
        -          "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "self": {
        -          "description": "The endpoint where you can get details about the page. Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "sectionGroupsUrl": {
        -    "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "sections": {
        -    "description": "The sections in the notebook. Read-only. Nullable.",
        -    "items": {
        -      "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
        -    },
        -    "type": "array"
        -  },
        -  "sectionsUrl": {
        -    "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "self": {
        -    "description": "The endpoint where you can get details about the page. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "userRole": {
        -    "enum": [
        -      "None",
        -      "Owner",
        -      "Contributor",
        -      "Reader"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / body / properties / parentNotebook / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / parentSection / $ref
        Previous value: -"#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"New value: +"#/$defs/def6"
      • changedInput schema / properties / onenoteSectionId / description
        Previous value: -"Path parameter: onenoteSectionId"New value: +"Value for the 'onenoteSectionId' path segment. Pass it under the name 'onenoteSectionId', not as 'id'. Use the 'id' field of the onenote section object as returned by Microsoft Graph."
    • Addedcreate-outlook-contact
    • Changedcreate-planner-bucket10 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "application": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "device": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "user": {
        +        "$ref": "#/$defs/def1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def2": {
        +    "enum": [
        +      "automatic",
        +      "noPreview",
        +      "checklist",
        +      "description",
        +      "reference"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / completedBy / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / tasks / items / properties / completedBy / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / tasks / items / properties / completedBy / properties
        Removed value: -{
        -  "application": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "device": {
        -    "$ref": "#/properties/body/properties/tasks/items/properties/completedBy/properties/application"
        -  },
        -  "user": {
        -    "$ref": "#/properties/body/properties/tasks/items/properties/completedBy/properties/application"
        -  }
        -}
      • removedInput schema / properties / body / properties / tasks / items / properties / completedBy / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / tasks / items / properties / createdBy / $ref
        Previous value: -"#/properties/body/properties/tasks/items/properties/completedBy"New value: +"#/$defs/def0"
      • addedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / $ref
        Added value: +"#/$defs/def2"
      • removedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / enum
        Removed value: -[
        -  "automatic",
        -  "noPreview",
        -  "checklist",
        -  "description",
        -  "reference"
        -]
      • removedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / type
        Removed value: -"string"
      • changedInput schema / properties / body / properties / tasks / items / properties / previewType / $ref
        Previous value: -"#/properties/body/properties/tasks/items/properties/details/properties/previewType"New value: +"#/$defs/def2"
    • Changedcreate-planner-task10 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "application": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "device": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "user": {
        +        "$ref": "#/$defs/def1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def2": {
        +    "enum": [
        +      "automatic",
        +      "noPreview",
        +      "checklist",
        +      "description",
        +      "reference"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / completedBy / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / completedBy / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / completedBy / properties
        Removed value: -{
        -  "application": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "device": {
        -    "$ref": "#/properties/body/properties/completedBy/properties/application"
        -  },
        -  "user": {
        -    "$ref": "#/properties/body/properties/completedBy/properties/application"
        -  }
        -}
      • removedInput schema / properties / body / properties / completedBy / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / createdBy / $ref
        Previous value: -"#/properties/body/properties/completedBy"New value: +"#/$defs/def0"
      • addedInput schema / properties / body / properties / details / properties / previewType / $ref
        Added value: +"#/$defs/def2"
      • removedInput schema / properties / body / properties / details / properties / previewType / enum
        Removed value: -[
        -  "automatic",
        -  "noPreview",
        -  "checklist",
        -  "description",
        -  "reference"
        -]
      • removedInput schema / properties / body / properties / details / properties / previewType / type
        Removed value: -"string"
      • changedInput schema / properties / body / properties / previewType / $ref
        Previous value: -"#/properties/body/properties/details/properties/previewType"New value: +"#/$defs/def2"
    • Changedcreate-planner-task-message7 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "application": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "device": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "user": {
        +        "$ref": "#/$defs/def1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / body / properties / createdBy / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / createdBy / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / createdBy / properties
        Removed value: -{
        -  "application": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "device": {
        -    "$ref": "#/properties/body/properties/createdBy/properties/application"
        -  },
        -  "user": {
        -    "$ref": "#/properties/body/properties/createdBy/properties/application"
        -  }
        -}
      • removedInput schema / properties / body / properties / createdBy / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / $ref
        Previous value: -"#/properties/body/properties/createdBy"New value: +"#/$defs/def0"
      • changedInput schema / properties / plannerTaskId / description
        Previous value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
    • Changedcreate-reply-all-draft3 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "dateTime": {
        -                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -                "type": "string"
        -              },
        -              "timeZone": {
        -                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "emailAddress": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "address": {
        -                "description": "The email address of the person or entity.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "name": {
        -                "description": "The display name of the person or entity.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "dueDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "$ref": "#/$defs/def0"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Changedcreate-reply-draft3 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "dateTime": {
        -                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -                "type": "string"
        -              },
        -              "timeZone": {
        -                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "emailAddress": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "address": {
        -                "description": "The email address of the person or entity.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "name": {
        -                "description": "The display name of the person or entity.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "dueDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "$ref": "#/$defs/def0"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedcreate-specific-calendar-event
    • Changedcreate-todo-linked-resource2 fields changed
      • changedInput schema / properties / todoTaskId / description
        Previous value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph."
      • changedInput schema / properties / todoTaskListId / description
        Previous value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
    • Changedcreate-todo-task11 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / completedDateTime / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / completedDateTime / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / completedDateTime / properties
        Removed value: -{
        -  "dateTime": {
        -    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -    "type": "string"
        -  },
        -  "timeZone": {
        -    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / completedDateTime / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / dueDateTime / $ref
        Previous value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/def1"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Previous value: -"#/properties/body/properties/recurrence/properties/pattern/properties/daysOfWeek/items/anyOf/0"New value: +"#/$defs/def1"
      • changedInput schema / properties / body / properties / reminderDateTime / $ref
        Previous value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / body / properties / startDateTime / $ref
        Previous value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / todoTaskListId / description
        Previous value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
    • Removedcreate-todo-task-list
    • Addedcreate-upload-session
    • Addeddecline-calendar-event
    • Addeddelete-calendar
    • Addeddelete-calendar-event
    • Changeddelete-contact-folder1 field changed
      • changedInput schema / properties / contactFolderId / description
        Previous value: -"Path parameter: contactFolderId"New value: +"Value for the 'contactFolderId' path segment. Pass it under the name 'contactFolderId', not as 'id'. Use the 'id' field of the contact folder object as returned by Microsoft Graph."
    • Addeddelete-drive-item-permission
    • Addeddelete-excel-range
    • Addeddelete-excel-table-row
    • Addeddelete-focused-inbox-override
    • Changeddelete-mail-attachment2 fields changed
      • changedInput schema / properties / attachmentId / description
        Previous value: -"Path parameter: attachmentId"New value: +"Value for the 'attachmentId' path segment. Pass it under the name 'attachmentId', not as 'id'. Use the 'id' field of the attachment object as returned by Microsoft Graph."
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addeddelete-mail-folder
    • Changeddelete-mail-message1 field changed
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addeddelete-mail-rule
    • Addeddelete-my-calendar-permission
    • Addeddelete-onedrive-file
    • Changeddelete-onenote-page1 field changed
      • changedInput schema / properties / onenotePageId / description
        Previous value: -"Path parameter: onenotePageId"New value: +"Value for the 'onenotePageId' path segment. Pass it under the name 'onenotePageId', not as 'id'. Use the 'id' field of the onenote page object as returned by Microsoft Graph."
    • Addeddelete-outlook-contact
    • Changeddelete-planner-bucket1 field changed
      • changedInput schema / properties / plannerBucketId / description
        Previous value: -"Path parameter: plannerBucketId"New value: +"Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph."
    • Changeddelete-planner-task-message2 fields changed
      • changedInput schema / properties / plannerTaskChatMessageId / description
        Previous value: -"Path parameter: plannerTaskChatMessageId"New value: +"Value for the 'plannerTaskChatMessageId' path segment. Pass it under the name 'plannerTaskChatMessageId', not as 'id'. Use the 'id' field of the planner task chat message object as returned by Microsoft Graph."
      • changedInput schema / properties / plannerTaskId / description
        Previous value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
    • Addeddelete-specific-calendar-event
    • Changeddelete-subscription1 field changed
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Path parameter: subscriptionId"New value: +"Value for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph."
    • Changeddelete-todo-linked-resource3 fields changed
      • changedInput schema / properties / linkedResourceId / description
        Previous value: -"Path parameter: linkedResourceId"New value: +"Value for the 'linkedResourceId' path segment. Pass it under the name 'linkedResourceId', not as 'id'. Use the 'id' field of the linked resource object as returned by Microsoft Graph."
      • changedInput schema / properties / todoTaskId / description
        Previous value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph."
      • changedInput schema / properties / todoTaskListId / description
        Previous value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
    • Changeddelete-todo-task2 fields changed
      • changedInput schema / properties / todoTaskId / description
        Previous value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph."
      • changedInput schema / properties / todoTaskListId / description
        Previous value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
    • Removeddelete-todo-task-list
    • Addeddismiss-calendar-event-reminder
    • Addeddownload-bytes
    • Addeddownload-bytes-to-file
    • Changedformat-excel-range4 fields changed
      • changedInput schema / properties / address / description
        Previous value: -"Path parameter: address"New value: +"Value for the 'address' path segment."
      • changedInput schema / properties / driveId / description
        Previous value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph."
      • changedInput schema / properties / driveItemId / description
        Previous value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph."
      • changedInput schema / properties / workbookWorksheetId / description
        Previous value: -"Path parameter: workbookWorksheetId"New value: +"Value for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph."
    • Addedformat-excel-range-border
    • Addedformat-excel-range-fill
    • Addedformat-excel-range-font
    • Addedforward-calendar-event
    • Changedforward-mail-message7 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/ToRecipients/items"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/ToRecipients/items"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "dateTime": {
        -                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -                "type": "string"
        -              },
        -              "timeZone": {
        -                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "$ref": "#/properties/body/properties/ToRecipients/items"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/ToRecipients/items"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "dueDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "$ref": "#/$defs/def0"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / body / properties / ToRecipients / items / $ref
        Added value: +"#/$defs/def1"
      • removedInput schema / properties / body / properties / ToRecipients / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / ToRecipients / items / properties
        Removed value: -{
        -  "emailAddress": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "address": {
        -        "description": "The email address of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "The display name of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / ToRecipients / items / type
        Removed value: -"object"
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedget-calendar-event
    • Addedget-calendar-view
    • Addedget-current-user
    • Addedget-drive-delta
    • Addedget-drive-item
    • Addedget-drive-root-item
    • Changedget-excel-range4 fields changed
      • changedInput schema / properties / address / description
        Previous value: -"Path parameter: address"New value: +"Value for the 'address' path segment."
      • changedInput schema / properties / driveId / description
        Previous value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph."
      • changedInput schema / properties / driveItemId / description
        Previous value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph."
      • changedInput schema / properties / workbookWorksheetId / description
        Previous value: -"Path parameter: workbookWorksheetId"New value: +"Value for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph."
    • Addedget-excel-range-format
    • Addedget-excel-table
    • Addedget-excel-used-range
    • Changedget-mail-message2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Changedget-mail-message-mime1 field changed
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedget-mail-tips
    • Addedget-mailbox-settings
    • Changedget-my-profile1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Changedget-onenote-page-content1 field changed
      • changedInput schema / properties / onenotePageId / description
        Previous value: -"Path parameter: onenotePageId"New value: +"Value for the 'onenotePageId' path segment. Pass it under the name 'onenotePageId', not as 'id'. Use the 'id' field of the onenote page object as returned by Microsoft Graph."
    • Addedget-outlook-contact
    • Changedget-planner-bucket2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / plannerBucketId / description
        Previous value: -"Path parameter: plannerBucketId"New value: +"Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph."
    • Changedget-planner-plan2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / plannerPlanId / description
        Previous value: -"Path parameter: plannerPlanId"New value: +"Value for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph."
    • Changedget-planner-task2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / plannerTaskId / description
        Previous value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
    • Changedget-planner-task-details2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / plannerTaskId / description
        Previous value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
    • Addedget-specific-calendar-event
    • Addedget-specific-calendar-view
    • Changedget-subscription1 field changed
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Path parameter: subscriptionId"New value: +"Value for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph."
    • Changedget-todo-task3 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / todoTaskId / description
        Previous value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph."
      • changedInput schema / properties / todoTaskListId / description
        Previous value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
    • Addedgraph-batch
    • Addedinsert-excel-range
    • Addedlist-accounts
    • Changedlist-all-onenote-sections1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Addedlist-calendar-event-instances
    • Addedlist-calendar-events
    • Addedlist-calendar-events-delta
    • Addedlist-calendar-view-delta
    • Addedlist-calendars
    • Addedlist-contact-folder-child-folders
    • Addedlist-contact-folder-contacts
    • Addedlist-contact-folders
    • Addedlist-drive-item-permissions
    • Addedlist-drive-item-thumbnails
    • Addedlist-drive-item-versions
    • Addedlist-drives
    • Addedlist-excel-table-rows
    • Changedlist-excel-tables3 fields changed
      • changedInput schema / properties / driveId / description
        Previous value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph."
      • changedInput schema / properties / driveItemId / description
        Previous value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph."
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Changedlist-excel-worksheets3 fields changed
      • changedInput schema / properties / driveId / description
        Previous value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph."
      • changedInput schema / properties / driveItemId / description
        Previous value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph."
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Addedlist-focused-inbox-overrides
    • Addedlist-folder-files
    • Changedlist-mail-attachments2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedlist-mail-child-folders
    • Addedlist-mail-folder-messages
    • Addedlist-mail-folder-messages-delta
    • Addedlist-mail-folders
    • Changedlist-mail-messages1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Addedlist-mail-rules
    • Addedlist-my-calendar-permissions
    • Changedlist-onenote-notebook-sections2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / notebookId / description
        Previous value: -"Path parameter: notebookId"New value: +"Value for the 'notebookId' path segment. Pass it under the name 'notebookId', not as 'id'. Use the 'id' field of the notebook object as returned by Microsoft Graph."
    • Changedlist-onenote-notebooks1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Changedlist-onenote-pages1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Changedlist-onenote-section-groups1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Changedlist-onenote-section-pages2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / onenoteSectionId / description
        Previous value: -"Path parameter: onenoteSectionId"New value: +"Value for the 'onenoteSectionId' path segment. Pass it under the name 'onenoteSectionId', not as 'id'. Use the 'id' field of the onenote section object as returned by Microsoft Graph."
    • Changedlist-outlook-categories1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Addedlist-outlook-contacts
    • Changedlist-plan-buckets2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / plannerPlanId / description
        Previous value: -"Path parameter: plannerPlanId"New value: +"Value for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph."
    • Changedlist-plan-tasks2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / plannerPlanId / description
        Previous value: -"Path parameter: plannerPlanId"New value: +"Value for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph."
    • Changedlist-planner-task-messages2 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / plannerTaskId / description
        Previous value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
    • Changedlist-planner-tasks1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Addedlist-specific-calendar-events
    • Changedlist-subscriptions1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Changedlist-supported-time-zones1 field changed
      • changedInput schema / properties / TimeZoneStandard / description
        Previous value: -"Path parameter: TimeZoneStandard"New value: +"Value for the 'TimeZoneStandard' path segment."
    • Changedlist-todo-linked-resources3 fields changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / todoTaskId / description
        Previous value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph."
      • changedInput schema / properties / todoTaskListId / description
        Previous value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
    • Changedlist-todo-task-lists1 field changed
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
    • Removedlist-todo-tasks
    • Addedlogin
    • Addedlogout
    • Addedmerge-excel-range
    • Changedmove-mail-message1 field changed
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedmove-rename-onedrive-item
    • Changedreauthorize-subscription1 field changed
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Path parameter: subscriptionId"New value: +"Value for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph."
    • Addedremove-account
    • Changedreply-all-mail-message3 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "dateTime": {
        -                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -                "type": "string"
        -              },
        -              "timeZone": {
        -                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "emailAddress": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "address": {
        -                "description": "The email address of the person or entity.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "name": {
        -                "description": "The display name of the person or entity.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "dueDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "$ref": "#/$defs/def0"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Changedreply-mail-message3 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / Message / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "attachments": {
        -        "description": "The fileAttachment and itemAttachment attachments for the message.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "contentType": {
        -              "description": "The MIME type.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "isInline": {
        -              "description": "true if the attachment is an inline attachment; otherwise, false.",
        -              "type": "boolean"
        -            },
        -            "lastModifiedDateTime": {
        -              "anyOf": [
        -                {
        -                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -                  "format": "date-time",
        -                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -            },
        -            "name": {
        -              "description": "The attachment's file name.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "description": "The length of the attachment in bytes.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "bccRecipients": {
        -        "description": "The Bcc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      },
        -      "body": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "content": {
        -            "description": "The content of the item.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "contentType": {
        -            "enum": [
        -              "text",
        -              "html"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "bodyPreview": {
        -        "description": "The first 255 characters of the message body. It is in text format.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "categories": {
        -        "description": "The categories associated with the item",
        -        "items": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "ccRecipients": {
        -        "description": "The Cc: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      },
        -      "changeKey": {
        -        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationId": {
        -        "description": "The ID of the conversation the email belongs to.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "conversationIndex": {
        -        "description": "Indicates the position of the message within the conversation.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "flag": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "completedDateTime": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "dateTime": {
        -                "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -                "type": "string"
        -              },
        -              "timeZone": {
        -                "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "dueDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          },
        -          "flagStatus": {
        -            "enum": [
        -              "notFlagged",
        -              "complete",
        -              "flagged"
        -            ],
        -            "type": "string"
        -          },
        -          "startDateTime": {
        -            "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "from": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "emailAddress": {
        -            "additionalProperties": true,
        -            "properties": {
        -              "address": {
        -                "description": "The email address of the person or entity.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "name": {
        -                "description": "The display name of the person or entity.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "hasAttachments": {
        -        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "The unique identifier for an entity. Read-only.",
        -        "type": "string"
        -      },
        -      "importance": {
        -        "enum": [
        -          "low",
        -          "normal",
        -          "high"
        -        ],
        -        "type": "string"
        -      },
        -      "inferenceClassification": {
        -        "enum": [
        -          "focused",
        -          "other"
        -        ],
        -        "type": "string"
        -      },
        -      "internetMessageHeaders": {
        -        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "name": {
        -              "description": "Represents the key in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "value": {
        -              "description": "The value in a key-value pair.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "internetMessageId": {
        -        "description": "The message ID in the format specified by RFC2822.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "isDeliveryReceiptRequested": {
        -        "description": "Indicates whether a read receipt is requested for the message.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "isDraft": {
        -        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "lastModifiedDateTime": {
        -        "anyOf": [
        -          {
        -            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        -            "format": "date-time",
        -            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        -      },
        -      "multiValueExtendedProperties": {
        -        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A collection of property values.",
        -              "items": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "type": "array"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "singleValueExtendedProperties": {
        -        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        -        "items": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "id": {
        -              "description": "The unique identifier for an entity. Read-only.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "A property value.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "subject": {
        -        "description": "The subject of the message.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "toRecipients": {
        -        "description": "The To: recipients for the message.",
        -        "items": {
        -          "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "attachments": {
        +        "description": "The fileAttachment and itemAttachment attachments for the message.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "contentType": {
        +              "description": "The MIME type.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "isInline": {
        +              "description": "true if the attachment is an inline attachment; otherwise, false.",
        +              "type": "boolean"
        +            },
        +            "lastModifiedDateTime": {
        +              "anyOf": [
        +                {
        +                  "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +                  "format": "date-time",
        +                  "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +            },
        +            "name": {
        +              "description": "The attachment's file name.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "description": "The length of the attachment in bytes.",
        +              "maximum": 2147483647,
        +              "minimum": -2147483648,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "bccRecipients": {
        +        "description": "The Bcc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "body": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "content": {
        +            "description": "The content of the item.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contentType": {
        +            "enum": [
        +              "text",
        +              "html"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "bodyPreview": {
        +        "description": "The first 255 characters of the message body. It is in text format.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "categories": {
        +        "description": "The categories associated with the item",
        +        "items": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "ccRecipients": {
        +        "description": "The Cc: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      },
        +      "changeKey": {
        +        "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationId": {
        +        "description": "The ID of the conversation the email belongs to.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "conversationIndex": {
        +        "description": "Indicates the position of the message within the conversation.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "flag": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "completedDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "dueDateTime": {
        +            "$ref": "#/$defs/def0"
        +          },
        +          "flagStatus": {
        +            "enum": [
        +              "notFlagged",
        +              "complete",
        +              "flagged"
        +            ],
        +            "type": "string"
        +          },
        +          "startDateTime": {
        +            "$ref": "#/$defs/def0"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "from": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "hasAttachments": {
        +        "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The unique identifier for an entity. Read-only.",
        +        "type": "string"
        +      },
        +      "importance": {
        +        "enum": [
        +          "low",
        +          "normal",
        +          "high"
        +        ],
        +        "type": "string"
        +      },
        +      "inferenceClassification": {
        +        "enum": [
        +          "focused",
        +          "other"
        +        ],
        +        "type": "string"
        +      },
        +      "internetMessageHeaders": {
        +        "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message.  Requires $select to retrieve. Read-only.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "name": {
        +              "description": "Represents the key in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "value": {
        +              "description": "The value in a key-value pair.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "internetMessageId": {
        +        "description": "The message ID in the format specified by RFC2822.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "isDeliveryReceiptRequested": {
        +        "description": "Indicates whether a read receipt is requested for the message.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "isDraft": {
        +        "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "lastModifiedDateTime": {
        +        "anyOf": [
        +          {
        +            "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z",
        +            "format": "date-time",
        +            "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z"
        +      },
        +      "multiValueExtendedProperties": {
        +        "description": "The collection of multi-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A collection of property values.",
        +              "items": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "singleValueExtendedProperties": {
        +        "description": "The collection of single-value extended properties defined for the message. Nullable.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "id": {
        +              "description": "The unique identifier for an entity. Read-only.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "A property value.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "subject": {
        +        "description": "The subject of the message.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "toRecipients": {
        +        "description": "The To: recipients for the message.",
        +        "items": {
        +          "$ref": "#/$defs/def1"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Changedsearch-onedrive-files3 fields changed
      • changedInput schema / properties / driveId / description
        Previous value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph."
      • changedInput schema / properties / expand / description
        Previous value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
      • changedInput schema / properties / q / description
        Previous value: -"Path parameter: q"New value: +"Value for the 'q' path segment."
    • Changedsend-draft-message1 field changed
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Changedsend-mail14 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / Message / properties / bccRecipients / items / $ref
        Previous value: -"#/properties/body/properties/Message/properties/from"New value: +"#/$defs/def1"
      • changedInput schema / properties / body / properties / Message / properties / ccRecipients / items / $ref
        Previous value: -"#/properties/body/properties/Message/properties/from"New value: +"#/$defs/def1"
      • addedInput schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / properties
        Removed value: -{
        -  "dateTime": {
        -    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -    "type": "string"
        -  },
        -  "timeZone": {
        -    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / $ref
        Previous value: -"#/properties/body/properties/Message/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / body / properties / Message / properties / flag / properties / startDateTime / $ref
        Previous value: -"#/properties/body/properties/Message/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0"
      • addedInput schema / properties / body / properties / Message / properties / from / $ref
        Added value: +"#/$defs/def1"
      • removedInput schema / properties / body / properties / Message / properties / from / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / Message / properties / from / properties
        Removed value: -{
        -  "emailAddress": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "address": {
        -        "description": "The email address of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "The display name of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / Message / properties / from / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / Message / properties / toRecipients / items / $ref
        Previous value: -"#/properties/body/properties/Message/properties/from"New value: +"#/$defs/def1"
    • Addedshare-drive-item
    • Addedsnooze-calendar-event-reminder
    • Addedsort-excel-range
    • Changedtentatively-accept-calendar-event3 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / ProposedNewTime / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "end": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "dateTime": {
        -            "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -            "type": "string"
        -          },
        -          "timeZone": {
        -            "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "start": {
        -        "$ref": "#/properties/body/properties/ProposedNewTime/anyOf/0/properties/end"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "end": {
        +        "$ref": "#/$defs/def0"
        +      },
        +      "start": {
        +        "$ref": "#/$defs/def0"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / eventId / description
        Previous value: -"Path parameter: eventId"New value: +"Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph."
    • Changedunmerge-excel-range4 fields changed
      • changedInput schema / properties / address / description
        Previous value: -"Path parameter: address"New value: +"Value for the 'address' path segment."
      • changedInput schema / properties / driveId / description
        Previous value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph."
      • changedInput schema / properties / driveItemId / description
        Previous value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph."
      • changedInput schema / properties / workbookWorksheetId / description
        Previous value: -"Path parameter: workbookWorksheetId"New value: +"Value for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph."
    • Addedupdate-calendar
    • Addedupdate-calendar-event
    • Addedupdate-contact-folder
    • Addedupdate-excel-range
    • Addedupdate-excel-table-row
    • Addedupdate-focused-inbox-override
    • Addedupdate-mail-folder
    • Changedupdate-mail-message15 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "emailAddress": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "address": {
        +            "description": "The email address of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "description": "The display name of the person or entity.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / body / properties / bccRecipients / items / $ref
        Previous value: -"#/properties/body/properties/from"New value: +"#/$defs/def1"
      • changedInput schema / properties / body / properties / ccRecipients / items / $ref
        Previous value: -"#/properties/body/properties/from"New value: +"#/$defs/def1"
      • addedInput schema / properties / body / properties / flag / properties / completedDateTime / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / flag / properties / completedDateTime / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / flag / properties / completedDateTime / properties
        Removed value: -{
        -  "dateTime": {
        -    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -    "type": "string"
        -  },
        -  "timeZone": {
        -    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / flag / properties / completedDateTime / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / flag / properties / dueDateTime / $ref
        Previous value: -"#/properties/body/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / body / properties / flag / properties / startDateTime / $ref
        Previous value: -"#/properties/body/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0"
      • addedInput schema / properties / body / properties / from / $ref
        Added value: +"#/$defs/def1"
      • removedInput schema / properties / body / properties / from / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / from / properties
        Removed value: -{
        -  "emailAddress": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "address": {
        -        "description": "The email address of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "The display name of the person or entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / body / properties / from / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / toRecipients / items / $ref
        Previous value: -"#/properties/body/properties/from"New value: +"#/$defs/def1"
      • changedInput schema / properties / messageId / description
        Previous value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
    • Addedupdate-mail-rule
    • Addedupdate-mailbox-settings
    • Addedupdate-my-calendar-permission
    • Addedupdate-outlook-contact
    • Changedupdate-planner-bucket11 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "application": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "device": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "user": {
        +        "$ref": "#/$defs/def1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def2": {
        +    "enum": [
        +      "automatic",
        +      "noPreview",
        +      "checklist",
        +      "description",
        +      "reference"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / tasks / items / properties / completedBy / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / tasks / items / properties / completedBy / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / tasks / items / properties / completedBy / properties
        Removed value: -{
        -  "application": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "device": {
        -    "$ref": "#/properties/body/properties/tasks/items/properties/completedBy/properties/application"
        -  },
        -  "user": {
        -    "$ref": "#/properties/body/properties/tasks/items/properties/completedBy/properties/application"
        -  }
        -}
      • removedInput schema / properties / body / properties / tasks / items / properties / completedBy / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / tasks / items / properties / createdBy / $ref
        Previous value: -"#/properties/body/properties/tasks/items/properties/completedBy"New value: +"#/$defs/def0"
      • addedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / $ref
        Added value: +"#/$defs/def2"
      • removedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / enum
        Removed value: -[
        -  "automatic",
        -  "noPreview",
        -  "checklist",
        -  "description",
        -  "reference"
        -]
      • removedInput schema / properties / body / properties / tasks / items / properties / details / properties / previewType / type
        Removed value: -"string"
      • changedInput schema / properties / body / properties / tasks / items / properties / previewType / $ref
        Previous value: -"#/properties/body/properties/tasks/items/properties/details/properties/previewType"New value: +"#/$defs/def2"
      • changedInput schema / properties / plannerBucketId / description
        Previous value: -"Path parameter: plannerBucketId"New value: +"Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph."
    • Changedupdate-planner-task11 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "application": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "device": {
        +        "$ref": "#/$defs/def1"
        +      },
        +      "user": {
        +        "$ref": "#/$defs/def1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "displayName": {
        +        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def2": {
        +    "enum": [
        +      "automatic",
        +      "noPreview",
        +      "checklist",
        +      "description",
        +      "reference"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / completedBy / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / completedBy / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / completedBy / properties
        Removed value: -{
        -  "application": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "displayName": {
        -        "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "device": {
        -    "$ref": "#/properties/body/properties/completedBy/properties/application"
        -  },
        -  "user": {
        -    "$ref": "#/properties/body/properties/completedBy/properties/application"
        -  }
        -}
      • removedInput schema / properties / body / properties / completedBy / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / createdBy / $ref
        Previous value: -"#/properties/body/properties/completedBy"New value: +"#/$defs/def0"
      • addedInput schema / properties / body / properties / details / properties / previewType / $ref
        Added value: +"#/$defs/def2"
      • removedInput schema / properties / body / properties / details / properties / previewType / enum
        Removed value: -[
        -  "automatic",
        -  "noPreview",
        -  "checklist",
        -  "description",
        -  "reference"
        -]
      • removedInput schema / properties / body / properties / details / properties / previewType / type
        Removed value: -"string"
      • changedInput schema / properties / body / properties / previewType / $ref
        Previous value: -"#/properties/body/properties/details/properties/previewType"New value: +"#/$defs/def2"
      • changedInput schema / properties / plannerTaskId / description
        Previous value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
    • Changedupdate-planner-task-details1 field changed
      • changedInput schema / properties / plannerTaskId / description
        Previous value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
    • Addedupdate-specific-calendar-event
    • Changedupdate-subscription1 field changed
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Path parameter: subscriptionId"New value: +"Value for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph."
    • Changedupdate-todo-task12 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "def0": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateTime": {
        +        "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        +        "type": "string"
        +      },
        +      "timeZone": {
        +        "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "def1": {
        +    "enum": [
        +      "sunday",
        +      "monday",
        +      "tuesday",
        +      "wednesday",
        +      "thursday",
        +      "friday",
        +      "saturday"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / body / properties / completedDateTime / $ref
        Added value: +"#/$defs/def0"
      • removedInput schema / properties / body / properties / completedDateTime / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / completedDateTime / properties
        Removed value: -{
        -  "dateTime": {
        -    "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).",
        -    "type": "string"
        -  },
        -  "timeZone": {
        -    "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / completedDateTime / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / dueDateTime / $ref
        Previous value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "sunday",
        -      "monday",
        -      "tuesday",
        -      "wednesday",
        -      "thursday",
        -      "friday",
        -      "saturday"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/def1"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $ref
        Previous value: -"#/properties/body/properties/recurrence/properties/pattern/properties/daysOfWeek/items/anyOf/0"New value: +"#/$defs/def1"
      • changedInput schema / properties / body / properties / reminderDateTime / $ref
        Previous value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / body / properties / startDateTime / $ref
        Previous value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0"
      • changedInput schema / properties / todoTaskId / description
        Previous value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph."
      • changedInput schema / properties / todoTaskListId / description
        Previous value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
    • Removedupdate-todo-task-list
    • Addedupload-file-content
    • Addedverify-login
  6. 22 tool updatesv0.131.2
    • Addedcreate-draft-email
    • Addedcreate-excel-table
    • Addedcreate-focused-inbox-override
    • Removedcreate-onenote-section
    • Addeddelete-contact-folder
    • Removeddelete-my-calendar-permission
    • Removeddismiss-calendar-event-reminder
    • Removeddownload-bytes
    • Addedformat-excel-range
    • Removedforward-calendar-event
    • Addedget-mail-message
    • Addedget-onenote-page-content
    • Removedlist-accounts
    • Addedlist-all-onenote-sections
    • Addedlist-excel-tables
    • Addedlist-excel-worksheets
    • Addedlist-mail-messages
    • Addedsearch-onedrive-files
    • Addedselect-account
    • Addedtentatively-accept-calendar-event
    • Addedunmerge-excel-range
    • Removedupdate-my-calendar-permission
  7. 179 tool updatesv0.131.2
    • Removedaccept-calendar-event
    • Removedadd-excel-table-rows
    • Changedadd-mail-attachment1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedcancel-calendar-event
    • Removedclear-excel-range
    • Removedcopy-drive-item
    • Changedcopy-mail-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedcreate-calendar
    • Removedcreate-calendar-event
    • Removedcreate-contact-child-folder
    • Removedcreate-contact-folder
    • Removedcreate-contact-in-folder
    • Removedcreate-draft-email
    • Removedcreate-drive-item-preview
    • Removedcreate-drive-item-share-link
    • Removedcreate-excel-chart
    • Removedcreate-excel-table
    • Removedcreate-focused-inbox-override
    • Changedcreate-forward-draft1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate-mail-attachment-upload-session1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedcreate-mail-child-folder
    • Removedcreate-mail-folder
    • Removedcreate-mail-rule
    • Removedcreate-my-calendar-permission
    • Removedcreate-onedrive-folder
    • Changedcreate-onenote-notebook10 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
      • removedInput schema / properties / body / properties / sectionGroups / items / properties / parentNotebook / $ref
        Removed value: -"#/properties/body"
      • addedInput schema / properties / body / properties / sectionGroups / items / properties / parentNotebook / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / sectionGroups / items / properties / parentNotebook / properties
        Added value: +{
        +  "createdBy": {
        +    "$ref": "#/properties/body/properties/createdBy"
        +  },
        +  "createdDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +  },
        +  "displayName": {
        +    "description": "The name of the notebook.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "isDefault": {
        +    "description": "Indicates whether this is the user's default notebook. Read-only.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "isShared": {
        +    "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "lastModifiedBy": {
        +    "$ref": "#/properties/body/properties/createdBy"
        +  },
        +  "lastModifiedDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +  },
        +  "links": {
        +    "$ref": "#/properties/body/properties/links"
        +  },
        +  "sectionGroups": {
        +    "description": "The section groups in the notebook. Read-only. Nullable.",
        +    "items": {
        +      "$ref": "#/properties/body/properties/sectionGroups/items"
        +    },
        +    "type": "array"
        +  },
        +  "sectionGroupsUrl": {
        +    "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "sections": {
        +    "description": "The sections in the notebook. Read-only. Nullable.",
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "createdBy": {
        +          "$ref": "#/properties/body/properties/createdBy"
        +        },
        +        "createdDateTime": {
        +          "anyOf": [
        +            {
        +              "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +              "format": "date-time",
        +              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +        },
        +        "displayName": {
        +          "description": "The name of the notebook.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "The unique identifier for an entity. Read-only.",
        +          "type": "string"
        +        },
        +        "isDefault": {
        +          "description": "Indicates whether this is the user's default section. Read-only.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "lastModifiedBy": {
        +          "$ref": "#/properties/body/properties/createdBy"
        +        },
        +        "lastModifiedDateTime": {
        +          "anyOf": [
        +            {
        +              "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +              "format": "date-time",
        +              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +        },
        +        "links": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "oneNoteClientUrl": {
        +              "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        +            },
        +            "oneNoteWebUrl": {
        +              "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "pages": {
        +          "description": "The collection of pages in the section.  Read-only. Nullable.",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "content": {
        +                "description": "The page's HTML content.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "contentUrl": {
        +                "description": "The URL for the page's HTML content.  Read-only.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "createdByAppId": {
        +                "description": "The unique identifier of the application that created the page. Read-only.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "createdDateTime": {
        +                "anyOf": [
        +                  {
        +                    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +                    "format": "date-time",
        +                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +              },
        +              "id": {
        +                "description": "The unique identifier for an entity. Read-only.",
        +                "type": "string"
        +              },
        +              "lastModifiedDateTime": {
        +                "anyOf": [
        +                  {
        +                    "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +                    "format": "date-time",
        +                    "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +              },
        +              "level": {
        +                "anyOf": [
        +                  {
        +                    "description": "The indentation level of the page. Read-only.",
        +                    "maximum": 2147483647,
        +                    "minimum": -2147483648,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "The indentation level of the page. Read-only."
        +              },
        +              "links": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "oneNoteClientUrl": {
        +                    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        +                  },
        +                  "oneNoteWebUrl": {
        +                    "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "order": {
        +                "anyOf": [
        +                  {
        +                    "description": "The order of the page within its parent section. Read-only.",
        +                    "maximum": 2147483647,
        +                    "minimum": -2147483648,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "The order of the page within its parent section. Read-only."
        +              },
        +              "parentNotebook": {
        +                "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook"
        +              },
        +              "parentSection": {
        +                "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items"
        +              },
        +              "self": {
        +                "description": "The endpoint where you can get details about the page. Read-only.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "title": {
        +                "description": "The title of the page.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "userTags": {
        +                "items": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "pagesUrl": {
        +          "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "parentNotebook": {
        +          "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook"
        +        },
        +        "parentSectionGroup": {
        +          "$ref": "#/properties/body/properties/sectionGroups/items"
        +        },
        +        "self": {
        +          "description": "The endpoint where you can get details about the page. Read-only.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "sectionsUrl": {
        +    "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "self": {
        +    "description": "The endpoint where you can get details about the page. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "userRole": {
        +    "$ref": "#/properties/body/properties/userRole"
        +  }
        +}
      • addedInput schema / properties / body / properties / sectionGroups / items / properties / parentNotebook / type
        Added value: +"object"
      • addedInput schema / properties / body / properties / sectionGroups / items / properties / sections / items / $ref
        Added value: +"#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items"
      • removedInput schema / properties / body / properties / sectionGroups / items / properties / sections / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / body / properties / sectionGroups / items / properties / sections / items / properties
        Removed value: -{
        -  "createdBy": {
        -    "$ref": "#/properties/body/properties/createdBy"
        -  },
        -  "createdDateTime": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -  },
        -  "displayName": {
        -    "description": "The name of the notebook.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "id": {
        -    "description": "The unique identifier for an entity. Read-only.",
        -    "type": "string"
        -  },
        -  "isDefault": {
        -    "description": "Indicates whether this is the user's default section. Read-only.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "lastModifiedBy": {
        -    "$ref": "#/properties/body/properties/createdBy"
        -  },
        -  "lastModifiedDateTime": {
        -    "anyOf": [
        -      {
        -        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -        "format": "date-time",
        -        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -  },
        -  "links": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "oneNoteClientUrl": {
        -        "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -      },
        -      "oneNoteWebUrl": {
        -        "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "pages": {
        -    "description": "The collection of pages in the section.  Read-only. Nullable.",
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "content": {
        -          "description": "The page's HTML content.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "contentUrl": {
        -          "description": "The URL for the page's HTML content.  Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "createdByAppId": {
        -          "description": "The unique identifier of the application that created the page. Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "createdDateTime": {
        -          "anyOf": [
        -            {
        -              "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -              "format": "date-time",
        -              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -        },
        -        "id": {
        -          "description": "The unique identifier for an entity. Read-only.",
        -          "type": "string"
        -        },
        -        "lastModifiedDateTime": {
        -          "anyOf": [
        -            {
        -              "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        -              "format": "date-time",
        -              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        -        },
        -        "level": {
        -          "anyOf": [
        -            {
        -              "description": "The indentation level of the page. Read-only.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The indentation level of the page. Read-only."
        -        },
        -        "links": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "oneNoteClientUrl": {
        -              "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -            },
        -            "oneNoteWebUrl": {
        -              "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "order": {
        -          "anyOf": [
        -            {
        -              "description": "The order of the page within its parent section. Read-only.",
        -              "maximum": 2147483647,
        -              "minimum": -2147483648,
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "The order of the page within its parent section. Read-only."
        -        },
        -        "parentNotebook": {
        -          "$ref": "#/properties/body"
        -        },
        -        "parentSection": {
        -          "$ref": "#/properties/body/properties/sectionGroups/items/properties/sections/items"
        -        },
        -        "self": {
        -          "description": "The endpoint where you can get details about the page. Read-only.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "title": {
        -          "description": "The title of the page.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "userTags": {
        -          "items": {
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "type": "array"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "pagesUrl": {
        -    "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "parentNotebook": {
        -    "$ref": "#/properties/body"
        -  },
        -  "parentSectionGroup": {
        -    "$ref": "#/properties/body/properties/sectionGroups/items"
        -  },
        -  "self": {
        -    "description": "The endpoint where you can get details about the page. Read-only.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedInput schema / properties / body / properties / sectionGroups / items / properties / sections / items / type
        Removed value: -"object"
      • changedInput schema / properties / body / properties / sections / items / $ref
        Previous value: -"#/properties/body/properties/sectionGroups/items/properties/sections/items"New value: +"#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items"
    • Changedcreate-onenote-page5 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
      • removedInput schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / $ref
        Removed value: -"#/properties/body"
      • addedInput schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / properties
        Added value: +{
        +  "content": {
        +    "description": "The page's HTML content.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "contentUrl": {
        +    "description": "The URL for the page's HTML content.  Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "createdByAppId": {
        +    "description": "The unique identifier of the application that created the page. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "createdDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +  },
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "lastModifiedDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +  },
        +  "level": {
        +    "anyOf": [
        +      {
        +        "description": "The indentation level of the page. Read-only.",
        +        "maximum": 2147483647,
        +        "minimum": -2147483648,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The indentation level of the page. Read-only."
        +  },
        +  "links": {
        +    "$ref": "#/properties/body/properties/links"
        +  },
        +  "order": {
        +    "anyOf": [
        +      {
        +        "description": "The order of the page within its parent section. Read-only.",
        +        "maximum": 2147483647,
        +        "minimum": -2147483648,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The order of the page within its parent section. Read-only."
        +  },
        +  "parentNotebook": {
        +    "$ref": "#/properties/body/properties/parentNotebook"
        +  },
        +  "parentSection": {
        +    "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
        +  },
        +  "self": {
        +    "description": "The endpoint where you can get details about the page. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "title": {
        +    "description": "The title of the page.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "userTags": {
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / type
        Added value: +"object"
    • Changedcreate-onenote-section7 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
      • removedInput schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / $ref
        Removed value: -"#/properties/body"
      • addedInput schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties
        Added value: +{
        +  "createdBy": {
        +    "$ref": "#/properties/body/properties/createdBy"
        +  },
        +  "createdDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +  },
        +  "displayName": {
        +    "description": "The name of the notebook.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "isDefault": {
        +    "description": "Indicates whether this is the user's default section. Read-only.",
        +    "type": [
        +      "boolean",
        +      "null"
        +    ]
        +  },
        +  "lastModifiedBy": {
        +    "$ref": "#/properties/body/properties/createdBy"
        +  },
        +  "lastModifiedDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +  },
        +  "links": {
        +    "$ref": "#/properties/body/properties/links"
        +  },
        +  "pages": {
        +    "description": "The collection of pages in the section.  Read-only. Nullable.",
        +    "items": {
        +      "$ref": "#/properties/body/properties/pages/items"
        +    },
        +    "type": "array"
        +  },
        +  "pagesUrl": {
        +    "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "parentNotebook": {
        +    "$ref": "#/properties/body/properties/pages/items/properties/parentNotebook"
        +  },
        +  "parentSectionGroup": {
        +    "$ref": "#/properties/body/properties/pages/items/properties/parentNotebook/properties/sectionGroups/items"
        +  },
        +  "self": {
        +    "description": "The endpoint where you can get details about the page. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  }
        +}
      • addedInput schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / type
        Added value: +"object"
      • changedInput schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sections / items / $ref
        Previous value: -"#/properties/body"New value: +"#/properties/body/properties/pages/items/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
      • changedInput schema / properties / body / properties / pages / items / properties / parentSection / $ref
        Previous value: -"#/properties/body"New value: +"#/properties/body/properties/pages/items/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
    • Changedcreate-onenote-section-page5 fields changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
      • removedInput schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / $ref
        Removed value: -"#/properties/body"
      • addedInput schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / properties
        Added value: +{
        +  "content": {
        +    "description": "The page's HTML content.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "contentUrl": {
        +    "description": "The URL for the page's HTML content.  Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "createdByAppId": {
        +    "description": "The unique identifier of the application that created the page. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "createdDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +  },
        +  "id": {
        +    "description": "The unique identifier for an entity. Read-only.",
        +    "type": "string"
        +  },
        +  "lastModifiedDateTime": {
        +    "anyOf": [
        +      {
        +        "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.",
        +        "format": "date-time",
        +        "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
        +  },
        +  "level": {
        +    "anyOf": [
        +      {
        +        "description": "The indentation level of the page. Read-only.",
        +        "maximum": 2147483647,
        +        "minimum": -2147483648,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The indentation level of the page. Read-only."
        +  },
        +  "links": {
        +    "$ref": "#/properties/body/properties/links"
        +  },
        +  "order": {
        +    "anyOf": [
        +      {
        +        "description": "The order of the page within its parent section. Read-only.",
        +        "maximum": 2147483647,
        +        "minimum": -2147483648,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "The order of the page within its parent section. Read-only."
        +  },
        +  "parentNotebook": {
        +    "$ref": "#/properties/body/properties/parentNotebook"
        +  },
        +  "parentSection": {
        +    "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
        +  },
        +  "self": {
        +    "description": "The endpoint where you can get details about the page. Read-only.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "title": {
        +    "description": "The title of the page.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "userTags": {
        +    "items": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / type
        Added value: +"object"
    • Changedcreate-outlook-category1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedcreate-outlook-contact
    • Changedcreate-planner-bucket1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate-planner-task1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate-planner-task-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate-reply-all-draft1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate-reply-draft1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedcreate-specific-calendar-event
    • Changedcreate-subscription1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate-todo-linked-resource1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate-todo-task1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate-todo-task-list1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedcreate-upload-session
    • Removeddecline-calendar-event
    • Removeddelete-calendar
    • Removeddelete-calendar-event
    • Removeddelete-contact-folder
    • Removeddelete-drive-item-permission
    • Removeddelete-excel-range
    • Removeddelete-excel-table-row
    • Removeddelete-focused-inbox-override
    • Changeddelete-mail-attachment1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removeddelete-mail-folder
    • Changeddelete-mail-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removeddelete-mail-rule
    • Changeddelete-my-calendar-permission1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removeddelete-onedrive-file
    • Changeddelete-onenote-page1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removeddelete-outlook-contact
    • Changeddelete-planner-bucket1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete-planner-task-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removeddelete-specific-calendar-event
    • Changeddelete-subscription1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete-todo-linked-resource1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete-todo-task1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete-todo-task-list1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddismiss-calendar-event-reminder1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedformat-excel-range
    • Changedforward-calendar-event1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedforward-mail-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedget-calendar-event
    • Removedget-calendar-view
    • Removedget-current-user
    • Removedget-drive-delta
    • Removedget-drive-item
    • Removedget-drive-root-item
    • Changedget-excel-range1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedget-excel-table
    • Removedget-excel-used-range
    • Removedget-mail-message
    • Changedget-mail-message-mime1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedget-mail-tips
    • Removedget-mailbox-settings
    • Changedget-my-profile1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedget-onenote-page-content
    • Removedget-outlook-contact
    • Changedget-planner-bucket1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget-planner-plan1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget-planner-task1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget-planner-task-details1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedget-specific-calendar-event
    • Removedget-specific-calendar-view
    • Changedget-subscription1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget-todo-task1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedgraph-batch
    • Removedinsert-excel-range
    • Removedlist-all-onenote-sections
    • Removedlist-calendar-event-instances
    • Removedlist-calendar-events
    • Removedlist-calendar-events-delta
    • Removedlist-calendar-view-delta
    • Removedlist-calendars
    • Removedlist-contact-folder-child-folders
    • Removedlist-contact-folder-contacts
    • Removedlist-contact-folders
    • Removedlist-drive-item-permissions
    • Removedlist-drive-item-thumbnails
    • Removedlist-drive-item-versions
    • Removedlist-drives
    • Removedlist-excel-table-rows
    • Removedlist-excel-tables
    • Removedlist-excel-worksheets
    • Removedlist-focused-inbox-overrides
    • Removedlist-folder-files
    • Changedlist-mail-attachments1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedlist-mail-child-folders
    • Removedlist-mail-folder-messages
    • Removedlist-mail-folder-messages-delta
    • Removedlist-mail-folders
    • Removedlist-mail-messages
    • Removedlist-mail-rules
    • Removedlist-my-calendar-permissions
    • Changedlist-onenote-notebook-sections1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-onenote-notebooks1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-onenote-pages1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-onenote-section-groups1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-onenote-section-pages1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-outlook-categories1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedlist-outlook-contacts
    • Changedlist-plan-buckets1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-plan-tasks1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-planner-task-messages1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-planner-tasks1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedlist-specific-calendar-events
    • Changedlist-subscriptions1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-supported-languages1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-supported-time-zones1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-todo-linked-resources1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-todo-task-lists1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedlist-todo-tasks1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedlogin
    • Removedlogout
    • Removedmerge-excel-range
    • Changedmove-mail-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedmove-rename-onedrive-item
    • Changedreauthorize-subscription1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedremove-account
    • Changedreply-all-mail-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedreply-mail-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedsearch-onedrive-files
    • Removedselect-account
    • Changedsend-draft-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedsend-mail1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedshare-drive-item
    • Removedsnooze-calendar-event-reminder
    • Removedsort-excel-range
    • Removedtentatively-accept-calendar-event
    • Removedunmerge-excel-range
    • Removedupdate-calendar
    • Removedupdate-calendar-event
    • Removedupdate-contact-folder
    • Removedupdate-excel-range
    • Removedupdate-excel-table-row
    • Removedupdate-focused-inbox-override
    • Removedupdate-mail-folder
    • Changedupdate-mail-message1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedupdate-mail-rule
    • Removedupdate-mailbox-settings
    • Changedupdate-my-calendar-permission1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedupdate-outlook-contact
    • Changedupdate-planner-bucket1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedupdate-planner-task1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedupdate-planner-task-details1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedupdate-specific-calendar-event
    • Changedupdate-subscription1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedupdate-todo-task1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedupdate-todo-task-list1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedupload-file-content
    • Changedupload-my-profile-photo1 field changed
      • changedInput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Removedverify-login
  8. 105 tool updatesv0.131.1
    • Changedaccept-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedadd-excel-table-rows1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedadd-mail-attachment1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcancel-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedclear-excel-range1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcopy-drive-item1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcopy-mail-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-calendar1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-contact-child-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-contact-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-contact-in-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-draft-email1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-drive-item-preview1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-drive-item-share-link1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-excel-chart1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-excel-table1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-focused-inbox-override1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-forward-draft1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-mail-attachment-upload-session1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-mail-child-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-mail-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-mail-rule1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-my-calendar-permission1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-onedrive-folder4 fields changed
      • changedInput schema / properties / body / properties / createdByUser / properties / accountEnabled / description
        Previous value: -"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."New value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • changedInput schema / properties / body / properties / createdByUser / properties / businessPhones / description
        Previous value: -"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith)."New value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • changedInput schema / properties / body / properties / createdByUser / properties / userPrincipalName / description
        Previous value: -"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby."New value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-onenote-notebook1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-onenote-page1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-onenote-section1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-onenote-section-page1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-outlook-category1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-outlook-contact1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-planner-bucket1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-planner-task1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-planner-task-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-reply-all-draft1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-reply-draft1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-specific-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-subscription1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-todo-linked-resource1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-todo-task1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-todo-task-list1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedcreate-upload-session1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddecline-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-calendar1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-contact-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-drive-item-permission1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-excel-range1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-excel-table-row1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-focused-inbox-override1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-mail-attachment1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-mail-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-mail-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-mail-rule1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-my-calendar-permission1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-onedrive-file1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-onenote-page1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-outlook-contact1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-planner-bucket1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-planner-task-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-specific-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-subscription1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-todo-linked-resource1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-todo-task1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddelete-todo-task-list1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changeddismiss-calendar-event-reminder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedformat-excel-range1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedforward-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedforward-mail-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedgraph-batch1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedinsert-excel-range1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedmerge-excel-range1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedmove-mail-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedmove-rename-onedrive-item4 fields changed
      • changedInput schema / properties / body / properties / createdByUser / properties / accountEnabled / description
        Previous value: -"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."New value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • changedInput schema / properties / body / properties / createdByUser / properties / businessPhones / description
        Previous value: -"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith)."New value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • changedInput schema / properties / body / properties / createdByUser / properties / userPrincipalName / description
        Previous value: -"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby."New value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it."
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedreauthorize-subscription1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedreply-all-mail-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedreply-mail-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedsend-draft-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedsend-mail1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedshare-drive-item1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedsnooze-calendar-event-reminder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedsort-excel-range1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedtentatively-accept-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedunmerge-excel-range1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-calendar1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-contact-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-excel-range1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-excel-table-row1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-focused-inbox-override1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-mail-folder1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-mail-message1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-mail-rule1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-mailbox-settings1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-my-calendar-permission1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-outlook-contact1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-planner-bucket1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-planner-task1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-planner-task-details1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-specific-calendar-event1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-subscription1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-todo-task1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupdate-todo-task-list1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupload-file-content1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
    • Changedupload-my-profile-photo1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.",
        +  "type": "boolean"
        +}
  9. 2 tool updatesv0.128.1
    • Changeddownload-bytes1 field changed
      • changedInput schema / properties / target / description
        Previous value: -"Relative Microsoft Graph path starting with \"/\". Common paths: /drives/{drive-id}/items/{driveItem-id}/content (drive file content); /me/messages/{message-id}/attachments/{attachment-id}/$value (mail attachment, list-mail-attachments returns the IDs); /me/photo/$value or /users/{user-id}/photo/$value (profile photo); /chats/{chat-id}/messages/{chatMessage-id}/hostedContents/{chatMessageHostedContent-id}/$value (Teams chat hosted content, list-chat-message-hosted-contents returns the IDs); /teams/{team-id}/channels/{channel-id}/messages/{chatMessage-id}/hostedContents/{chatMessageHostedContent-id}/$value (Teams channel hosted content). For meeting recordings (often large), use get-meeting-recording-content which returns a URL for out-of-band download by the client."New value: +"Relative Microsoft Graph path starting with \"/\". Common paths: /drives/{drive-id}/items/{driveItem-id}/content (drive file content); /me/messages/{message-id}/attachments/{attachment-id}/$value (mail attachment, list-mail-attachments returns the IDs); /me/photo/$value or /users/{user-id}/photo/$value (profile photo); /chats/{chat-id}/messages/{chatMessage-id}/hostedContents/{chatMessageHostedContent-id}/$value (Teams chat hosted content, list-chat-message-hosted-contents returns the IDs); /teams/{team-id}/channels/{channel-id}/messages/{chatMessage-id}/hostedContents/{chatMessageHostedContent-id}/$value (Teams channel hosted content). For meeting recordings, use get-meeting-recording-content where available; Microsoft Graph returns authenticated recording bytes, not a pre-authenticated download URL."
    • Addedget-download-url
  10. 3 tool updatesv0.126.0
    • Addedcreate-planner-task-message
    • Addeddelete-planner-task-message
    • Addedlist-planner-task-messages
  11. 2 tool updatesv0.125.1
    • Changedlist-calendar-events-delta1 field changed
      • removedInput schema / properties / top
        Removed value: -{
        -  "description": "Page size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.",
        -  "type": "number"
        -}
    • Changedlist-calendar-view-delta1 field changed
      • removedInput schema / properties / top
        Removed value: -{
        -  "description": "Page size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. Use $select to return fewer fields per item. For more rows, use @odata.nextLink from the response instead of a very large $top.",
        -  "type": "number"
        -}
  12. 5 tool updatesv0.125.0
    • Changedcreate-drive-item-share-link3 fields changed
      • addedInput schema / properties / body / properties / recipients / items / properties / alias
        Added value: +{
        +  "description": "The alias of the domain object, for cases where an email address is unavailable (for example, security groups).",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / recipients / items / properties / email
        Added value: +{
        +  "description": "The email address for the recipient, if the recipient has an associated email address.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / recipients / items / properties / objectId
        Added value: +{
        +  "description": "The unique identifier for the recipient in the directory.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedcreate-mail-attachment-upload-session6 fields changed
      • addedInput schema / properties / body / properties / AttachmentItem / properties / attachmentType
        Added value: +{
        +  "enum": [
        +    "file",
        +    "item",
        +    "reference"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / body / properties / AttachmentItem / properties / contentId
        Added value: +{
        +  "description": "The CID or Content-Id of the attachment for referencing for the in-line attachments using the <img src='cid:contentId'> tag in HTML messages. Optional.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / AttachmentItem / properties / contentType
        Added value: +{
        +  "description": "The nature of the data in the attachment. Optional.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / AttachmentItem / properties / isInline
        Added value: +{
        +  "description": "true if the attachment is an inline attachment; otherwise, false. Optional.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / AttachmentItem / properties / name
        Added value: +{
        +  "description": "The display name of the attachment. This can be a descriptive string and doesn't have to be the actual file name. Required.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / AttachmentItem / properties / size
        Added value: +{
        +  "description": "The length of the attachment in bytes. Required.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
    • Changedcreate-upload-session4 fields changed
      • removedInput schema / properties / body / properties / item / additionalProperties
        Removed value: -true
      • addedInput schema / properties / body / properties / item / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "description": {
        +        "description": "Provides a user-visible description of the item. Read-write. Only on OneDrive Personal.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "driveItemSource": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "application": {
        +            "enum": [
        +              "teams",
        +              "yammer",
        +              "sharePoint",
        +              "oneDrive",
        +              "stream",
        +              "powerPoint",
        +              "office",
        +              "loki",
        +              "loop",
        +              "other",
        +              "unknownFutureValue"
        +            ],
        +            "type": "string"
        +          },
        +          "externalId": {
        +            "description": "The external identifier for the drive item from the source.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "fileSize": {
        +        "description": "Provides an expected file size to perform a quota check before uploading. Only on OneDrive Personal.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "fileSystemInfo": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "createdDateTime": {
        +            "anyOf": [
        +              {
        +                "description": "The UTC date and time the file was created on a client.",
        +                "format": "date-time",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The UTC date and time the file was created on a client."
        +          },
        +          "lastAccessedDateTime": {
        +            "anyOf": [
        +              {
        +                "description": "The UTC date and time the file was last accessed. Available for the recent file list only.",
        +                "format": "date-time",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The UTC date and time the file was last accessed. Available for the recent file list only."
        +          },
        +          "lastModifiedDateTime": {
        +            "anyOf": [
        +              {
        +                "description": "The UTC date and time the file was last modified on a client.",
        +                "format": "date-time",
        +                "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The UTC date and time the file was last modified on a client."
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "mediaSource": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "contentCategory": {
        +            "enum": [
        +              "meeting",
        +              "liveStream",
        +              "presentation",
        +              "screenRecording",
        +              "story",
        +              "profile",
        +              "chat",
        +              "note",
        +              "comment",
        +              "unknownFutureValue"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "name": {
        +        "description": "The name of the item (filename and extension). Read-write.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / body / properties / item / properties
        Removed value: -{}
      • removedInput schema / properties / body / properties / item / type
        Removed value: -"object"
    • Addedget-my-profile
    • Changedshare-drive-item3 fields changed
      • addedInput schema / properties / body / properties / recipients / items / properties / alias
        Added value: +{
        +  "description": "The alias of the domain object, for cases where an email address is unavailable (for example, security groups).",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / recipients / items / properties / email
        Added value: +{
        +  "description": "The email address for the recipient, if the recipient has an associated email address.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / body / properties / recipients / items / properties / objectId
        Added value: +{
        +  "description": "The unique identifier for the recipient in the directory.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}

TDQS

B3.1/5.0
Disambiguation2/5

With 188 tools, there is substantial overlap and near-duplicates. For example, calendar listing has seven tools (list-calendar-events, get-calendar-view, get-specific-calendar-view, list-specific-calendar-events, list-calendar-view-delta, list-calendar-events-delta, list-calendar-event-instances), and mail has many similar create/forward/reply variants. Agents will struggle to pick the correct tool without carefully reading the tips.

Naming Consistency4/5

Tool names predominantly follow a hyphenated verb-noun pattern (list-, get-, create-, update-, delete-). There are minor deviations like 'graph-batch' and 'parse-teams-url', but the overall convention is predictable and readable, making it easy to infer the action.

Tool Count1/5

188 tools is extremely excessive for an MCP server, even one covering the breadth of Microsoft 365. This overwhelms agent context windows and increases selection error rates. A well-scoped server would consolidate related operations or expose only high-level workflows.

Completeness3/5

The server covers many Microsoft 365 domains extensively (mail, calendar, contacts, OneDrive, Excel, To Do, Planner, OneNote, subscriptions). However, there are notable gaps such as missing delete-planner-task and no update-onenote-page, leaving some resources without full lifecycle coverage.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that provides AI assistants with access to Microsoft Teams, enabling interaction with teams, channels, chats, and organizational data through Microsoft Graph APIs.
    19
    1,373
    133
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Model Context Protocol servers for Microsoft 365, enabling AI assistants to interact with Calendar, Contacts, OneDrive, Outlook, and SharePoint via the Microsoft Graph API.
    MIT

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

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