Public log

@softeria/ms-365-mcp-server

A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Office services through the Graph API

npm · fingerprint b32b8b84f172b40836643b03 · repository · RSS

202tools
13recorded versions
57dtracked
changed today

What changed

Changed 2026-10-30 13:06 UTC

49 schema or annotation changes with the description left byte-identical.

--- pinned/add-calendar-event-attachment
+++ observed/add-calendar-event-attachment
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "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.",
--- pinned/add-mail-attachment
+++ observed/add-mail-attachment
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "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.",
--- pinned/create-calendar
+++ observed/create-calendar
  {
    "annotations": {
      "destructiveHint": true,
-                         ],
-                         "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.",
-                             ],
-                             "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"
-                   ],
-                   "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,
-                   ],
-                   "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,
-                           ],
-                           "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.",
-                           ],
-                           "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": [
-                   ],
-                   "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.",
-                         ],
-                         "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.",
-                             ],
-                             "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"
-                   ],
-                   "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,
-                   ],
-                   "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,
-                           ],
-                           "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.",
-                           ],
-                           "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": [
-                   ],
-                   "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.",
--- pinned/create-calendar-event
+++ observed/create-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "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.",
-                       ],
-                       "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"
-             ],
-             "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,
-             ],
-             "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,
-                     ],
-                     "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.",
-                     ],
-                     "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": [
-             ],
-             "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.",
--- pinned/create-contact-child-folder
+++ observed/create-contact-child-folder
  {
    "annotations": {
      "destructiveHint": true,
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-             ],
-             "description": "The contact's birthday. 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"
+             ]
            },
            "businessAddress": {
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def8"
            },
            "businessHomePage": {
              "description": "The business home page of the contact.",
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def9"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def7"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def10"
              },
              "type": "array"
            },
-             ],
-             "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"
+             ]
            },
            "department": {
              "description": "The contact's department.",
-               "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"
+               "$ref": "#/$defs/def11"
              },
              "type": "array"
            },
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def8"
            },
            "homePhones": {
              "description": "The contact's home phone numbers.",
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def2"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def3"
              },
              "type": "array"
            },
-             ],
-             "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 contact. Read-only. Nullable.",
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-       "def2": {
+       "def10": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def11": {
          "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.",
+           "address": {
+             "description": "The email address of the person or entity.",
              "type": [
                "string",
                "null"
-           "state": {
-             "description": "The state.",
+           "name": {
+             "description": "The display name of the person or entity.",
              "type": [
                "string",
                "null"
+           }
+         },
+         "type": "object"
+       },
+       "def12": {
+         "type": "boolean"
+       },
+       "def13": {
+         "type": "boolean"
+       },
+       "def14": {
+         "type": "boolean"
+       },
+       "def2": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def3": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def4": {
+         "additionalProperties": true,
+         "properties": {
+           "id": {
+             "description": "The unique identifier for an entity. Read-only.",
+             "type": "string"
            },
-           "street": {
-             "description": "The street.",
+           "value": {
+             "description": "A property value.",
              "type": [
                "string",
                "null"
-       "def3": {
+       "def5": {
          "additionalProperties": true,
          "properties": {
            "id": {
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def6"
              },
              "type": "array"
            }
-       "def4": {
+       "def6": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def7": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def8": {
          "additionalProperties": true,
          "properties": {
-           "id": {
-             "description": "The unique identifier for an entity. Read-only.",
-             "type": "string"
+           "city": {
+             "description": "The city.",
+             "type": [
+               "string",
+               "null"
+             ]
            },
-           "value": {
-             "description": "A property value.",
+           "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"
+       },
+       "def9": {
+         "type": [
+           "string",
+           "null"
+         ]
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def12"
+           }
+         ],
+         "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."
        },
        "contactFolderId": {
          "description": "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.",
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def13"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def14"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        }
      },
      "required": [
--- pinned/create-contact-folder
+++ observed/create-contact-folder
  {
    "annotations": {
      "destructiveHint": true,
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-             ],
-             "description": "The contact's birthday. 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"
+             ]
            },
            "businessAddress": {
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def8"
            },
            "businessHomePage": {
              "description": "The business home page of the contact.",
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def9"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def7"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def10"
              },
              "type": "array"
            },
-             ],
-             "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"
+             ]
            },
            "department": {
              "description": "The contact's department.",
-               "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"
+               "$ref": "#/$defs/def11"
              },
              "type": "array"
            },
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def8"
            },
            "homePhones": {
              "description": "The contact's home phone numbers.",
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def2"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def3"
              },
              "type": "array"
            },
-             ],
-             "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 contact. Read-only. Nullable.",
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-       "def2": {
+       "def10": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def11": {
          "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.",
+           "address": {
+             "description": "The email address of the person or entity.",
              "type": [
                "string",
                "null"
-           "state": {
-             "description": "The state.",
+           "name": {
+             "description": "The display name of the person or entity.",
              "type": [
                "string",
                "null"
+           }
+         },
+         "type": "object"
+       },
+       "def12": {
+         "type": "boolean"
+       },
+       "def13": {
+         "type": "boolean"
+       },
+       "def14": {
+         "type": "boolean"
+       },
+       "def2": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def3": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def4": {
+         "additionalProperties": true,
+         "properties": {
+           "id": {
+             "description": "The unique identifier for an entity. Read-only.",
+             "type": "string"
            },
-           "street": {
-             "description": "The street.",
+           "value": {
+             "description": "A property value.",
              "type": [
                "string",
                "null"
-       "def3": {
+       "def5": {
          "additionalProperties": true,
          "properties": {
            "id": {
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def6"
              },
              "type": "array"
            }
-       "def4": {
+       "def6": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def7": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def8": {
          "additionalProperties": true,
          "properties": {
-           "id": {
-             "description": "The unique identifier for an entity. Read-only.",
-             "type": "string"
+           "city": {
+             "description": "The city.",
+             "type": [
+               "string",
+               "null"
+             ]
            },
-           "value": {
-             "description": "A property value.",
+           "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"
+       },
+       "def9": {
+         "type": [
+           "string",
+           "null"
+         ]
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def12"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def13"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def14"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        }
      },
      "required": [
--- pinned/create-contact-in-folder
+++ observed/create-contact-in-folder
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "The contact's birthday. 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"
+             ]
            },
            "businessAddress": {
              "additionalProperties": true,
-             ],
-             "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"
+             ]
            },
            "department": {
              "description": "The contact's department.",
-             ],
-             "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 contact. Read-only. Nullable.",
--- pinned/create-draft-email
+++ observed/create-draft-email
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "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.",
-             ],
-             "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,
-             ],
-             "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.",
--- pinned/create-forward-draft
+++ observed/create-forward-draft
  {
    "annotations": {
      "destructiveHint": true,
-                           ],
-                           "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.",
-                     ],
-                     "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,
-                     ],
-                     "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.",
--- pinned/create-mail-child-folder
+++ observed/create-mail-child-folder
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "The number of immediate child mailFolders in the current mailFolder."
+             ]
            },
            "childFolders": {
              "description": "The collection of child folders in the mailFolder.",
-               "$ref": "#/$defs/def29"
+               "$ref": "#/$defs/def32"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-             ],
-             "description": "The number of items in the mailFolder."
+             ]
            },
            "unreadItemCount": {
              "anyOf": [
-             ],
-             "description": "The number of items in the mailFolder marked as unread."
+             ]
            }
          },
          "type": "object"
-                   "type": [
-                     "string",
-                     "null"
-                   ]
+                   "$ref": "#/$defs/def12"
                  },
                  "type": "array"
                },
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-                 "$ref": "#/$defs/def3"
+                 "$ref": "#/$defs/def34"
                },
                "moveToFolder": {
                  "description": "The ID of the folder that a message will be moved to.",
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-             "additionalProperties": true,
-             "description": "[Note: Simplified from 30 properties to 25 most common ones]",
-             "properties": {
-               "bodyContains": {
-                 "$ref": "#/$defs/def4"
-               },
-               "bodyOrSubjectContains": {
-                 "$ref": "#/$defs/def5"
-               },
-               "categories": {
-                 "$ref": "#/$defs/def6"
-               },
-               "fromAddresses": {
-                 "$ref": "#/$defs/def7"
-               },
-               "hasAttachments": {
-                 "$ref": "#/$defs/def8"
-               },
-               "headerContains": {
-                 "$ref": "#/$defs/def9"
-               },
-               "importance": {
-                 "$ref": "#/$defs/def10"
-               },
-               "isApprovalRequest": {
-                 "$ref": "#/$defs/def11"
-               },
-               "isAutomaticForward": {
-                 "$ref": "#/$defs/def12"
-               },
-               "isAutomaticReply": {
-                 "$ref": "#/$defs/def13"
-               },
-               "isEncrypted": {
-                 "$ref": "#/$defs/def14"
-               },
-               "isMeetingRequest": {
-                 "$ref": "#/$defs/def15"
-               },
-               "isMeetingResponse": {
-                 "$ref": "#/$defs/def16"
-               },
-               "isNonDeliveryReport": {
-                 "$ref": "#/$defs/def17"
-               },
-               "isPermissionControlled": {
-                 "$ref": "#/$defs/def18"
-               },
-               "isReadReceipt": {
-                 "$ref": "#/$defs/def19"
-               },
-               "isSigned": {
-                 "$ref": "#/$defs/def20"
-               },
-               "isVoicemail": {
-                 "$ref": "#/$defs/def21"
-               },
-               "messageActionFlag": {
-                 "$ref": "#/$defs/def22"
-               },
-               "notSentToMe": {
-                 "$ref": "#/$defs/def23"
-               },
-               "recipientContains": {
-                 "$ref": "#/$defs/def24"
-               },
-               "senderContains": {
-                 "$ref": "#/$defs/def25"
-               },
-               "sensitivity": {
-                 "$ref": "#/$defs/def26"
-               },
-               "sentCcMe": {
-                 "$ref": "#/$defs/def27"
-               },
-               "sentOnlyToMe": {
-                 "$ref": "#/$defs/def28"
+             "allOf": [
+               {
+                 "$ref": "#/$defs/def31"
                }
-             },
-             "type": "object"
+             ],
+             "description": "[Note: Simplified from 30 properties to 25 most common ones]"
            },
            "displayName": {
              "description": "The display name of the rule.",
-             "additionalProperties": true,
-             "description": "[Note: Simplified from 30 properties to 25 most common ones]",
-             "properties": {
-               "bodyContains": {
-                 "$ref": "#/$defs/def4"
-               },
-               "bodyOrSubjectContains": {
-                 "$ref": "#/$defs/def5"
-               },
-               "categories": {
-                 "$ref": "#/$defs/def6"
-               },
-               "fromAddresses": {
-                 "$ref": "#/$defs/def7"
-               },
-               "hasAttachments": {
-                 "$ref": "#/$defs/def8"
-               },
-               "headerContains": {
-                 "$ref": "#/$defs/def9"
-               },
-               "importance": {
-                 "$ref": "#/$defs/def10"
-               },
-               "isApprovalRequest": {
-                 "$ref": "#/$defs/def11"
-               },
-               "isAutomaticForward": {
-                 "$ref": "#/$defs/def12"
-               },
-               "isAutomaticReply": {
-                 "$ref": "#/$defs/def13"
-               },
-               "isEncrypted": {
-                 "$ref": "#/$defs/def14"
-               },
-               "isMeetingRequest": {
-                 "$ref": "#/$defs/def15"
-               },
-               "isMeetingResponse": {
-                 "$ref": "#/$defs/def16"
-               },
-               "isNonDeliveryReport": {
-                 "$ref": "#/$defs/def17"
-               },
-               "isPermissionControlled": {
-                 "$ref": "#/$defs/def18"
-               },
-               "isReadReceipt": {
-                 "$ref": "#/$defs/def19"
-               },
-               "isSigned": {
-                 "$ref": "#/$defs/def20"
-               },
-               "isVoicemail": {
-                 "$ref": "#/$defs/def21"
-               },
-               "messageActionFlag": {
-                 "$ref": "#/$defs/def22"
-               },
-               "notSentToMe": {
-                 "$ref": "#/$defs/def23"
-               },
-               "recipientContains": {
-                 "$ref": "#/$defs/def24"
-               },
-               "senderContains": {
-                 "$ref": "#/$defs/def25"
-               },
-               "sensitivity": {
-                 "$ref": "#/$defs/def26"
-               },
-               "sentCcMe": {
-                 "$ref": "#/$defs/def27"
-               },
-               "sentOnlyToMe": {
-                 "$ref": "#/$defs/def28"
+             "allOf": [
+               {
+                 "$ref": "#/$defs/def31"
                }
-             },
-             "type": "object"
+             ],
+             "description": "[Note: Simplified from 30 properties to 25 most common ones]"
            },
            "hasError": {
              "description": "Indicates whether the rule is in an error condition. Read-only.",
-             ],
-             "description": "Indicates the order in which the rule is executed, among other rules."
+             ]
            }
          },
          "type": "object"
-         "$ref": "#/$defs/def3"
+         "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 approval request in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply.",
          "type": [
-           "boolean",
+           "string",
            "null"
          ]
        },
-         "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "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"
-       },
-       "def20": {
-         "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.",
          "type": [
-           "boolean",
+           "string",
            "null"
          ]
        },
-       "def21": {
+       "def20": {
          "description": "Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply.",
          "type": [
            "boolean",
-       "def22": {
+       "def21": {
          "enum": [
            "any",
            "call",
-       "def23": {
+       "def22": {
          "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",
+       "def23": {
+         "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"
+       },
        "def24": {
          "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"
-           ]
+           "$ref": "#/$defs/def25"
          },
          "type": "array"
        },
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def26": {
          "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"
-           ]
+           "$ref": "#/$defs/def27"
          },
          "type": "array"
        },
-       "def26": {
-         "enum": [
-           "normal",
-           "personal",
-           "private",
-           "confidential"
-         ],
-         "type": "string"
-       },
        "def27": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def28": {
          "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",
-       "def28": {
+       "def29": {
          "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",
-       "def29": {
+       "def3": {
+         "description": "Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply.",
+         "items": {
+           "$ref": "#/$defs/def4"
+         },
+         "type": "array"
+       },
+       "def30": {},
+       "def31": {
+         "additionalProperties": {
+           "$ref": "#/$defs/def30"
+         },
+         "properties": {
+           "bodyContains": {
+             "$ref": "#/$defs/def43"
+           },
+           "bodyOrSubjectContains": {
+             "$ref": "#/$defs/def45"
+           },
+           "categories": {
+             "$ref": "#/$defs/def3"
+           },
+           "fromAddresses": {
+             "$ref": "#/$defs/def5"
+           },
+           "hasAttachments": {
+             "$ref": "#/$defs/def6"
+           },
+           "headerContains": {
+             "$ref": "#/$defs/def7"
+           },
+           "importance": {
+             "$ref": "#/$defs/def42"
+           },
+           "isApprovalRequest": {
+             "$ref": "#/$defs/def9"
+           },
+           "isAutomaticForward": {
+             "$ref": "#/$defs/def10"
+           },
+           "isAutomaticReply": {
+             "$ref": "#/$defs/def11"
+           },
+           "isEncrypted": {
+             "$ref": "#/$defs/def13"
+           },
+           "isMeetingRequest": {
+             "$ref": "#/$defs/def14"
+           },
+           "isMeetingResponse": {
+             "$ref": "#/$defs/def15"
+           },
+           "isNonDeliveryReport": {
+             "$ref": "#/$defs/def16"
+           },
+           "isPermissionControlled": {
+             "$ref": "#/$defs/def17"
+           },
+           "isReadReceipt": {
+             "$ref": "#/$defs/def18"
+           },
+           "isSigned": {
+             "$ref": "#/$defs/def19"
+           },
+           "isVoicemail": {
+             "$ref": "#/$defs/def20"
+           },
+           "messageActionFlag": {
+             "$ref": "#/$defs/def21"
+           },
+           "notSentToMe": {
+             "$ref": "#/$defs/def22"
+           },
+           "recipientContains": {
+             "$ref": "#/$defs/def24"
+           },
+           "senderContains": {
+             "$ref": "#/$defs/def26"
+           },
+           "sensitivity": {
+             "$ref": "#/$defs/def41"
+           },
+           "sentCcMe": {
+             "$ref": "#/$defs/def28"
+           },
+           "sentOnlyToMe": {
+             "$ref": "#/$defs/def29"
+           }
+         },
+         "type": "object"
+       },
+       "def32": {
          "additionalProperties": true,
          "properties": {
            "attachments": {
-               "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"
+               "$ref": "#/$defs/def33"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def38"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            },
-             ],
-             "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,
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                },
                "dueDateTime": {
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                },
                "flagStatus": {
                  "enum": [
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                }
              },
              "type": "object"
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def23"
            },
            "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'>.",
-             "$ref": "#/$defs/def3"
+             "$ref": "#/$defs/def34"
            },
            "inferenceClassification": {
              "enum": [
-               "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"
+               "$ref": "#/$defs/def40"
              },
              "type": "array"
            },
-             ],
-             "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.",
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            }
-       "def3": {
+       "def33": {
+         "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"
+               }
+             ]
+           },
+           "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"
+       },
+       "def34": {
          "enum": [
            "low",
            "normal",
-       "def30": {
+       "def35": {
          "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).",
+           "id": {
+             "description": "The unique identifier for an entity. Read-only.",
              "type": "string"
            },
-           "timeZone": {
-             "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
+           "value": {
+             "description": "A property value.",
              "type": [
                "string",
                "null"
-       "def31": {
+       "def36": {
          "additionalProperties": true,
          "properties": {
            "id": {
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def37"
              },
              "type": "array"
            }
-       "def32": {
+       "def37": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def38": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def39": {
          "additionalProperties": true,
          "properties": {
-           "id": {
-             "description": "The unique identifier for an entity. Read-only.",
+           "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"
            },
-           "value": {
-             "description": "A property value.",
+           "timeZone": {
+             "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
              "type": [
                "string",
                "null"
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def40": {
+         "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"
+       },
+       "def41": {
+         "enum": [
+           "normal",
+           "personal",
+           "private",
+           "confidential"
+         ],
+         "type": "string"
+       },
+       "def42": {
+         "$ref": "#/$defs/def34"
+       },
+       "def43": {
          "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"
-           ]
+           "$ref": "#/$defs/def44"
          },
          "type": "array"
        },
-       "def5": {
+       "def44": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def45": {
          "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"
-           ]
+           "$ref": "#/$defs/def2"
          },
          "type": "array"
        },
-       "def6": {
-         "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"
+       "def46": {
+         "type": "boolean"
        },
-       "def7": {
+       "def47": {
+         "type": "boolean"
+       },
+       "def48": {
+         "type": "boolean"
+       },
+       "def5": {
          "description": "Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply.",
          "items": {
-           "$ref": "#/$defs/def2"
+           "$ref": "#/$defs/def23"
          },
          "type": "array"
        },
-       "def8": {
+       "def6": {
          "description": "Indicates whether an incoming message must have attachments in order for the condition or exception to apply.",
          "type": [
            "boolean",
-       "def9": {
+       "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"
-           ]
+           "$ref": "#/$defs/def8"
          },
          "type": "array"
+       },
+       "def8": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def9": {
+         "description": "Indicates whether an incoming message must be an approval request in order for the condition or exception to apply.",
+         "type": [
+           "boolean",
+           "null"
+         ]
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-             ],
-             "description": "The number of immediate child mailFolders in the current mailFolder."
+             ]
            },
            "childFolders": {
              "description": "The collection of child folders in the mailFolder.",
-               "$ref": "#/$defs/def29"
+               "$ref": "#/$defs/def32"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-             ],
-             "description": "The number of items in the mailFolder."
+             ]
            },
            "unreadItemCount": {
              "anyOf": [
-             ],
-             "description": "The number of items in the mailFolder marked as unread."
+             ]
            }
          },
          "type": "object"
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def46"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def47"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def48"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        },
        "mailFolderId": {
          "description": "Value 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.",
--- pinned/create-mail-folder
+++ observed/create-mail-folder
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "The number of immediate child mailFolders in the current mailFolder."
+             ]
            },
            "childFolders": {
              "description": "The collection of child folders in the mailFolder.",
-               "$ref": "#/$defs/def29"
+               "$ref": "#/$defs/def32"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-             ],
-             "description": "The number of items in the mailFolder."
+             ]
            },
            "unreadItemCount": {
              "anyOf": [
-             ],
-             "description": "The number of items in the mailFolder marked as unread."
+             ]
            }
          },
          "type": "object"
-                   "type": [
-                     "string",
-                     "null"
-                   ]
+                   "$ref": "#/$defs/def12"
                  },
                  "type": "array"
                },
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-                 "$ref": "#/$defs/def3"
+                 "$ref": "#/$defs/def34"
                },
                "moveToFolder": {
                  "description": "The ID of the folder that a message will be moved to.",
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-             "additionalProperties": true,
-             "description": "[Note: Simplified from 30 properties to 25 most common ones]",
-             "properties": {
-               "bodyContains": {
-                 "$ref": "#/$defs/def4"
-               },
-               "bodyOrSubjectContains": {
-                 "$ref": "#/$defs/def5"
-               },
-               "categories": {
-                 "$ref": "#/$defs/def6"
-               },
-               "fromAddresses": {
-                 "$ref": "#/$defs/def7"
-               },
-               "hasAttachments": {
-                 "$ref": "#/$defs/def8"
-               },
-               "headerContains": {
-                 "$ref": "#/$defs/def9"
-               },
-               "importance": {
-                 "$ref": "#/$defs/def10"
-               },
-               "isApprovalRequest": {
-                 "$ref": "#/$defs/def11"
-               },
-               "isAutomaticForward": {
-                 "$ref": "#/$defs/def12"
-               },
-               "isAutomaticReply": {
-                 "$ref": "#/$defs/def13"
-               },
-               "isEncrypted": {
-                 "$ref": "#/$defs/def14"
-               },
-               "isMeetingRequest": {
-                 "$ref": "#/$defs/def15"
-               },
-               "isMeetingResponse": {
-                 "$ref": "#/$defs/def16"
-               },
-               "isNonDeliveryReport": {
-                 "$ref": "#/$defs/def17"
-               },
-               "isPermissionControlled": {
-                 "$ref": "#/$defs/def18"
-               },
-               "isReadReceipt": {
-                 "$ref": "#/$defs/def19"
-               },
-               "isSigned": {
-                 "$ref": "#/$defs/def20"
-               },
-               "isVoicemail": {
-                 "$ref": "#/$defs/def21"
-               },
-               "messageActionFlag": {
-                 "$ref": "#/$defs/def22"
-               },
-               "notSentToMe": {
-                 "$ref": "#/$defs/def23"
-               },
-               "recipientContains": {
-                 "$ref": "#/$defs/def24"
-               },
-               "senderContains": {
-                 "$ref": "#/$defs/def25"
-               },
-               "sensitivity": {
-                 "$ref": "#/$defs/def26"
-               },
-               "sentCcMe": {
-                 "$ref": "#/$defs/def27"
-               },
-               "sentOnlyToMe": {
-                 "$ref": "#/$defs/def28"
+             "allOf": [
+               {
+                 "$ref": "#/$defs/def31"
                }
-             },
-             "type": "object"
+             ],
+             "description": "[Note: Simplified from 30 properties to 25 most common ones]"
            },
            "displayName": {
              "description": "The display name of the rule.",
-             "additionalProperties": true,
-             "description": "[Note: Simplified from 30 properties to 25 most common ones]",
-             "properties": {
-               "bodyContains": {
-                 "$ref": "#/$defs/def4"
-               },
-               "bodyOrSubjectContains": {
-                 "$ref": "#/$defs/def5"
-               },
-               "categories": {
-                 "$ref": "#/$defs/def6"
-               },
-               "fromAddresses": {
-                 "$ref": "#/$defs/def7"
-               },
-               "hasAttachments": {
-                 "$ref": "#/$defs/def8"
-               },
-               "headerContains": {
-                 "$ref": "#/$defs/def9"
-               },
-               "importance": {
-                 "$ref": "#/$defs/def10"
-               },
-               "isApprovalRequest": {
-                 "$ref": "#/$defs/def11"
-               },
-               "isAutomaticForward": {
-                 "$ref": "#/$defs/def12"
-               },
-               "isAutomaticReply": {
-                 "$ref": "#/$defs/def13"
-               },
-               "isEncrypted": {
-                 "$ref": "#/$defs/def14"
-               },
-               "isMeetingRequest": {
-                 "$ref": "#/$defs/def15"
-               },
-               "isMeetingResponse": {
-                 "$ref": "#/$defs/def16"
-               },
-               "isNonDeliveryReport": {
-                 "$ref": "#/$defs/def17"
-               },
-               "isPermissionControlled": {
-                 "$ref": "#/$defs/def18"
-               },
-               "isReadReceipt": {
-                 "$ref": "#/$defs/def19"
-               },
-               "isSigned": {
-                 "$ref": "#/$defs/def20"
-               },
-               "isVoicemail": {
-                 "$ref": "#/$defs/def21"
-               },
-               "messageActionFlag": {
-                 "$ref": "#/$defs/def22"
-               },
-               "notSentToMe": {
-                 "$ref": "#/$defs/def23"
-               },
-               "recipientContains": {
-                 "$ref": "#/$defs/def24"
-               },
-               "senderContains": {
-                 "$ref": "#/$defs/def25"
-               },
-               "sensitivity": {
-                 "$ref": "#/$defs/def26"
-               },
-               "sentCcMe": {
-                 "$ref": "#/$defs/def27"
-               },
-               "sentOnlyToMe": {
-                 "$ref": "#/$defs/def28"
+             "allOf": [
+               {
+                 "$ref": "#/$defs/def31"
                }
-             },
-             "type": "object"
+             ],
+             "description": "[Note: Simplified from 30 properties to 25 most common ones]"
            },
            "hasError": {
              "description": "Indicates whether the rule is in an error condition. Read-only.",
-             ],
-             "description": "Indicates the order in which the rule is executed, among other rules."
+             ]
            }
          },
          "type": "object"
-         "$ref": "#/$defs/def3"
+         "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 approval request in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply.",
          "type": [
-           "boolean",
+           "string",
            "null"
          ]
        },
-         "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "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"
-       },
-       "def20": {
-         "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.",
          "type": [
-           "boolean",
+           "string",
            "null"
          ]
        },
-       "def21": {
+       "def20": {
          "description": "Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply.",
          "type": [
            "boolean",
-       "def22": {
+       "def21": {
          "enum": [
            "any",
            "call",
-       "def23": {
+       "def22": {
          "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",
+       "def23": {
+         "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"
+       },
        "def24": {
          "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"
-           ]
+           "$ref": "#/$defs/def25"
          },
          "type": "array"
        },
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def26": {
          "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"
-           ]
+           "$ref": "#/$defs/def27"
          },
          "type": "array"
        },
-       "def26": {
-         "enum": [
-           "normal",
-           "personal",
-           "private",
-           "confidential"
-         ],
-         "type": "string"
-       },
        "def27": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def28": {
          "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",
-       "def28": {
+       "def29": {
          "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",
-       "def29": {
+       "def3": {
+         "description": "Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply.",
+         "items": {
+           "$ref": "#/$defs/def4"
+         },
+         "type": "array"
+       },
+       "def30": {},
+       "def31": {
+         "additionalProperties": {
+           "$ref": "#/$defs/def30"
+         },
+         "properties": {
+           "bodyContains": {
+             "$ref": "#/$defs/def43"
+           },
+           "bodyOrSubjectContains": {
+             "$ref": "#/$defs/def45"
+           },
+           "categories": {
+             "$ref": "#/$defs/def3"
+           },
+           "fromAddresses": {
+             "$ref": "#/$defs/def5"
+           },
+           "hasAttachments": {
+             "$ref": "#/$defs/def6"
+           },
+           "headerContains": {
+             "$ref": "#/$defs/def7"
+           },
+           "importance": {
+             "$ref": "#/$defs/def42"
+           },
+           "isApprovalRequest": {
+             "$ref": "#/$defs/def9"
+           },
+           "isAutomaticForward": {
+             "$ref": "#/$defs/def10"
+           },
+           "isAutomaticReply": {
+             "$ref": "#/$defs/def11"
+           },
+           "isEncrypted": {
+             "$ref": "#/$defs/def13"
+           },
+           "isMeetingRequest": {
+             "$ref": "#/$defs/def14"
+           },
+           "isMeetingResponse": {
+             "$ref": "#/$defs/def15"
+           },
+           "isNonDeliveryReport": {
+             "$ref": "#/$defs/def16"
+           },
+           "isPermissionControlled": {
+             "$ref": "#/$defs/def17"
+           },
+           "isReadReceipt": {
+             "$ref": "#/$defs/def18"
+           },
+           "isSigned": {
+             "$ref": "#/$defs/def19"
+           },
+           "isVoicemail": {
+             "$ref": "#/$defs/def20"
+           },
+           "messageActionFlag": {
+             "$ref": "#/$defs/def21"
+           },
+           "notSentToMe": {
+             "$ref": "#/$defs/def22"
+           },
+           "recipientContains": {
+             "$ref": "#/$defs/def24"
+           },
+           "senderContains": {
+             "$ref": "#/$defs/def26"
+           },
+           "sensitivity": {
+             "$ref": "#/$defs/def41"
+           },
+           "sentCcMe": {
+             "$ref": "#/$defs/def28"
+           },
+           "sentOnlyToMe": {
+             "$ref": "#/$defs/def29"
+           }
+         },
+         "type": "object"
+       },
+       "def32": {
          "additionalProperties": true,
          "properties": {
            "attachments": {
-               "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"
+               "$ref": "#/$defs/def33"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def38"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            },
-             ],
-             "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,
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                },
                "dueDateTime": {
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                },
                "flagStatus": {
                  "enum": [
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                }
              },
              "type": "object"
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def23"
            },
            "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'>.",
-             "$ref": "#/$defs/def3"
+             "$ref": "#/$defs/def34"
            },
            "inferenceClassification": {
              "enum": [
-               "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"
+               "$ref": "#/$defs/def40"
              },
              "type": "array"
            },
-             ],
-             "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.",
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            }
-       "def3": {
+       "def33": {
+         "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"
+               }
+             ]
+           },
+           "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"
+       },
+       "def34": {
          "enum": [
            "low",
            "normal",
-       "def30": {
+       "def35": {
          "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).",
+           "id": {
+             "description": "The unique identifier for an entity. Read-only.",
              "type": "string"
            },
-           "timeZone": {
-             "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
+           "value": {
+             "description": "A property value.",
              "type": [
                "string",
                "null"
-       "def31": {
+       "def36": {
          "additionalProperties": true,
          "properties": {
            "id": {
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def37"
              },
              "type": "array"
            }
-       "def32": {
+       "def37": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def38": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def39": {
          "additionalProperties": true,
          "properties": {
-           "id": {
-             "description": "The unique identifier for an entity. Read-only.",
+           "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"
            },
-           "value": {
-             "description": "A property value.",
+           "timeZone": {
+             "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
              "type": [
                "string",
                "null"
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def40": {
+         "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"
+       },
+       "def41": {
+         "enum": [
+           "normal",
+           "personal",
+           "private",
+           "confidential"
+         ],
+         "type": "string"
+       },
+       "def42": {
+         "$ref": "#/$defs/def34"
+       },
+       "def43": {
          "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"
-           ]
+           "$ref": "#/$defs/def44"
          },
          "type": "array"
        },
-       "def5": {
+       "def44": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def45": {
          "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"
-           ]
+           "$ref": "#/$defs/def2"
          },
          "type": "array"
        },
-       "def6": {
-         "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"
+       "def46": {
+         "type": "boolean"
        },
-       "def7": {
+       "def47": {
+         "type": "boolean"
+       },
+       "def48": {
+         "type": "boolean"
+       },
+       "def5": {
          "description": "Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply.",
          "items": {
-           "$ref": "#/$defs/def2"
+           "$ref": "#/$defs/def23"
          },
          "type": "array"
        },
-       "def8": {
+       "def6": {
          "description": "Indicates whether an incoming message must have attachments in order for the condition or exception to apply.",
          "type": [
            "boolean",
-       "def9": {
+       "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"
-           ]
+           "$ref": "#/$defs/def8"
          },
          "type": "array"
+       },
+       "def8": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def9": {
+         "description": "Indicates whether an incoming message must be an approval request in order for the condition or exception to apply.",
+         "type": [
+           "boolean",
+           "null"
+         ]
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-             ],
-             "description": "The number of immediate child mailFolders in the current mailFolder."
+             ]
            },
            "childFolders": {
              "description": "The collection of child folders in the mailFolder.",
-               "$ref": "#/$defs/def29"
+               "$ref": "#/$defs/def32"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-             ],
-             "description": "The number of items in the mailFolder."
+             ]
            },
            "unreadItemCount": {
              "anyOf": [
-             ],
-             "description": "The number of items in the mailFolder marked as unread."
+             ]
            }
          },
          "type": "object"
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def46"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def47"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def48"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        }
      },
      "required": [
--- pinned/create-mail-rule
+++ observed/create-mail-rule
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "Indicates the order in which the rule is executed, among other rules."
+             ]
            }
          },
          "type": "object"
--- pinned/create-onedrive-folder
+++ observed/create-onedrive-folder
  {
    "annotations": {
      "destructiveHint": true,
-                 ],
-                 "description": "The number of the disc this audio file came from."
+                 ]
                },
                "discCount": {
                  "anyOf": [
-                 ],
-                 "description": "The total number of discs in this album."
+                 ]
                },
                "duration": {
                  "description": "Duration of the audio file, expressed in milliseconds",
-                 ],
-                 "description": "The number of the track on the original disc for this audio file."
+                 ]
                },
                "trackCount": {
                  "anyOf": [
-                 ],
-                 "description": "The total number of tracks on the original disc for this audio file."
+                 ]
                },
                "year": {
                  "anyOf": [
-                 ],
-                 "description": "The year the audio file was recorded."
+                 ]
                }
              },
              "type": "object"
-                 ],
-                 "description": "Number of children contained immediately within this container."
+                 ]
                }
              },
              "type": "object"
-                       ],
-                       "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
+                       ]
                      }
                    },
                    "type": "object"
-                       ],
-                       "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.",
-                       ],
-                       "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"
-                 ],
-                 "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)."
+                 ]
                },
                "creationType": {
                  "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).",
-                 ],
-                 "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted."
+                 ]
                },
                "department": {
                  "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).",
-                 ],
-                 "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)."
+                 ]
                },
                "employeeId": {
                  "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).",
-                 ],
-                 "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."
+                 ]
                },
                "id": {
                  "description": "The unique identifier for an entity. Read-only.",
-                 ],
-                 "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."
+                 ]
                },
                "lastModifiedDateTime": {
                  "anyOf": [
-                 ],
-                 "description": "The UTC date and time the file was last modified on a client."
+                 ]
                }
              },
              "type": "object"
-                 ],
-                 "description": "Number of children contained immediately within this container."
+                 ]
                },
                "view": {
                  "additionalProperties": true,
-                 ],
-                 "description": "Optional. Height of the image, in pixels. Read-only."
+                 ]
                },
                "width": {
                  "anyOf": [
-                 ],
-                 "description": "Optional. Width of the image, in pixels. Read-only."
+                 ]
                }
              },
              "type": "object"
-                       ],
-                       "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
+                       ]
                      }
                    },
                    "type": "object"
-                       ],
-                       "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.",
-                       ],
-                       "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"
-                 ],
-                 "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)."
+                 ]
                },
                "creationType": {
                  "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).",
-                 ],
-                 "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted."
+                 ]
                },
                "department": {
                  "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).",
-                 ],
-                 "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)."
+                 ]
                },
                "employeeId": {
                  "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).",
-                 ],
-                 "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."
+                 ]
                },
                "id": {
                  "description": "The unique identifier for an entity. Read-only.",
-                     ],
-                     "description": "Date and time the pending binary operation was queued in UTC time. Read-only."
+                     ]
                    }
                  },
                  "type": "object"
--- pinned/create-onenote-notebook
+++ observed/create-onenote-notebook
  {
    "annotations": {
      "destructiveHint": true,
+       "def10": {
+         "type": "boolean"
+       },
+       "def11": {
+         "type": "boolean"
+       },
        "def2": {
          "additionalProperties": true,
          "properties": {
+         "enum": [
+           "None",
+           "Owner",
+           "Contributor",
+           "Reader"
+         ],
+         "type": "string"
+       },
+       "def5": {
          "additionalProperties": true,
          "properties": {
            "createdBy": {
-             ],
-             "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.",
-             ],
-             "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"
+             "$ref": "#/$defs/def6"
            },
            "parentSectionGroup": {
-             "$ref": "#/$defs/def4"
+             "$ref": "#/$defs/def5"
            },
            "sectionGroups": {
              "description": "The section groups in the section. Read-only. Nullable.",
-               "$ref": "#/$defs/def4"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def6"
+               "$ref": "#/$defs/def7"
              },
              "type": "array"
            },
-       "def5": {
+       "def6": {
          "additionalProperties": true,
          "properties": {
            "createdBy": {
-             ],
-             "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.",
-             ],
-             "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"
-               "$ref": "#/$defs/def4"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def6"
+               "$ref": "#/$defs/def7"
              },
              "type": "array"
            },
-             "$ref": "#/$defs/def7"
+             "$ref": "#/$defs/def4"
            }
          },
          "type": "object"
-       "def6": {
+       "def7": {
          "additionalProperties": true,
          "properties": {
            "createdBy": {
-             ],
-             "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.",
-             ],
-             "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,
-               "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"
+               "$ref": "#/$defs/def8"
              },
              "type": "array"
            },
-             "$ref": "#/$defs/def5"
+             "$ref": "#/$defs/def6"
            },
            "parentSectionGroup": {
-             "$ref": "#/$defs/def4"
+             "$ref": "#/$defs/def5"
            },
            "self": {
              "description": "The endpoint where you can get details about the page. Read-only.",
-       "def7": {
-         "enum": [
-           "None",
-           "Owner",
-           "Contributor",
-           "Reader"
-         ],
-         "type": "string"
+       "def8": {
+         "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"
+               }
+             ]
+           },
+           "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"
+               }
+             ]
+           },
+           "level": {
+             "anyOf": [
+               {
+                 "description": "The indentation level of the page. Read-only.",
+                 "maximum": 2147483647,
+                 "minimum": -2147483648,
+                 "type": "number"
+               },
+               {
+                 "type": "null"
+               }
+             ]
+           },
+           "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"
+               }
+             ]
+           },
+           "parentNotebook": {
+             "$ref": "#/$defs/def6"
+           },
+           "parentSection": {
+             "$ref": "#/$defs/def7"
+           },
+           "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"
+       },
+       "def9": {
+         "type": "boolean"
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-             ],
-             "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.",
-             ],
-             "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"
-               "$ref": "#/$defs/def4"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def6"
+               "$ref": "#/$defs/def7"
              },
              "type": "array"
            },
-             "$ref": "#/$defs/def7"
+             "$ref": "#/$defs/def4"
            }
          },
          "type": "object"
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def9"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def10"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def11"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        }
      },
      "required": [
--- pinned/create-onenote-page
+++ observed/create-onenote-page
  {
    "annotations": {
      "destructiveHint": true,
+       "def10": {
+         "type": "boolean"
+       },
        "def2": {
          "additionalProperties": true,
          "properties": {
-             ],
-             "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.",
-             ],
-             "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,
-             ],
-             "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.",
-             ],
-             "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"
-             ],
-             "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.",
-             ],
-             "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,
-               "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"
+               "$ref": "#/$defs/def7"
              },
              "type": "array"
            },
+       },
+       "def7": {
+         "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"
+               }
+             ]
+           },
+           "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"
+               }
+             ]
+           },
+           "level": {
+             "anyOf": [
+               {
+                 "description": "The indentation level of the page. Read-only.",
+                 "maximum": 2147483647,
+                 "minimum": -2147483648,
+                 "type": "number"
+               },
+               {
+                 "type": "null"
+               }
+             ]
+           },
+           "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"
+               }
+             ]
+           },
+           "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"
+       },
+       "def8": {
+         "type": "boolean"
+       },
+       "def9": {
+         "type": "boolean"
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-             ],
-             "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.",
-             ],
-             "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."
+             ]
            },
            "links": {
              "$ref": "#/$defs/def0"
-             ],
-             "description": "The order of the page within its parent section. Read-only."
+             ]
            },
            "parentNotebook": {
              "$ref": "#/$defs/def2"
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def8"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def9"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def10"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        }
      },
      "required": [
--- pinned/create-onenote-section
+++ observed/create-onenote-section
  {
    "annotations": {
      "destructiveHint": true,
+       "def10": {
+         "type": "boolean"
+       },
        "def2": {
          "additionalProperties": true,
          "properties": {
-             ],
-             "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.",
-             ],
-             "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."
+             ]
            },
            "links": {
              "additionalProperties": true,
-             ],
-             "description": "The order of the page within its parent section. Read-only."
+             ]
            },
            "parentNotebook": {
              "$ref": "#/$defs/def5"
-             ],
-             "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.",
-             ],
-             "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,
-             ],
-             "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.",
-             ],
-             "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"
-             ],
-             "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.",
-             ],
-             "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"
+       },
+       "def8": {
+         "type": "boolean"
+       },
+       "def9": {
+         "type": "boolean"
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-             ],
-             "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.",
-             ],
-             "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"
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def8"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def9"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def10"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        },
        "notebookId": {
          "description": "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.",
--- pinned/create-onenote-section-page
+++ observed/create-onenote-section-page
  {
    "annotations": {
      "destructiveHint": true,
+       "def10": {
+         "type": "boolean"
+       },
        "def2": {
          "additionalProperties": true,
          "properties": {
-             ],
-             "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.",
-             ],
-             "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,
-             ],
-             "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.",
-             ],
-             "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"
-             ],
-             "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.",
-             ],
-             "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,
-               "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"
+               "$ref": "#/$defs/def7"
              },
              "type": "array"
            },
+       },
+       "def7": {
+         "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"
+               }
+             ]
+           },
+           "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"
+               }
+             ]
+           },
+           "level": {
+             "anyOf": [
+               {
+                 "description": "The indentation level of the page. Read-only.",
+                 "maximum": 2147483647,
+                 "minimum": -2147483648,
+                 "type": "number"
+               },
+               {
+                 "type": "null"
+               }
+             ]
+           },
+           "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"
+               }
+             ]
+           },
+           "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"
+       },
+       "def8": {
+         "type": "boolean"
+       },
+       "def9": {
+         "type": "boolean"
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-             ],
-             "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.",
-             ],
-             "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."
+             ]
            },
            "links": {
              "$ref": "#/$defs/def0"
-             ],
-             "description": "The order of the page within its parent section. Read-only."
+             ]
            },
            "parentNotebook": {
              "$ref": "#/$defs/def2"
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def8"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def9"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def10"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        },
        "onenoteSectionId": {
          "description": "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.",
--- pinned/create-outlook-contact
+++ observed/create-outlook-contact
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "The contact's birthday. 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"
+             ]
            },
            "businessAddress": {
              "additionalProperties": true,
-             ],
-             "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"
+             ]
            },
            "department": {
              "description": "The contact's department.",
-             ],
-             "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 contact. Read-only. Nullable.",
--- pinned/create-planner-bucket
+++ observed/create-planner-bucket
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "description": "Number of checklist items with value set to false, representing incomplete items."
+                   ]
                  },
                  "appliedCategories": {
                    "additionalProperties": true,
-                   ],
-                   "description": "Number of checklist items that are present on the task."
+                   ]
                  },
                  "completedBy": {
                    "additionalProperties": true,
-                   ],
-                   "description": "Read-only. Date and time at which the 'percentComplete' of the task is set to '100'. 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"
+                   ]
                  },
                  "conversationThreadId": {
                    "description": "Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group.",
-                   ],
-                   "description": "Read-only. Date and time at which the task is created. 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"
+                   ]
                  },
                  "details": {
                    "additionalProperties": true,
-                   ],
-                   "description": "Date and time at which the task is due. 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"
+                   ]
                  },
                  "hasDescription": {
                    "description": "Read-only. Value is true if the details object of the task has a nonempty description and false otherwise.",
-                   ],
-                   "description": "Percentage of task completion. When set to 100, the task is considered completed."
+                   ]
                  },
                  "planId": {
                    "description": "Plan ID to which the task belongs.",
-                   ],
-                   "description": "Priority of the task. The valid range of values is between 0 and 10, with the increasing value being lower priority (0 has the highest priority and 10 has the lowest priority).  Currently, Planner interprets values 0 and 1 as 'urgent', 2, 3 and 4 as 'important', 5, 6, and 7 as 'medium', and 8, 9, and 10 as 'low'.  Additionally, Planner sets the value 1 for 'urgent', 3 for 'important', 5 for 'medium', and 9 for 'low'."
+                   ]
                  },
                  "referenceCount": {
                    "anyOf": [
-                   ],
-                   "description": "Number of external references that exist on the task."
+                   ]
                  },
                  "startDateTime": {
                    "anyOf": [
-                   ],
-                   "description": "Date and time at which the task starts. 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"
+                   ]
                  },
                  "title": {
                    "description": "Title of the task.",
--- pinned/create-planner-plan
+++ observed/create-planner-plan
  {
    "annotations": {
      "destructiveHint": true,
+           "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": {
+           "id": {
+             "description": "The unique identifier for an entity. Read-only.",
+             "type": "string"
+           },
+           "name": {
+             "description": "Name of the bucket.",
+             "type": "string"
+           },
+           "orderHint": {
+             "description": "Hint used to order items of this type in a list view. For details about the supported format, see Using order hints in Planner.",
+             "type": [
+               "string",
+               "null"
+             ]
+           },
+           "planId": {
+             "description": "Plan ID to which the bucket belongs.",
+             "type": [
+               "string",
+               "null"
+             ]
+           },
+           "tasks": {
+             "description": "Read-only. Nullable. The collection of tasks in the bucket.",
+             "items": {
+               "$ref": "#/$defs/def3"
+             },
+             "type": "array"
+           }
+         },
+         "type": "object"
+       },
+       "def3": {
+         "additionalProperties": true,
+         "properties": {
            "activeChecklistItemCount": {
              "anyOf": [
                {
-             ],
-             "description": "Number of checklist items with value set to false, representing incomplete items."
+             ]
            },
            "appliedCategories": {
              "additionalProperties": true,
-             ],
-             "description": "Number of checklist items that are present on the task."
+             ]
            },
            "completedBy": {
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def0"
            },
            "completedDateTime": {
              "anyOf": [
-             ],
-             "description": "Read-only. Date and time at which the 'percentComplete' of the task is set to '100'. 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"
+             ]
            },
            "conversationThreadId": {
              "description": "Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group.",
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def0"
            },
            "createdDateTime": {
              "anyOf": [
-             ],
-             "description": "Read-only. Date and time at which the task is created. 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"
+             ]
            },
            "details": {
              "additionalProperties": true,
-                 "$ref": "#/$defs/def1"
+                 "$ref": "#/$defs/def4"
                },
                "references": {
                  "additionalProperties": true,
-             ],
-             "description": "Date and time at which the task is due. 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"
+             ]
            },
            "hasDescription": {
              "description": "Read-only. Value is true if the details object of the task has a nonempty description and false otherwise.",
-             ],
-             "description": "Percentage of task completion. When set to 100, the task is considered completed."
+             ]
            },
            "planId": {
              "description": "Plan ID to which the task belongs.",
-             "$ref": "#/$defs/def1"
+             "$ref": "#/$defs/def4"
            },
            "priority": {
              "anyOf": [
-             ],
-             "description": "Priority of the task. The valid range of values is between 0 and 10, with the increasing value being lower priority (0 has the highest priority and 10 has the lowest priority).  Currently, Planner interprets values 0 and 1 as 'urgent', 2, 3 and 4 as 'important', 5, 6, and 7 as 'medium', and 8, 9, and 10 as 'low'.  Additionally, Planner sets the value 1 for 'urgent', 3 for 'important', 5 for 'medium', and 9 for 'low'."
+             ]
            },
            "referenceCount": {
              "anyOf": [
-             ],
-             "description": "Number of external references that exist on the task."
+             ]
            },
            "startDateTime": {
              "anyOf": [
-             ],
-             "description": "Date and time at which the task starts. 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"
+             ]
            },
            "title": {
              "description": "Title of the task.",
-       "def1": {
+       "def4": {
          "enum": [
            "automatic",
            "noPreview",
-       "def2": {
-         "additionalProperties": true,
-         "properties": {
-           "application": {
-             "$ref": "#/$defs/def3"
-           },
-           "device": {
-             "$ref": "#/$defs/def3"
-           },
-           "user": {
-             "$ref": "#/$defs/def3"
-           }
-         },
-         "type": "object"
+       "def5": {
+         "type": "boolean"
        },
-       "def3": {
-         "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"
+       "def6": {
+         "type": "boolean"
+       },
+       "def7": {
+         "type": "boolean"
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-               "additionalProperties": true,
-               "properties": {
-                 "id": {
-                   "description": "The unique identifier for an entity. Read-only.",
-                   "type": "string"
-                 },
-                 "name": {
-                   "description": "Name of the bucket.",
-                   "type": "string"
-                 },
-                 "orderHint": {
-                   "description": "Hint used to order items of this type in a list view. For details about the supported format, see Using order hints in Planner.",
-                   "type": [
-                     "string",
-                     "null"
-                   ]
-                 },
-                 "planId": {
-                   "description": "Plan ID to which the bucket belongs.",
-                   "type": [
-                     "string",
-                     "null"
-                   ]
-                 },
-                 "tasks": {
-                   "description": "Read-only. Nullable. The collection of tasks in the bucket.",
-                   "items": {
-                     "$ref": "#/$defs/def0"
-                   },
-                   "type": "array"
-                 }
-               },
-               "type": "object"
+               "$ref": "#/$defs/def2"
              },
              "type": "array"
            },
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def0"
            },
            "createdDateTime": {
              "anyOf": [
-             ],
-             "description": "Read-only. Date and time at which the plan is created. 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"
+             ]
            },
            "details": {
              "additionalProperties": true,
-               "$ref": "#/$defs/def0"
+               "$ref": "#/$defs/def3"
              },
              "type": "array"
            },
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def5"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def6"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def7"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        }
      },
      "required": [
--- pinned/create-planner-task
+++ observed/create-planner-task
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "Number of checklist items with value set to false, representing incomplete items."
+             ]
            },
            "appliedCategories": {
              "additionalProperties": true,
-             ],
-             "description": "Number of checklist items that are present on the task."
+             ]
            },
            "completedBy": {
              "additionalProperties": true,
-             ],
-             "description": "Read-only. Date and time at which the 'percentComplete' of the task is set to '100'. 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"
+             ]
            },
            "conversationThreadId": {
              "description": "Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group.",
-             ],
-             "description": "Read-only. Date and time at which the task is created. 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"
+             ]
            },
            "details": {
              "additionalProperties": true,
-             ],
-             "description": "Date and time at which the task is due. 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"
+             ]
            },
            "hasDescription": {
              "description": "Read-only. Value is true if the details object of the task has a nonempty description and false otherwise.",
-             ],
-             "description": "Percentage of task completion. When set to 100, the task is considered completed."
+             ]
            },
            "planId": {
              "description": "Plan ID to which the task belongs.",
-             ],
-             "description": "Priority of the task. The valid range of values is between 0 and 10, with the increasing value being lower priority (0 has the highest priority and 10 has the lowest priority).  Currently, Planner interprets values 0 and 1 as 'urgent', 2, 3 and 4 as 'important', 5, 6, and 7 as 'medium', and 8, 9, and 10 as 'low'.  Additionally, Planner sets the value 1 for 'urgent', 3 for 'important', 5 for 'medium', and 9 for 'low'."
+             ]
            },
            "referenceCount": {
              "anyOf": [
-             ],
-             "description": "Number of external references that exist on the task."
+             ]
            },
            "startDateTime": {
              "anyOf": [
-             ],
-             "description": "Date and time at which the task starts. 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"
+             ]
            },
            "title": {
              "description": "Title of the task.",
--- pinned/create-reply-all-draft
+++ observed/create-reply-all-draft
  {
    "annotations": {
      "destructiveHint": true,
-                           ],
-                           "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.",
-                     ],
-                     "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,
-                     ],
-                     "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.",
--- pinned/create-reply-draft
+++ observed/create-reply-draft
  {
    "annotations": {
      "destructiveHint": true,
-                           ],
-                           "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.",
-                     ],
-                     "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,
-                     ],
-                     "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.",
--- pinned/create-specific-calendar-event
+++ observed/create-specific-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "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.",
-                       ],
-                       "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"
-             ],
-             "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,
-             ],
-             "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,
-                     ],
-                     "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.",
-                     ],
-                     "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": [
-             ],
-             "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.",
--- pinned/create-todo-checklist-item
+++ observed/create-todo-checklist-item
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "The date and time when the checklistItem was finished."
+             ]
            },
            "createdDateTime": {
              "description": "The date and time when the checklistItem was created.",
--- pinned/create-todo-task
+++ observed/create-todo-task
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "description": "The date and time in UTC when the upload session will expire. The complete file must be uploaded before this expiration time is reached."
+                   ]
                  },
                  "id": {
                    "description": "The unique identifier for an entity. Read-only.",
-                   ],
-                   "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 display name of the attachment. This doesn't need to be the actual file name.",
-                   ],
-                   "description": "The date and time when the checklistItem was finished."
+                   ]
                  },
                  "createdDateTime": {
                    "description": "The date and time when the checklistItem was created.",
-                     ],
-                     "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.",
-                     ],
-                     "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": [
--- pinned/create-todo-task-list
+++ observed/create-todo-task-list
  {
    "annotations": {
      "destructiveHint": true,
-                         ],
-                         "description": "The date and time in UTC when the upload session will expire. The complete file must be uploaded before this expiration time is reached."
+                         ]
                        },
                        "id": {
                          "description": "The unique identifier for an entity. Read-only.",
-                         ],
-                         "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 display name of the attachment. This doesn't need to be the actual file name.",
-                         ],
-                         "description": "The date and time when the checklistItem was finished."
+                         ]
                        },
                        "createdDateTime": {
                          "description": "The date and time when the checklistItem was created.",
-                           ],
-                           "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.",
-                           ],
-                           "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": [
--- pinned/create-upload-session
+++ observed/create-upload-session
  {
    "annotations": {
      "destructiveHint": true,
-                         ],
-                         "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."
+                         ]
                        },
                        "lastModifiedDateTime": {
                          "anyOf": [
-                         ],
-                         "description": "The UTC date and time the file was last modified on a client."
+                         ]
                        }
                      },
                      "type": "object"
--- pinned/forward-mail-message
+++ observed/forward-mail-message
  {
    "annotations": {
      "destructiveHint": true,
-                           ],
-                           "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.",
-                     ],
-                     "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,
-                     ],
-                     "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.",
--- pinned/get-upload-url
+++ observed/get-upload-url
  {
    "annotations": {
      "openWorldHint": true,
-         "description": "Attachments collection of a draft message or an event, e.g. /me/messages/{message-id}/attachments or /me/events/{event-id}/attachments.",
+         "description": "Attachments collection of a draft message or an event, e.g. /me/messages/{message-id}/attachments, /me/events/{event-id}/attachments, or /users/{user-id}/messages/{message-id}/attachments for another mailbox.",
          "type": "string"
        }
      },
--- pinned/move-rename-onedrive-item
+++ observed/move-rename-onedrive-item
  {
    "annotations": {
      "destructiveHint": true,
-                 ],
-                 "description": "The number of the disc this audio file came from."
+                 ]
                },
                "discCount": {
                  "anyOf": [
-                 ],
-                 "description": "The total number of discs in this album."
+                 ]
                },
                "duration": {
                  "description": "Duration of the audio file, expressed in milliseconds",
-                 ],
-                 "description": "The number of the track on the original disc for this audio file."
+                 ]
                },
                "trackCount": {
                  "anyOf": [
-                 ],
-                 "description": "The total number of tracks on the original disc for this audio file."
+                 ]
                },
                "year": {
                  "anyOf": [
-                 ],
-                 "description": "The year the audio file was recorded."
+                 ]
                }
              },
              "type": "object"
-                 ],
-                 "description": "Number of children contained immediately within this container."
+                 ]
                }
              },
              "type": "object"
-                       ],
-                       "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
+                       ]
                      }
                    },
                    "type": "object"
-                       ],
-                       "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.",
-                       ],
-                       "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"
-                 ],
-                 "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)."
+                 ]
                },
                "creationType": {
                  "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).",
-                 ],
-                 "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted."
+                 ]
                },
                "department": {
                  "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).",
-                 ],
-                 "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)."
+                 ]
                },
                "employeeId": {
                  "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).",
-                 ],
-                 "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."
+                 ]
                },
                "id": {
                  "description": "The unique identifier for an entity. Read-only.",
-                 ],
-                 "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."
+                 ]
                },
                "lastModifiedDateTime": {
                  "anyOf": [
-                 ],
-                 "description": "The UTC date and time the file was last modified on a client."
+                 ]
                }
              },
              "type": "object"
-                 ],
-                 "description": "Number of children contained immediately within this container."
+                 ]
                },
                "view": {
                  "additionalProperties": true,
-                 ],
-                 "description": "Optional. Height of the image, in pixels. Read-only."
+                 ]
                },
                "width": {
                  "anyOf": [
-                 ],
-                 "description": "Optional. Width of the image, in pixels. Read-only."
+                 ]
                }
              },
              "type": "object"
-                       ],
-                       "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription."
+                       ]
                      }
                    },
                    "type": "object"
-                       ],
-                       "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.",
-                       ],
-                       "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"
-                 ],
-                 "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)."
+                 ]
                },
                "creationType": {
                  "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).",
-                 ],
-                 "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted."
+                 ]
                },
                "department": {
                  "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).",
-                 ],
-                 "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)."
+                 ]
                },
                "employeeId": {
                  "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).",
-                 ],
-                 "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."
+                 ]
                },
                "id": {
                  "description": "The unique identifier for an entity. Read-only.",
-                     ],
-                     "description": "Date and time the pending binary operation was queued in UTC time. Read-only."
+                     ]
                    }
                  },
                  "type": "object"
--- pinned/reply-all-mail-message
+++ observed/reply-all-mail-message
  {
    "annotations": {
      "destructiveHint": true,
-                           ],
-                           "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.",
-                     ],
-                     "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,
-                     ],
-                     "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.",
--- pinned/reply-mail-message
+++ observed/reply-mail-message
  {
    "annotations": {
      "destructiveHint": true,
-                           ],
-                           "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.",
-                     ],
-                     "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,
-                     ],
-                     "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.",
--- pinned/send-mail
+++ observed/send-mail
  {
    "annotations": {
      "destructiveHint": true,
-                       ],
-                       "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.",
-                 ],
-                 "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,
-                 ],
-                 "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.",
--- pinned/update-calendar
+++ observed/update-calendar
  {
    "annotations": {
      "destructiveHint": true,
-                         ],
-                         "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.",
-                             ],
-                             "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"
-                   ],
-                   "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,
-                   ],
-                   "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,
-                           ],
-                           "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.",
-                           ],
-                           "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": [
-                   ],
-                   "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.",
-                         ],
-                         "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.",
-                             ],
-                             "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"
-                   ],
-                   "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,
-                   ],
-                   "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,
-                           ],
-                           "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.",
-                           ],
-                           "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": [
-                   ],
-                   "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.",
--- pinned/update-calendar-event
+++ observed/update-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "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.",
-                       ],
-                       "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"
-             ],
-             "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,
-             ],
-             "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,
-                     ],
-                     "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.",
-                     ],
-                     "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": [
-             ],
-             "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.",
--- pinned/update-contact-folder
+++ observed/update-contact-folder
  {
    "annotations": {
      "destructiveHint": true,
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-             ],
-             "description": "The contact's birthday. 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"
+             ]
            },
            "businessAddress": {
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def8"
            },
            "businessHomePage": {
              "description": "The business home page of the contact.",
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def9"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def7"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def10"
              },
              "type": "array"
            },
-             ],
-             "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"
+             ]
            },
            "department": {
              "description": "The contact's department.",
-               "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"
+               "$ref": "#/$defs/def11"
              },
              "type": "array"
            },
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def8"
            },
            "homePhones": {
              "description": "The contact's home phone numbers.",
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def2"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def3"
              },
              "type": "array"
            },
-             ],
-             "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 contact. Read-only. Nullable.",
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-       "def2": {
+       "def10": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def11": {
          "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.",
+           "address": {
+             "description": "The email address of the person or entity.",
              "type": [
                "string",
                "null"
-           "state": {
-             "description": "The state.",
+           "name": {
+             "description": "The display name of the person or entity.",
              "type": [
                "string",
                "null"
+           }
+         },
+         "type": "object"
+       },
+       "def12": {
+         "type": "boolean"
+       },
+       "def13": {
+         "type": "boolean"
+       },
+       "def14": {
+         "type": "boolean"
+       },
+       "def2": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def3": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def4": {
+         "additionalProperties": true,
+         "properties": {
+           "id": {
+             "description": "The unique identifier for an entity. Read-only.",
+             "type": "string"
            },
-           "street": {
-             "description": "The street.",
+           "value": {
+             "description": "A property value.",
              "type": [
                "string",
                "null"
-       "def3": {
+       "def5": {
          "additionalProperties": true,
          "properties": {
            "id": {
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def6"
              },
              "type": "array"
            }
-       "def4": {
+       "def6": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def7": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def8": {
          "additionalProperties": true,
          "properties": {
-           "id": {
-             "description": "The unique identifier for an entity. Read-only.",
-             "type": "string"
+           "city": {
+             "description": "The city.",
+             "type": [
+               "string",
+               "null"
+             ]
            },
-           "value": {
-             "description": "A property value.",
+           "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"
+       },
+       "def9": {
+         "type": [
+           "string",
+           "null"
+         ]
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-               "$ref": "#/$defs/def3"
+               "$ref": "#/$defs/def5"
              },
              "type": "array"
            },
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def12"
+           }
+         ],
+         "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."
        },
        "contactFolderId": {
          "description": "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.",
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def13"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def14"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        }
      },
      "required": [
--- pinned/update-mail-folder
+++ observed/update-mail-folder
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "The number of immediate child mailFolders in the current mailFolder."
+             ]
            },
            "childFolders": {
              "description": "The collection of child folders in the mailFolder.",
-               "$ref": "#/$defs/def29"
+               "$ref": "#/$defs/def32"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-             ],
-             "description": "The number of items in the mailFolder."
+             ]
            },
            "unreadItemCount": {
              "anyOf": [
-             ],
-             "description": "The number of items in the mailFolder marked as unread."
+             ]
            }
          },
          "type": "object"
-                   "type": [
-                     "string",
-                     "null"
-                   ]
+                   "$ref": "#/$defs/def12"
                  },
                  "type": "array"
                },
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-                 "$ref": "#/$defs/def3"
+                 "$ref": "#/$defs/def34"
                },
                "moveToFolder": {
                  "description": "The ID of the folder that a message will be moved to.",
-                   "$ref": "#/$defs/def2"
+                   "$ref": "#/$defs/def23"
                  },
                  "type": "array"
                },
-             "additionalProperties": true,
-             "description": "[Note: Simplified from 30 properties to 25 most common ones]",
-             "properties": {
-               "bodyContains": {
-                 "$ref": "#/$defs/def4"
-               },
-               "bodyOrSubjectContains": {
-                 "$ref": "#/$defs/def5"
-               },
-               "categories": {
-                 "$ref": "#/$defs/def6"
-               },
-               "fromAddresses": {
-                 "$ref": "#/$defs/def7"
-               },
-               "hasAttachments": {
-                 "$ref": "#/$defs/def8"
-               },
-               "headerContains": {
-                 "$ref": "#/$defs/def9"
-               },
-               "importance": {
-                 "$ref": "#/$defs/def10"
-               },
-               "isApprovalRequest": {
-                 "$ref": "#/$defs/def11"
-               },
-               "isAutomaticForward": {
-                 "$ref": "#/$defs/def12"
-               },
-               "isAutomaticReply": {
-                 "$ref": "#/$defs/def13"
-               },
-               "isEncrypted": {
-                 "$ref": "#/$defs/def14"
-               },
-               "isMeetingRequest": {
-                 "$ref": "#/$defs/def15"
-               },
-               "isMeetingResponse": {
-                 "$ref": "#/$defs/def16"
-               },
-               "isNonDeliveryReport": {
-                 "$ref": "#/$defs/def17"
-               },
-               "isPermissionControlled": {
-                 "$ref": "#/$defs/def18"
-               },
-               "isReadReceipt": {
-                 "$ref": "#/$defs/def19"
-               },
-               "isSigned": {
-                 "$ref": "#/$defs/def20"
-               },
-               "isVoicemail": {
-                 "$ref": "#/$defs/def21"
-               },
-               "messageActionFlag": {
-                 "$ref": "#/$defs/def22"
-               },
-               "notSentToMe": {
-                 "$ref": "#/$defs/def23"
-               },
-               "recipientContains": {
-                 "$ref": "#/$defs/def24"
-               },
-               "senderContains": {
-                 "$ref": "#/$defs/def25"
-               },
-               "sensitivity": {
-                 "$ref": "#/$defs/def26"
-               },
-               "sentCcMe": {
-                 "$ref": "#/$defs/def27"
-               },
-               "sentOnlyToMe": {
-                 "$ref": "#/$defs/def28"
+             "allOf": [
+               {
+                 "$ref": "#/$defs/def31"
                }
-             },
-             "type": "object"
+             ],
+             "description": "[Note: Simplified from 30 properties to 25 most common ones]"
            },
            "displayName": {
              "description": "The display name of the rule.",
-             "additionalProperties": true,
-             "description": "[Note: Simplified from 30 properties to 25 most common ones]",
-             "properties": {
-               "bodyContains": {
-                 "$ref": "#/$defs/def4"
-               },
-               "bodyOrSubjectContains": {
-                 "$ref": "#/$defs/def5"
-               },
-               "categories": {
-                 "$ref": "#/$defs/def6"
-               },
-               "fromAddresses": {
-                 "$ref": "#/$defs/def7"
-               },
-               "hasAttachments": {
-                 "$ref": "#/$defs/def8"
-               },
-               "headerContains": {
-                 "$ref": "#/$defs/def9"
-               },
-               "importance": {
-                 "$ref": "#/$defs/def10"
-               },
-               "isApprovalRequest": {
-                 "$ref": "#/$defs/def11"
-               },
-               "isAutomaticForward": {
-                 "$ref": "#/$defs/def12"
-               },
-               "isAutomaticReply": {
-                 "$ref": "#/$defs/def13"
-               },
-               "isEncrypted": {
-                 "$ref": "#/$defs/def14"
-               },
-               "isMeetingRequest": {
-                 "$ref": "#/$defs/def15"
-               },
-               "isMeetingResponse": {
-                 "$ref": "#/$defs/def16"
-               },
-               "isNonDeliveryReport": {
-                 "$ref": "#/$defs/def17"
-               },
-               "isPermissionControlled": {
-                 "$ref": "#/$defs/def18"
-               },
-               "isReadReceipt": {
-                 "$ref": "#/$defs/def19"
-               },
-               "isSigned": {
-                 "$ref": "#/$defs/def20"
-               },
-               "isVoicemail": {
-                 "$ref": "#/$defs/def21"
-               },
-               "messageActionFlag": {
-                 "$ref": "#/$defs/def22"
-               },
-               "notSentToMe": {
-                 "$ref": "#/$defs/def23"
-               },
-               "recipientContains": {
-                 "$ref": "#/$defs/def24"
-               },
-               "senderContains": {
-                 "$ref": "#/$defs/def25"
-               },
-               "sensitivity": {
-                 "$ref": "#/$defs/def26"
-               },
-               "sentCcMe": {
-                 "$ref": "#/$defs/def27"
-               },
-               "sentOnlyToMe": {
-                 "$ref": "#/$defs/def28"
+             "allOf": [
+               {
+                 "$ref": "#/$defs/def31"
                }
-             },
-             "type": "object"
+             ],
+             "description": "[Note: Simplified from 30 properties to 25 most common ones]"
            },
            "hasError": {
              "description": "Indicates whether the rule is in an error condition. Read-only.",
-             ],
-             "description": "Indicates the order in which the rule is executed, among other rules."
+             ]
            }
          },
          "type": "object"
-         "$ref": "#/$defs/def3"
+         "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 approval request in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply.",
          "type": [
-           "boolean",
+           "string",
            "null"
          ]
        },
-         "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.",
+         "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.",
          "type": [
            "boolean",
            "null"
-         "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"
-       },
-       "def20": {
-         "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.",
          "type": [
-           "boolean",
+           "string",
            "null"
          ]
        },
-       "def21": {
+       "def20": {
          "description": "Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply.",
          "type": [
            "boolean",
-       "def22": {
+       "def21": {
          "enum": [
            "any",
            "call",
-       "def23": {
+       "def22": {
          "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",
+       "def23": {
+         "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"
+       },
        "def24": {
          "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"
-           ]
+           "$ref": "#/$defs/def25"
          },
          "type": "array"
        },
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def26": {
          "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"
-           ]
+           "$ref": "#/$defs/def27"
          },
          "type": "array"
        },
-       "def26": {
-         "enum": [
-           "normal",
-           "personal",
-           "private",
-           "confidential"
-         ],
-         "type": "string"
-       },
        "def27": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def28": {
          "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",
-       "def28": {
+       "def29": {
          "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",
-       "def29": {
+       "def3": {
+         "description": "Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply.",
+         "items": {
+           "$ref": "#/$defs/def4"
+         },
+         "type": "array"
+       },
+       "def30": {},
+       "def31": {
+         "additionalProperties": {
+           "$ref": "#/$defs/def30"
+         },
+         "properties": {
+           "bodyContains": {
+             "$ref": "#/$defs/def43"
+           },
+           "bodyOrSubjectContains": {
+             "$ref": "#/$defs/def45"
+           },
+           "categories": {
+             "$ref": "#/$defs/def3"
+           },
+           "fromAddresses": {
+             "$ref": "#/$defs/def5"
+           },
+           "hasAttachments": {
+             "$ref": "#/$defs/def6"
+           },
+           "headerContains": {
+             "$ref": "#/$defs/def7"
+           },
+           "importance": {
+             "$ref": "#/$defs/def42"
+           },
+           "isApprovalRequest": {
+             "$ref": "#/$defs/def9"
+           },
+           "isAutomaticForward": {
+             "$ref": "#/$defs/def10"
+           },
+           "isAutomaticReply": {
+             "$ref": "#/$defs/def11"
+           },
+           "isEncrypted": {
+             "$ref": "#/$defs/def13"
+           },
+           "isMeetingRequest": {
+             "$ref": "#/$defs/def14"
+           },
+           "isMeetingResponse": {
+             "$ref": "#/$defs/def15"
+           },
+           "isNonDeliveryReport": {
+             "$ref": "#/$defs/def16"
+           },
+           "isPermissionControlled": {
+             "$ref": "#/$defs/def17"
+           },
+           "isReadReceipt": {
+             "$ref": "#/$defs/def18"
+           },
+           "isSigned": {
+             "$ref": "#/$defs/def19"
+           },
+           "isVoicemail": {
+             "$ref": "#/$defs/def20"
+           },
+           "messageActionFlag": {
+             "$ref": "#/$defs/def21"
+           },
+           "notSentToMe": {
+             "$ref": "#/$defs/def22"
+           },
+           "recipientContains": {
+             "$ref": "#/$defs/def24"
+           },
+           "senderContains": {
+             "$ref": "#/$defs/def26"
+           },
+           "sensitivity": {
+             "$ref": "#/$defs/def41"
+           },
+           "sentCcMe": {
+             "$ref": "#/$defs/def28"
+           },
+           "sentOnlyToMe": {
+             "$ref": "#/$defs/def29"
+           }
+         },
+         "type": "object"
+       },
+       "def32": {
          "additionalProperties": true,
          "properties": {
            "attachments": {
-               "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"
+               "$ref": "#/$defs/def33"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            },
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def38"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            },
-             ],
-             "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,
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                },
                "dueDateTime": {
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                },
                "flagStatus": {
                  "enum": [
-                 "$ref": "#/$defs/def30"
+                 "$ref": "#/$defs/def39"
                }
              },
              "type": "object"
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def23"
            },
            "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'>.",
-             "$ref": "#/$defs/def3"
+             "$ref": "#/$defs/def34"
            },
            "inferenceClassification": {
              "enum": [
-               "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"
+               "$ref": "#/$defs/def40"
              },
              "type": "array"
            },
-             ],
-             "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.",
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def2"
+               "$ref": "#/$defs/def23"
              },
              "type": "array"
            }
-       "def3": {
+       "def33": {
+         "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"
+               }
+             ]
+           },
+           "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"
+       },
+       "def34": {
          "enum": [
            "low",
            "normal",
-       "def30": {
+       "def35": {
          "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).",
+           "id": {
+             "description": "The unique identifier for an entity. Read-only.",
              "type": "string"
            },
-           "timeZone": {
-             "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
+           "value": {
+             "description": "A property value.",
              "type": [
                "string",
                "null"
-       "def31": {
+       "def36": {
          "additionalProperties": true,
          "properties": {
            "id": {
-               "type": [
-                 "string",
-                 "null"
-               ]
+               "$ref": "#/$defs/def37"
              },
              "type": "array"
            }
-       "def32": {
+       "def37": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def38": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def39": {
          "additionalProperties": true,
          "properties": {
-           "id": {
-             "description": "The unique identifier for an entity. Read-only.",
+           "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"
            },
-           "value": {
-             "description": "A property value.",
+           "timeZone": {
+             "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.",
              "type": [
                "string",
                "null"
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def40": {
+         "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"
+       },
+       "def41": {
+         "enum": [
+           "normal",
+           "personal",
+           "private",
+           "confidential"
+         ],
+         "type": "string"
+       },
+       "def42": {
+         "$ref": "#/$defs/def34"
+       },
+       "def43": {
          "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"
-           ]
+           "$ref": "#/$defs/def44"
          },
          "type": "array"
        },
-       "def5": {
+       "def44": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def45": {
          "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"
-           ]
+           "$ref": "#/$defs/def2"
          },
          "type": "array"
        },
-       "def6": {
-         "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"
+       "def46": {
+         "type": "boolean"
        },
-       "def7": {
+       "def47": {
+         "type": "boolean"
+       },
+       "def48": {
+         "type": "boolean"
+       },
+       "def5": {
          "description": "Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply.",
          "items": {
-           "$ref": "#/$defs/def2"
+           "$ref": "#/$defs/def23"
          },
          "type": "array"
        },
-       "def8": {
+       "def6": {
          "description": "Indicates whether an incoming message must have attachments in order for the condition or exception to apply.",
          "type": [
            "boolean",
-       "def9": {
+       "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"
-           ]
+           "$ref": "#/$defs/def8"
          },
          "type": "array"
+       },
+       "def8": {
+         "type": [
+           "string",
+           "null"
+         ]
+       },
+       "def9": {
+         "description": "Indicates whether an incoming message must be an approval request in order for the condition or exception to apply.",
+         "type": [
+           "boolean",
+           "null"
+         ]
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-             ],
-             "description": "The number of immediate child mailFolders in the current mailFolder."
+             ]
            },
            "childFolders": {
              "description": "The collection of child folders in the mailFolder.",
-               "$ref": "#/$defs/def29"
+               "$ref": "#/$defs/def32"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def31"
+               "$ref": "#/$defs/def36"
              },
              "type": "array"
            },
-               "$ref": "#/$defs/def32"
+               "$ref": "#/$defs/def35"
              },
              "type": "array"
            },
-             ],
-             "description": "The number of items in the mailFolder."
+             ]
            },
            "unreadItemCount": {
              "anyOf": [
-             ],
-             "description": "The number of items in the mailFolder marked as unread."
+             ]
            }
          },
          "type": "object"
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def46"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def47"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def48"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        },
        "mailFolderId": {
          "description": "Value 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.",
--- pinned/update-mail-message
+++ observed/update-mail-message
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "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.",
-             ],
-             "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,
-             ],
-             "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.",
--- pinned/update-mail-rule
+++ observed/update-mail-rule
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "Indicates the order in which the rule is executed, among other rules."
+             ]
            }
          },
          "type": "object"
--- pinned/update-mailbox-settings
+++ observed/update-mailbox-settings
  {
    "annotations": {
      "destructiveHint": true,
-                 ],
-                 "description": "The time of the day that the user stops working."
+                 ]
                },
                "startTime": {
                  "anyOf": [
-                 ],
-                 "description": "The time of the day that the user starts working."
+                 ]
                },
                "timeZone": {
                  "additionalProperties": true,
--- pinned/update-outlook-contact
+++ observed/update-outlook-contact
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "The contact's birthday. 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"
+             ]
            },
            "businessAddress": {
              "additionalProperties": true,
-             ],
-             "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"
+             ]
            },
            "department": {
              "description": "The contact's department.",
-             ],
-             "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 contact. Read-only. Nullable.",
--- pinned/update-planner-bucket
+++ observed/update-planner-bucket
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "description": "Number of checklist items with value set to false, representing incomplete items."
+                   ]
                  },
                  "appliedCategories": {
                    "additionalProperties": true,
-                   ],
-                   "description": "Number of checklist items that are present on the task."
+                   ]
                  },
                  "completedBy": {
                    "additionalProperties": true,
-                   ],
-                   "description": "Read-only. Date and time at which the 'percentComplete' of the task is set to '100'. 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"
+                   ]
                  },
                  "conversationThreadId": {
                    "description": "Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group.",
-                   ],
-                   "description": "Read-only. Date and time at which the task is created. 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"
+                   ]
                  },
                  "details": {
                    "additionalProperties": true,
-                   ],
-                   "description": "Date and time at which the task is due. 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"
+                   ]
                  },
                  "hasDescription": {
                    "description": "Read-only. Value is true if the details object of the task has a nonempty description and false otherwise.",
-                   ],
-                   "description": "Percentage of task completion. When set to 100, the task is considered completed."
+                   ]
                  },
                  "planId": {
                    "description": "Plan ID to which the task belongs.",
-                   ],
-                   "description": "Priority of the task. The valid range of values is between 0 and 10, with the increasing value being lower priority (0 has the highest priority and 10 has the lowest priority).  Currently, Planner interprets values 0 and 1 as 'urgent', 2, 3 and 4 as 'important', 5, 6, and 7 as 'medium', and 8, 9, and 10 as 'low'.  Additionally, Planner sets the value 1 for 'urgent', 3 for 'important', 5 for 'medium', and 9 for 'low'."
+                   ]
                  },
                  "referenceCount": {
                    "anyOf": [
-                   ],
-                   "description": "Number of external references that exist on the task."
+                   ]
                  },
                  "startDateTime": {
                    "anyOf": [
-                   ],
-                   "description": "Date and time at which the task starts. 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"
+                   ]
                  },
                  "title": {
                    "description": "Title of the task.",
--- pinned/update-planner-plan
+++ observed/update-planner-plan
  {
    "annotations": {
      "destructiveHint": true,
+           "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": {
+           "id": {
+             "description": "The unique identifier for an entity. Read-only.",
+             "type": "string"
+           },
+           "name": {
+             "description": "Name of the bucket.",
+             "type": "string"
+           },
+           "orderHint": {
+             "description": "Hint used to order items of this type in a list view. For details about the supported format, see Using order hints in Planner.",
+             "type": [
+               "string",
+               "null"
+             ]
+           },
+           "planId": {
+             "description": "Plan ID to which the bucket belongs.",
+             "type": [
+               "string",
+               "null"
+             ]
+           },
+           "tasks": {
+             "description": "Read-only. Nullable. The collection of tasks in the bucket.",
+             "items": {
+               "$ref": "#/$defs/def3"
+             },
+             "type": "array"
+           }
+         },
+         "type": "object"
+       },
+       "def3": {
+         "additionalProperties": true,
+         "properties": {
            "activeChecklistItemCount": {
              "anyOf": [
                {
-             ],
-             "description": "Number of checklist items with value set to false, representing incomplete items."
+             ]
            },
            "appliedCategories": {
              "additionalProperties": true,
-             ],
-             "description": "Number of checklist items that are present on the task."
+             ]
            },
            "completedBy": {
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def0"
            },
            "completedDateTime": {
              "anyOf": [
-             ],
-             "description": "Read-only. Date and time at which the 'percentComplete' of the task is set to '100'. 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"
+             ]
            },
            "conversationThreadId": {
              "description": "Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group.",
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def0"
            },
            "createdDateTime": {
              "anyOf": [
-             ],
-             "description": "Read-only. Date and time at which the task is created. 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"
+             ]
            },
            "details": {
              "additionalProperties": true,
-                 "$ref": "#/$defs/def1"
+                 "$ref": "#/$defs/def4"
                },
                "references": {
                  "additionalProperties": true,
-             ],
-             "description": "Date and time at which the task is due. 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"
+             ]
            },
            "hasDescription": {
              "description": "Read-only. Value is true if the details object of the task has a nonempty description and false otherwise.",
-             ],
-             "description": "Percentage of task completion. When set to 100, the task is considered completed."
+             ]
            },
            "planId": {
              "description": "Plan ID to which the task belongs.",
-             "$ref": "#/$defs/def1"
+             "$ref": "#/$defs/def4"
            },
            "priority": {
              "anyOf": [
-             ],
-             "description": "Priority of the task. The valid range of values is between 0 and 10, with the increasing value being lower priority (0 has the highest priority and 10 has the lowest priority).  Currently, Planner interprets values 0 and 1 as 'urgent', 2, 3 and 4 as 'important', 5, 6, and 7 as 'medium', and 8, 9, and 10 as 'low'.  Additionally, Planner sets the value 1 for 'urgent', 3 for 'important', 5 for 'medium', and 9 for 'low'."
+             ]
            },
            "referenceCount": {
              "anyOf": [
-             ],
-             "description": "Number of external references that exist on the task."
+             ]
            },
            "startDateTime": {
              "anyOf": [
-             ],
-             "description": "Date and time at which the task starts. 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"
+             ]
            },
            "title": {
              "description": "Title of the task.",
-       "def1": {
+       "def4": {
          "enum": [
            "automatic",
            "noPreview",
-       "def2": {
-         "additionalProperties": true,
-         "properties": {
-           "application": {
-             "$ref": "#/$defs/def3"
-           },
-           "device": {
-             "$ref": "#/$defs/def3"
-           },
-           "user": {
-             "$ref": "#/$defs/def3"
-           }
-         },
-         "type": "object"
+       "def5": {
+         "type": "boolean"
        },
-       "def3": {
-         "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"
+       "def6": {
+         "type": "boolean"
+       },
+       "def7": {
+         "type": "boolean"
        }
      },
      "$schema": "http://json-schema.org/draft-07/schema#",
-               "additionalProperties": true,
-               "properties": {
-                 "id": {
-                   "description": "The unique identifier for an entity. Read-only.",
-                   "type": "string"
-                 },
-                 "name": {
-                   "description": "Name of the bucket.",
-                   "type": "string"
-                 },
-                 "orderHint": {
-                   "description": "Hint used to order items of this type in a list view. For details about the supported format, see Using order hints in Planner.",
-                   "type": [
-                     "string",
-                     "null"
-                   ]
-                 },
-                 "planId": {
-                   "description": "Plan ID to which the bucket belongs.",
-                   "type": [
-                     "string",
-                     "null"
-                   ]
-                 },
-                 "tasks": {
-                   "description": "Read-only. Nullable. The collection of tasks in the bucket.",
-                   "items": {
-                     "$ref": "#/$defs/def0"
-                   },
-                   "type": "array"
-                 }
-               },
-               "type": "object"
+               "$ref": "#/$defs/def2"
              },
              "type": "array"
            },
-             "$ref": "#/$defs/def2"
+             "$ref": "#/$defs/def0"
            },
            "createdDateTime": {
              "anyOf": [
-             ],
-             "description": "Read-only. Date and time at which the plan is created. 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"
+             ]
            },
            "details": {
              "additionalProperties": true,
-               "$ref": "#/$defs/def0"
+               "$ref": "#/$defs/def3"
              },
              "type": "array"
            },
-         "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"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def5"
+           }
+         ],
+         "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."
        },
        "excludeResponse": {
-         "description": "Exclude the full response body and only return success or failure indication",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def6"
+           }
+         ],
+         "description": "Exclude the full response body and only return success or failure indication"
        },
        "includeHeaders": {
-         "description": "Include response headers (including ETag) in the response metadata",
-         "type": "boolean"
+         "allOf": [
+           {
+             "$ref": "#/$defs/def7"
+           }
+         ],
+         "description": "Include response headers (including ETag) in the response metadata"
        },
        "plannerPlanId": {
          "description": "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.",
--- pinned/update-planner-task
+++ observed/update-planner-task
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "Number of checklist items with value set to false, representing incomplete items."
+             ]
            },
            "appliedCategories": {
              "additionalProperties": true,
-             ],
-             "description": "Number of checklist items that are present on the task."
+             ]
            },
            "completedBy": {
              "additionalProperties": true,
-             ],
-             "description": "Read-only. Date and time at which the 'percentComplete' of the task is set to '100'. 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"
+             ]
            },
            "conversationThreadId": {
              "description": "Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group.",
-             ],
-             "description": "Read-only. Date and time at which the task is created. 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"
+             ]
            },
            "details": {
              "additionalProperties": true,
-             ],
-             "description": "Date and time at which the task is due. 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"
+             ]
            },
            "hasDescription": {
              "description": "Read-only. Value is true if the details object of the task has a nonempty description and false otherwise.",
-             ],
-             "description": "Percentage of task completion. When set to 100, the task is considered completed."
+             ]
            },
            "planId": {
              "description": "Plan ID to which the task belongs.",
-             ],
-             "description": "Priority of the task. The valid range of values is between 0 and 10, with the increasing value being lower priority (0 has the highest priority and 10 has the lowest priority).  Currently, Planner interprets values 0 and 1 as 'urgent', 2, 3 and 4 as 'important', 5, 6, and 7 as 'medium', and 8, 9, and 10 as 'low'.  Additionally, Planner sets the value 1 for 'urgent', 3 for 'important', 5 for 'medium', and 9 for 'low'."
+             ]
            },
            "referenceCount": {
              "anyOf": [
-             ],
-             "description": "Number of external references that exist on the task."
+             ]
            },
            "startDateTime": {
              "anyOf": [
-             ],
-             "description": "Date and time at which the task starts. 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"
+             ]
            },
            "title": {
              "description": "Title of the task.",
--- pinned/update-specific-calendar-event
+++ observed/update-specific-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "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.",
-                       ],
-                       "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"
-             ],
-             "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,
-             ],
-             "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,
-                     ],
-                     "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.",
-                     ],
-                     "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": [
-             ],
-             "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.",
--- pinned/update-todo-checklist-item
+++ observed/update-todo-checklist-item
  {
    "annotations": {
      "destructiveHint": true,
-             ],
-             "description": "The date and time when the checklistItem was finished."
+             ]
            },
            "createdDateTime": {
              "description": "The date and time when the checklistItem was created.",
--- pinned/update-todo-task
+++ observed/update-todo-task
  {
    "annotations": {
      "destructiveHint": true,
-                   ],
-                   "description": "The date and time in UTC when the upload session will expire. The complete file must be uploaded before this expiration time is reached."
+                   ]
                  },
                  "id": {
                    "description": "The unique identifier for an entity. Read-only.",
-                   ],
-                   "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 display name of the attachment. This doesn't need to be the actual file name.",
-                   ],
-                   "description": "The date and time when the checklistItem was finished."
+                   ]
                  },
                  "createdDateTime": {
                    "description": "The date and time when the checklistItem was created.",
-                     ],
-                     "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.",
-                     ],
-                     "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": [
--- pinned/update-todo-task-list
+++ observed/update-todo-task-list
  {
    "annotations": {
      "destructiveHint": true,
-                         ],
-                         "description": "The date and time in UTC when the upload session will expire. The complete file must be uploaded before this expiration time is reached."
+                         ]
                        },
                        "id": {
                          "description": "The unique identifier for an entity. Read-only.",
-                         ],
-                         "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 display name of the attachment. This doesn't need to be the actual file name.",
-                         ],
-                         "description": "The date and time when the checklistItem was finished."
+                         ]
                        },
                        "createdDateTime": {
                          "description": "The date and time when the checklistItem was created.",
-                           ],
-                           "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.",
-                           ],
-                           "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": [

Changed 2026-10-28 13:13 UTC

1 description rewritten, 2 tools added.

--- pinned/list-todo-task-lists
+++ observed/list-todo-task-lists
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Get a list of the todoTaskList objects and their properties.\n\n💡 TIP: Lists all To Do task lists. Returns todoTaskList-id needed for all task operations. The default list is typically called 'Tasks'.",
+   "description": "Get a list of the todoTaskList objects and their properties.\n\n💡 TIP: If it returns only 'Flagged Emails', use list-todo-task-lists-delta instead.",
    "execution": {
      "taskSupport": "forbidden"
    },

+ tool added: list-todo-task-lists-delta

+ tool added: update-onenote-page-content

Changed 2026-10-26 13:14 UTC

1 description rewritten.

--- pinned/get-upload-url
+++ observed/get-upload-url
  {
    "annotations": {
      "openWorldHint": true,
-   "description": "Mint a short-lived, single-use URL that this server serves for uploading a file as an attachment to a draft message or an event, so the bytes go straight from the caller to Microsoft Graph instead of passing as base64 through the agent context. target is the attachments collection of the item: /me/messages/{message-id}/attachments (a draft; create it first) or /me/events/{event-id}/attachments. PUT the raw file bytes to the returned uploadUrl with a Content-Length (e.g. curl -T file \"<uploadUrl>\"); the response confirms the attachment. Files under 3 MB are attached directly, larger ones (up to 150 MB) through a Graph upload session. Requires --enable-attachment-urls. Returns { uploadUrl, method, expiresAt, singleUse, maxBytes }.",
+   "description": "Mint a short-lived, single-use URL that this server serves for uploading a file as an attachment to a draft message or an event, so the bytes go straight from the caller to Microsoft Graph instead of passing as base64 through the agent context. target is the attachments collection of the item: /me/messages/{message-id}/attachments (a draft; create it first) or /me/events/{event-id}/attachments. PUT the raw file bytes to the returned uploadUrl with a Content-Length (e.g. curl -T file \"<uploadUrl>\"); the response confirms the attachment. Files under 3 MB are attached directly, larger ones (up to 150 MB) through a Graph upload session. Pass contentId to attach inline, e.g. a signature picture the HTML body shows with <img src=\"cid:<contentId>\">. Requires --enable-attachment-urls. Returns { uploadUrl, method, expiresAt, singleUse, maxBytes }.",
    "execution": {
      "taskSupport": "forbidden"
    },
+       "contentId": {
+         "description": "Attach inline under this Content-ID instead of as a regular attachment, so the HTML body can show the file with <img src=\"cid:<contentId>\">, e.g. a picture in an email signature. Letters, digits, \".\", \"_\", \"@\", \"-\".",
+         "type": "string"
+       },
        "contentType": {
          "description": "MIME type of the file, e.g. application/pdf. Defaults to application/octet-stream.",
          "type": "string"

Changed 2026-10-23 11:57 UTC

3 tools added.

+ tool added: create-planner-plan

+ tool added: list-group-planner-plans

+ tool added: update-planner-plan

Changed 2026-10-18 11:10 UTC

4 descriptions rewritten, 3 schema or annotation changes with the description left byte-identical.

--- pinned/get-todo-task
+++ observed/get-todo-task
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Read the properties and relationships of a todoTask object.\n\n💡 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.",
+   "description": "Read the properties and relationships of a todoTask object.\n\n💡 TIP: Returns a single To Do task. Use $expand=linkedResources to include linked email/resource. Returns body content (HTML format), checklist items, and linked resources.",
    "execution": {
      "taskSupport": "forbidden"
    },
-         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
+         "description": "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\". Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
-         "description": "Follow @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.",
+         "description": "Follow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export.",
          "type": "boolean"
        },
        "includeHeaders": {
-       "select": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
-       },
        "todoTaskId": {
          "description": "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.",
          "type": "string"
--- pinned/list-calendar-events-delta
+++ observed/list-calendar-events-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Follow @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.",
+         "description": "Follow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export.",
          "type": "boolean"
        },
        "includeHeaders": {
--- pinned/list-calendar-view-delta
+++ observed/list-calendar-view-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Follow @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.",
+         "description": "Follow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export.",
          "type": "boolean"
        },
        "includeHeaders": {
--- pinned/list-todo-checklist-items
+++ observed/list-todo-checklist-items
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Get the checklistItem resources associated to a todoTask from the checklistItems navigation property.\n\n💡 TIP: Lists the steps (checklist items) of a To Do task. Each item has id, displayName, isChecked, checkedDateTime, and createdDateTime. Graph supports no OData query parameters on this endpoint, so do not pass select, filter, orderby, or top. Requires todoTaskListId from list-todo-task-lists and todoTaskId from list-todo-tasks.",
+   "description": "Get the checklistItem resources associated to a todoTask from the checklistItems navigation property.\n\n💡 TIP: Lists the steps (checklist items) of a To Do task. Each item has id, displayName, isChecked, checkedDateTime, and createdDateTime. Requires todoTaskListId from list-todo-task-lists and todoTaskId from list-todo-tasks.",
    "execution": {
      "taskSupport": "forbidden"
    },
-       "count": {
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
-         "type": "boolean"
-       },
        "excludeResponse": {
          "description": "Exclude the full response body and only return success or failure indication",
          "type": "boolean"
-       "expand": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
-       },
        "fetchAllPages": {
-         "description": "Follow @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.",
+         "description": "Follow @odata.nextLink and merge up to 100 pages into one response. Can return enormous payloads—only when the user explicitly needs a full export.",
          "type": "boolean"
        },
-       "filter": {
-         "description": "OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.",
-         "type": "string"
-       },
        "includeHeaders": {
          "description": "Include response headers (including ETag) in the response metadata",
          "type": "boolean"
-       "orderby": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Sort expression, e.g. receivedDateTime desc"
-       },
-       "search": {
-         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
-         "type": "string"
-       },
-       "select": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
-       },
-       "skip": {
-         "description": "Items to skip for pagination. Not supported with $search.",
-         "minimum": 0,
-         "type": "integer"
-       },
-       "skiptoken": {
-         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
-         "type": "string"
-       },
        "todoTaskId": {
          "description": "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.",
          "type": "string"
-       },
-       "top": {
-         "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.",
-         "minimum": 0,
-         "type": "integer"
        }
      },
      "required": [
--- pinned/list-todo-linked-resources
+++ observed/list-todo-linked-resources
  {
    "annotations": {
      "destructiveHint": false,
-       "count": {
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
-         "type": "boolean"
-       },
        "excludeResponse": {
          "description": "Exclude the full response body and only return success or failure indication",
          "type": "boolean"
-       "expand": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
-       },
        "fetchAllPages": {
-         "description": "Follow @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.",
+         "description": "Follow @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.",
          "type": "boolean"
        },
        "filter": {
-         "description": "OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.",
+         "description": "OData filter expression.",
          "type": "string"
        },
        "includeHeaders": {
-       "search": {
-         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
-         "type": "string"
-       },
-       "select": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
-       },
        "skip": {
-         "description": "Items to skip for pagination. Not supported with $search.",
+         "description": "Items to skip for pagination.",
          "minimum": 0,
          "type": "integer"
        },
-         "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.",
+         "description": "Page size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. For more rows, use @odata.nextLink from the response instead of a very large $top.",
          "minimum": 0,
          "type": "integer"
        }
--- pinned/list-todo-task-lists
+++ observed/list-todo-task-lists
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Get a list of the todoTaskList objects and their properties.\n\n💡 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.",
+   "description": "Get a list of the todoTaskList objects and their properties.\n\n💡 TIP: Lists all To Do task lists. Returns todoTaskList-id needed for all task operations. The default list is typically called 'Tasks'.",
    "execution": {
      "taskSupport": "forbidden"
    },
-       "count": {
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
-         "type": "boolean"
-       },
        "excludeResponse": {
          "description": "Exclude the full response body and only return success or failure indication",
          "type": "boolean"
-       "expand": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
-       },
        "fetchAllPages": {
-         "description": "Follow @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.",
+         "description": "Follow @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.",
          "type": "boolean"
        },
        "filter": {
-         "description": "OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.",
+         "description": "OData filter expression.",
          "type": "string"
        },
        "includeHeaders": {
-       "orderby": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Sort expression, e.g. receivedDateTime desc"
-       },
-       "search": {
-         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
-         "type": "string"
-       },
-       "select": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
-       },
        "skip": {
-         "description": "Items to skip for pagination. Not supported with $search.",
+         "description": "Items to skip for pagination.",
          "minimum": 0,
          "type": "integer"
        },
-         "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.",
+         "description": "Page size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. For more rows, use @odata.nextLink from the response instead of a very large $top.",
          "minimum": 0,
          "type": "integer"
        }
--- pinned/list-todo-tasks
+++ observed/list-todo-tasks
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Get the todoTask resources from the tasks navigation property of a specified todoTaskList.\n\n💡 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'.",
+   "description": "Get the todoTask resources from the tasks navigation property of a specified todoTaskList.\n\n💡 TIP: Lists tasks in a To Do list. Requires todoTaskList-id — use list-todo-task-lists to find it. 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'. $orderby works on createdDateTime, lastModifiedDateTime, importance, status and reminderDateTime/dateTime, not on title or isReminderOn. A $filter on isReminderOn can also return 400; filter it client-side.",
    "execution": {
      "taskSupport": "forbidden"
    },
-       "count": {
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
-         "type": "boolean"
-       },
        "excludeResponse": {
          "description": "Exclude the full response body and only return success or failure indication",
          "type": "boolean"
-         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
+         "description": "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\". Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
-         "description": "Follow @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.",
+         "description": "Follow @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.",
          "type": "boolean"
        },
        "filter": {
-         "description": "OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.",
+         "description": "OData filter expression.",
          "type": "string"
        },
        "includeHeaders": {
-       "search": {
-         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
-         "type": "string"
-       },
-       "select": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
-       },
        "skip": {
-         "description": "Items to skip for pagination. Not supported with $search.",
+         "description": "Items to skip for pagination.",
          "minimum": 0,
          "type": "integer"
        },
-         "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.",
+         "description": "Page size (Graph $top). Start small (e.g. 5–15) so responses fit the model context; raise only if needed. For more rows, use @odata.nextLink from the response instead of a very large $top.",
          "minimum": 0,
          "type": "integer"
        }

Changed 2026-10-17 10:58 UTC

1 description rewritten, 1 schema or annotation change with the description left byte-identical, 1 tool added.

--- pinned/list-calendar-events-delta
+++ observed/list-calendar-events-delta
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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.\n\n💡 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.",
+   "description": "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.\n\n💡 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. 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.",
    "execution": {
      "taskSupport": "forbidden"
    },
-       "count": {
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
-         "type": "boolean"
-       },
-       "endDateTime": {
-         "description": "The 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",
-         "type": "string"
-       },
        "excludeResponse": {
          "description": "Exclude the full response body and only return success or failure indication",
          "type": "boolean"
-       "expand": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
-       },
        "fetchAllPages": {
          "description": "Follow @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.",
          "type": "boolean"
-       "filter": {
-         "description": "OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.",
-         "type": "string"
-       },
        "includeHeaders": {
          "description": "Include response headers (including ETag) in the response metadata",
          "type": "boolean"
-       "orderby": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Sort expression, e.g. receivedDateTime desc"
-       },
-       "search": {
-         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
-         "type": "string"
-       },
-       "select": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
-       },
-       "skip": {
-         "description": "Items to skip for pagination. Not supported with $search.",
-         "minimum": 0,
-         "type": "integer"
-       },
        "skiptoken": {
          "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
          "type": "string"
-       "startDateTime",
-       "endDateTime"
+       "startDateTime"
      ],
      "type": "object"
    },
--- pinned/list-calendar-view-delta
+++ observed/list-calendar-view-delta
  {
    "annotations": {
      "destructiveHint": false,
-       "count": {
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
-         "type": "boolean"
-       },
        "endDateTime": {
          "description": "The 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",
          "type": "string"
-       "expand": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
-       },
        "fetchAllPages": {
          "description": "Follow @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.",
          "type": "boolean"
-       "filter": {
-         "description": "OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search.",
-         "type": "string"
-       },
        "includeHeaders": {
          "description": "Include response headers (including ETag) in the response metadata",
          "type": "boolean"
-       "orderby": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Sort expression, e.g. receivedDateTime desc"
-       },
-       "search": {
-         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
-         "type": "string"
-       },
-       "select": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "items": {
-               "type": "string"
-             },
-             "type": "array"
-           }
-         ],
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
-       },
-       "skip": {
-         "description": "Items to skip for pagination. Not supported with $search.",
-         "minimum": 0,
-         "type": "integer"
-       },
        "skiptoken": {
          "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
          "type": "string"

+ tool added: read-mail-text

Changed 2026-10-14 12:08 UTC

3 descriptions rewritten, 1 schema or annotation change with the description left byte-identical, 5 tools added.

+ tool added: create-todo-checklist-item

--- pinned/create-todo-task
+++ observed/create-todo-task
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "Create a new task object in a specified todoTaskList.\n\n💡 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.",
+   "description": "Create a new task object in a specified todoTaskList.\n\n💡 TIP: Creates a new task in a Microsoft To Do list. Body: { title: \"...\" }; optional dueDateTime, reminderDateTime, importance, body (notes), recurrence, categories, and checklistItems: [{ displayName: \"...\", isChecked: false }] to create the task's steps inline (isChecked is optional). Requires todoTaskListId from list-todo-task-lists. To change steps after the task exists, use the *-todo-checklist-item tools.",
    "execution": {
      "taskSupport": "forbidden"
    },

+ tool added: delete-todo-checklist-item

--- pinned/download-bytes
+++ observed/download-bytes
  {
    "annotations": {
      "openWorldHint": true,
-   "description": "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.",
+   "description": "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. With the server's blob output on, the bytes come back as a file resource instead (capped by the server's download limit); pass fileName to name it.",
    "execution": {
      "taskSupport": "forbidden"
    },
+       "fileName": {
+         "description": "Name of the file, used as the last segment of the returned resource URI when the server runs with blob output. Optional.",
+         "type": "string"
+       },
        "target": {
          "description": "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.",
          "type": "string"

+ tool added: get-mail-attachment-content

--- pinned/get-mail-message-mime
+++ observed/get-mail-message-mime
  {
    "annotations": {
      "destructiveHint": false,
+       "fileName": {
+         "description": "Name of the file, used as the last segment of the returned resource URI when the server runs with blob output. Optional.",
+         "type": "string"
+       },
        "includeHeaders": {
          "description": "Include response headers (including ETag) in the response metadata",
          "type": "boolean"

+ tool added: list-todo-checklist-items

+ tool added: update-todo-checklist-item

--- pinned/update-todo-task
+++ observed/update-todo-task
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "Update the properties of a todoTask object.\n\n💡 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.",
+   "description": "Update the properties of a todoTask object.\n\n💡 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. Steps (checklistItems) can't be changed here: Graph rejects checklistItems in a PATCH on the task with 400. Use create-todo-checklist-item, update-todo-checklist-item, or delete-todo-checklist-item instead.",
    "execution": {
      "taskSupport": "forbidden"
    },

Changed 2026-10-12 15:40 UTC

64 schema or annotation changes with the description left byte-identical, 2 tools added.

+ tool added: add-calendar-event-attachment

+ tool added: create-calendar-event-attachment-upload-session

--- pinned/get-calendar-event
+++ observed/get-calendar-event
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
--- pinned/get-calendar-view
+++ observed/get-calendar-view
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "endDateTime": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
--- pinned/get-current-user
+++ observed/get-current-user
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-drive-delta
+++ observed/get-drive-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-drive-item
+++ observed/get-drive-item
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-drive-root-item
+++ observed/get-drive-root-item
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-excel-range-format
+++ observed/get-excel-range-format
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-excel-table
+++ observed/get-excel-table
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-mail-message
+++ observed/get-mail-message
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-mailbox-settings
+++ observed/get-mailbox-settings
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-my-profile
+++ observed/get-my-profile
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-outlook-contact
+++ observed/get-outlook-contact
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-planner-bucket
+++ observed/get-planner-bucket
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-planner-plan
+++ observed/get-planner-plan
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-planner-task
+++ observed/get-planner-task
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-planner-task-details
+++ observed/get-planner-task-details
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/get-specific-calendar-event
+++ observed/get-specific-calendar-event
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
--- pinned/get-specific-calendar-view
+++ observed/get-specific-calendar-view
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "endDateTime": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
--- pinned/get-todo-task
+++ observed/get-todo-task
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-all-onenote-sections
+++ observed/list-all-onenote-sections
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-calendar-event-instances
+++ observed/list-calendar-event-instances
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "endDateTime": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
--- pinned/list-calendar-events
+++ observed/list-calendar-events
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
--- pinned/list-calendar-events-delta
+++ observed/list-calendar-events-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "endDateTime": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-calendar-view-delta
+++ observed/list-calendar-view-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "endDateTime": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-calendars
+++ observed/list-calendars
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-contact-folder-child-folders
+++ observed/list-contact-folder-child-folders
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-contact-folder-contacts
+++ observed/list-contact-folder-contacts
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-contact-folders
+++ observed/list-contact-folders
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-drive-item-permissions
+++ observed/list-drive-item-permissions
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-drive-item-thumbnails
+++ observed/list-drive-item-thumbnails
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-drive-item-versions
+++ observed/list-drive-item-versions
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-drives
+++ observed/list-drives
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-excel-table-rows
+++ observed/list-excel-table-rows
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-excel-tables
+++ observed/list-excel-tables
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-excel-worksheets
+++ observed/list-excel-worksheets
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-focused-inbox-overrides
+++ observed/list-focused-inbox-overrides
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-folder-files
+++ observed/list-folder-files
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-mail-attachments
+++ observed/list-mail-attachments
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-mail-child-folders
+++ observed/list-mail-child-folders
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-mail-folder-messages
+++ observed/list-mail-folder-messages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-mail-folder-messages-delta
+++ observed/list-mail-folder-messages-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-mail-folders
+++ observed/list-mail-folders
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-mail-messages
+++ observed/list-mail-messages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-mail-rules
+++ observed/list-mail-rules
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-my-calendar-permissions
+++ observed/list-my-calendar-permissions
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-onenote-notebook-sections
+++ observed/list-onenote-notebook-sections
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-onenote-notebooks
+++ observed/list-onenote-notebooks
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-onenote-pages
+++ observed/list-onenote-pages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-onenote-section-groups
+++ observed/list-onenote-section-groups
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-onenote-section-pages
+++ observed/list-onenote-section-pages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-outlook-categories
+++ observed/list-outlook-categories
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-outlook-contacts
+++ observed/list-outlook-contacts
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-plan-buckets
+++ observed/list-plan-buckets
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-plan-tasks
+++ observed/list-plan-tasks
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-planner-task-messages
+++ observed/list-planner-task-messages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-planner-tasks
+++ observed/list-planner-tasks
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-specific-calendar-events
+++ observed/list-specific-calendar-events
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
--- pinned/list-subscriptions
+++ observed/list-subscriptions
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-supported-languages
+++ observed/list-supported-languages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
--- pinned/list-supported-time-zones
+++ observed/list-supported-time-zones
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
--- pinned/list-todo-linked-resources
+++ observed/list-todo-linked-resources
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-todo-task-lists
+++ observed/list-todo-task-lists
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/list-todo-tasks
+++ observed/list-todo-tasks
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "excludeResponse": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
--- pinned/search-onedrive-files
+++ observed/search-onedrive-files
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains().",
+         "description": "Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). The response then includes @odata.count, the total for the filtered collection, which can exceed the items returned when fetchAllPages hits its page/item cap.",
          "type": "boolean"
        },
        "driveId": {
-         "description": "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."
+         "description": "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\". Request ordinary fields with $select instead. Some APIs accept only one relationship per request, so prefer a single value. Some relationships support nested selection, e.g. children($select=id,name)."
        },
        "fetchAllPages": {
          "description": "Follow @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.",

Changed 2026-10-08 13:45 UTC

1 tool added.

+ tool added: get-upload-url

Changed 2026-10-07 13:39 UTC

2 schema or annotation changes with the description left byte-identical.

--- pinned/create-subscription
+++ observed/create-subscription
  {
    "annotations": {
      "destructiveHint": true,
+           },
+           "vapidPublicKey": {
+             "description": "Optional. The application server's VAPID public key, base64url-encoded (P-256 uncompressed point, 65 bytes pre-encoding). Obtained by calling the getVapidPublicKey function on the subscription collection. The browser passes this value to PushManager.subscribe({ applicationServerKey: vapidPublicKey }) to bind the push subscription to this server identity. Required when notificationUrl targets a known Web Push service origin (for example, *.push.apple.com, fcm.googleapis.com, updates.push.services.mozilla.com); rejected with 400 Bad Request if supplied on a standard webhook subscription. For more information, see RFC 8292.",
+             "type": [
+               "string",
+               "null"
+             ]
+           },
+           "webPushEncryptionP256dhPublicKey": {
+             "description": "Optional. The subscriber's ECDH public key, base64url-encoded (P-256 uncompressed point, 65 bytes pre-encoding). Obtained from the browser via PushSubscription.getKey('p256dh'). Used as the peer public key during ECDH key agreement to derive the per-message content encryption key for RFC 8291 payload encryption. Required when notificationUrl targets a known Web Push service origin; rejected with 400 Bad Request if supplied on a standard webhook subscription. For more information, see RFC 8291 Section 3.",
+             "type": [
+               "string",
+               "null"
+             ]
+           },
+           "webPushEncryptionSecret": {
+             "description": "Optional. The subscriber's auth secret, base64url-encoded (16 bytes pre-encoding). Obtained from the browser via PushSubscription.getKey('auth'). Used as the HMAC-SHA-256 salt for the HKDF combine step that derives key material for RFC 8291 payload encryption. Write-only: this value is never returned in GET responses (returned as null). Treat as a secret. Required when notificationUrl targets a known Web Push service origin; rejected with 400 Bad Request if supplied on a standard webhook subscription. For more information, see RFC 8291 Section 3.",
+             "type": [
+               "string",
+               "null"
+             ]
            }
          },
          "type": "object"
--- pinned/update-subscription
+++ observed/update-subscription
  {
    "annotations": {
      "destructiveHint": true,
+           },
+           "vapidPublicKey": {
+             "description": "Optional. The application server's VAPID public key, base64url-encoded (P-256 uncompressed point, 65 bytes pre-encoding). Obtained by calling the getVapidPublicKey function on the subscription collection. The browser passes this value to PushManager.subscribe({ applicationServerKey: vapidPublicKey }) to bind the push subscription to this server identity. Required when notificationUrl targets a known Web Push service origin (for example, *.push.apple.com, fcm.googleapis.com, updates.push.services.mozilla.com); rejected with 400 Bad Request if supplied on a standard webhook subscription. For more information, see RFC 8292.",
+             "type": [
+               "string",
+               "null"
+             ]
+           },
+           "webPushEncryptionP256dhPublicKey": {
+             "description": "Optional. The subscriber's ECDH public key, base64url-encoded (P-256 uncompressed point, 65 bytes pre-encoding). Obtained from the browser via PushSubscription.getKey('p256dh'). Used as the peer public key during ECDH key agreement to derive the per-message content encryption key for RFC 8291 payload encryption. Required when notificationUrl targets a known Web Push service origin; rejected with 400 Bad Request if supplied on a standard webhook subscription. For more information, see RFC 8291 Section 3.",
+             "type": [
+               "string",
+               "null"
+             ]
+           },
+           "webPushEncryptionSecret": {
+             "description": "Optional. The subscriber's auth secret, base64url-encoded (16 bytes pre-encoding). Obtained from the browser via PushSubscription.getKey('auth'). Used as the HMAC-SHA-256 salt for the HKDF combine step that derives key material for RFC 8291 payload encryption. Write-only: this value is never returned in GET responses (returned as null). Treat as a secret. Required when notificationUrl targets a known Web Push service origin; rejected with 400 Bad Request if supplied on a standard webhook subscription. For more information, see RFC 8291 Section 3.",
+             "type": [
+               "string",
+               "null"
+             ]
            }
          },
          "type": "object"

Changed 2026-10-05 14:48 UTC

12 descriptions rewritten, 64 schema or annotation changes with the description left byte-identical.

--- pinned/create-calendar-event
+++ observed/create-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "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.\n\n💡 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.",
+   "description": "Create (schedule) a new calendar event — a meeting or appointment — on the user's calendar. Times use nested objects, not flat fields: start: {dateTime, timeZone}, end: {dateTime, timeZone}. Do NOT use startDateTime/startTimeZone. For one-off events, UTC is simplest (e.g. 3:30 PM AEDT = 04:30 UTC). For recurring events, use the organizer's own time zone name instead — Graph resolves DST against the zone in start.timeZone, so UTC drifts after DST changes. Get the zone from get-mailbox-settings, or validate one with list-supported-time-zones instead of guessing from memory. Set subject, location, body, and attendees; supports online meetings and recurrence.\n\n💡 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.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/create-onedrive-folder
+++ observed/create-onedrive-folder
  {
    "annotations": {
      "destructiveHint": true,
-             "description": "[Note: Simplified from 137 properties to 25 most common ones]",
+             "description": "[Note: Simplified from 138 properties to 25 most common ones]",
              "properties": {
                "aboutMe": {
                  "description": "A freeform text entry field for the user to describe themselves. Requires $select to retrieve.",
-             "description": "[Note: Simplified from 137 properties to 25 most common ones]",
+             "description": "[Note: Simplified from 138 properties to 25 most common ones]",
              "properties": {
                "aboutMe": {
                  "description": "A freeform text entry field for the user to describe themselves. Requires $select to retrieve.",
--- pinned/create-specific-calendar-event
+++ observed/create-specific-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "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.\n\n💡 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.",
+   "description": "Create a calendar event on a specific calendar. Requires calendarId (the target calendar's ID). Times use nested {dateTime, timeZone} objects — do NOT use startDateTime/startTimeZone. UTC is simplest for one-off events; for recurring events use the organizer's own time zone (from get-mailbox-settings or list-supported-time-zones) instead of UTC, since Graph resolves DST against that zone.\n\n💡 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.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/delete-specific-calendar-event
+++ observed/delete-specific-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "Delete a specific calendar event.\n\n💡 TIP: Deleting a seriesMaster deletes ALL occurrences. To cancel a single occurrence, use the specific instance ID.",
+   "description": "Delete a specific calendar event. Requires calendarId (the target calendar's ID) and eventId (the event's own ID).\n\n💡 TIP: Deleting a seriesMaster deletes ALL occurrences. To cancel a single occurrence, use the specific instance ID.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/download-bytes-to-file
+++ observed/download-bytes-to-file
  {
    "annotations": {
      "openWorldHint": true,
-   "description": "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.",
+   "description": "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, or HTTP with --http-local-file-tools. 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.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/get-calendar-event
+++ observed/get-calendar-event
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "timezone": {
          "description": "IANA timezone name (e.g., \"America/New_York\", \"Europe/London\", \"Asia/Tokyo\") for calendar event times. If not specified, times are returned in UTC.",
--- pinned/get-calendar-view
+++ observed/get-calendar-view
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "startDateTime": {
          "description": "The start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00",
          "type": "string"
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/get-current-user
+++ observed/get-current-user
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "type": "object"
--- pinned/get-download-url
+++ observed/get-download-url
  {
    "annotations": {
      "openWorldHint": true,
-   "description": "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.",
+   "description": "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? }. Mail file attachments (/messages/{id}/attachments/{id}/$value), meeting recordings and other $value byte endpoints have no pre-authenticated URL from Graph itself, but call this tool for them anyway: a server running with --enable-attachment-urls mints its own single-use URL for them, and one without it answers with the reason and points at download-bytes.",
    "execution": {
      "taskSupport": "forbidden"
    },
-         "description": "Relative 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).",
+         "description": "Relative 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 accepted on a server running with --enable-attachment-urls.",
          "type": "string"
        }
      },
--- pinned/get-drive-delta
+++ observed/get-drive-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/get-drive-item
+++ observed/get-drive-item
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "required": [
--- pinned/get-drive-root-item
+++ observed/get-drive-root-item
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "required": [
--- pinned/get-excel-range-format
+++ observed/get-excel-range-format
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "workbookWorksheetId": {
          "description": "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.",
--- pinned/get-excel-table
+++ observed/get-excel-table
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "workbookTableId": {
          "description": "Value 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.",
--- pinned/get-mail-message
+++ observed/get-mail-message
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "required": [
--- pinned/get-mail-message-mime
+++ observed/get-mail-message-mime
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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.\n\n💡 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.",
+   "description": "Download the raw MIME source (RFC 5322 .eml content) of an Outlook email message by its message ID. Returns the complete original message including headers and encoded attachments.\n\n💡 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.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/get-mailbox-settings
+++ observed/get-mailbox-settings
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "type": "object"
--- pinned/get-my-profile
+++ observed/get-my-profile
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "type": "object"
--- pinned/get-outlook-contact
+++ observed/get-outlook-contact
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "required": [
--- pinned/get-planner-bucket
+++ observed/get-planner-bucket
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "required": [
--- pinned/get-planner-plan
+++ observed/get-planner-plan
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "required": [
--- pinned/get-planner-task
+++ observed/get-planner-task
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "required": [
--- pinned/get-planner-task-details
+++ observed/get-planner-task-details
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        }
      },
      "required": [
--- pinned/get-specific-calendar-event
+++ observed/get-specific-calendar-event
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "timezone": {
          "description": "IANA timezone name (e.g., \"America/New_York\", \"Europe/London\", \"Asia/Tokyo\") for calendar event times. If not specified, times are returned in UTC.",
--- pinned/get-specific-calendar-view
+++ observed/get-specific-calendar-view
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "startDateTime": {
          "description": "The start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00",
          "type": "string"
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/get-subscription
+++ observed/get-subscription
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "subscriptionId": {
          "description": "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.",
--- pinned/get-todo-task
+++ observed/get-todo-task
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "todoTaskId": {
          "description": "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.",
--- pinned/list-all-onenote-sections
+++ observed/list-all-onenote-sections
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-calendar-event-instances
+++ observed/list-calendar-event-instances
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "startDateTime": {
          "description": "The start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00",
          "type": "string"
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-calendar-events
+++ observed/list-calendar-events
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "timezone": {
          "description": "IANA timezone name (e.g., \"America/New_York\", \"Europe/London\", \"Asia/Tokyo\") for calendar event times. If not specified, times are returned in UTC.",
          "type": "string"
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-calendar-events-delta
+++ observed/list-calendar-events-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "startDateTime": {
          "description": "The 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",
          "type": "string"
--- pinned/list-calendar-view-delta
+++ observed/list-calendar-view-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "startDateTime": {
          "description": "The 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",
          "type": "string"
+       },
+       "timezone": {
+         "description": "IANA timezone name (e.g., \"America/New_York\", \"Europe/London\", \"Asia/Tokyo\") for calendar event times. If not specified, times are returned in UTC.",
+         "type": "string"
        }
      },
      "required": [
--- pinned/list-calendars
+++ observed/list-calendars
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-contact-folder-child-folders
+++ observed/list-contact-folder-child-folders
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-contact-folder-contacts
+++ observed/list-contact-folder-contacts
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-contact-folders
+++ observed/list-contact-folders
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-drive-item-permissions
+++ observed/list-drive-item-permissions
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-drive-item-thumbnails
+++ observed/list-drive-item-thumbnails
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-drive-item-versions
+++ observed/list-drive-item-versions
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-drives
+++ observed/list-drives
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-excel-table-rows
+++ observed/list-excel-table-rows
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        },
        "workbookTableId": {
          "description": "Value 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.",
--- pinned/list-excel-tables
+++ observed/list-excel-tables
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-excel-worksheets
+++ observed/list-excel-worksheets
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-focused-inbox-overrides
+++ observed/list-focused-inbox-overrides
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-folder-files
+++ observed/list-folder-files
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-mail-attachments
+++ observed/list-mail-attachments
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-mail-child-folders
+++ observed/list-mail-child-folders
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-mail-folder-messages
+++ observed/list-mail-folder-messages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-mail-folder-messages-delta
+++ observed/list-mail-folder-messages-delta
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-mail-folders
+++ observed/list-mail-folders
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-mail-messages
+++ observed/list-mail-messages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-mail-rules
+++ observed/list-mail-rules
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-my-calendar-permissions
+++ observed/list-my-calendar-permissions
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-onenote-notebook-sections
+++ observed/list-onenote-notebook-sections
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-onenote-notebooks
+++ observed/list-onenote-notebooks
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-onenote-pages
+++ observed/list-onenote-pages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-onenote-section-groups
+++ observed/list-onenote-section-groups
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-onenote-section-pages
+++ observed/list-onenote-section-pages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-outlook-categories
+++ observed/list-outlook-categories
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-outlook-contacts
+++ observed/list-outlook-contacts
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-plan-buckets
+++ observed/list-plan-buckets
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "plannerPlanId": {
          "description": "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.",
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-plan-tasks
+++ observed/list-plan-tasks
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Retrieve a list of plannerTask objects associated with a plannerPlan object.\n\n💡 TIP: Priority values: 0=Urgent, 1=Important, 3=Medium, 5=Low, 9=unset.",
+   "description": "Retrieve a list of plannerTask objects associated with a plannerPlan object.\n\n💡 TIP: Priority is 0-10 (lower = higher priority); Planner's own UI presets are 1=Urgent, 3=Important, 5=Medium, 9=Low.",
    "execution": {
      "taskSupport": "forbidden"
    },
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "plannerPlanId": {
          "description": "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.",
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-planner-task-messages
+++ observed/list-planner-task-messages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "plannerTaskId": {
          "description": "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.",
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-planner-tasks
+++ observed/list-planner-tasks
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Retrieve a list of plannertask objects assigned to a User.\n\n💡 TIP: Priority values: 0=Urgent, 1=Important, 3=Medium, 5=Low, 9=unset.",
+   "description": "Retrieve a list of plannertask objects assigned to a User.\n\n💡 TIP: Priority is 0-10 (lower = higher priority); Planner's own UI presets are 1=Urgent, 3=Important, 5=Medium, 9=Low.",
    "execution": {
      "taskSupport": "forbidden"
    },
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-specific-calendar-events
+++ observed/list-specific-calendar-events
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "expandExtendedProperties": {
          "description": "When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "timezone": {
          "description": "IANA timezone name (e.g., \"America/New_York\", \"Europe/London\", \"Asia/Tokyo\") for calendar event times. If not specified, times are returned in UTC.",
          "type": "string"
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-subscriptions
+++ observed/list-subscriptions
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-supported-languages
+++ observed/list-supported-languages
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "skip": {
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-supported-time-zones
+++ observed/list-supported-time-zones
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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\ngetting the user's mailbox settings.\n\n💡 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.",
+   "description": "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\ngetting the user's mailbox settings.\n\n💡 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, or before setting timeZone on a calendar event's start/end (especially for recurring events) — don't guess a time zone name from memory, look it up here.",
    "execution": {
      "taskSupport": "forbidden"
    },
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "skip": {
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-todo-linked-resources
+++ observed/list-todo-linked-resources
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "todoTaskId": {
          "description": "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.",
          "type": "string"
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/list-todo-task-lists
+++ observed/list-todo-task-lists
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "type": "object"
--- pinned/list-todo-tasks
+++ observed/list-todo-tasks
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "search": {
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "todoTaskListId": {
          "description": "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.",
          "type": "string"
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/move-rename-onedrive-item
+++ observed/move-rename-onedrive-item
  {
    "annotations": {
      "destructiveHint": true,
-             "description": "[Note: Simplified from 137 properties to 25 most common ones]",
+             "description": "[Note: Simplified from 138 properties to 25 most common ones]",
              "properties": {
                "aboutMe": {
                  "description": "A freeform text entry field for the user to describe themselves. Requires $select to retrieve.",
-             "description": "[Note: Simplified from 137 properties to 25 most common ones]",
+             "description": "[Note: Simplified from 138 properties to 25 most common ones]",
              "properties": {
                "aboutMe": {
                  "description": "A freeform text entry field for the user to describe themselves. Requires $select to retrieve.",
--- pinned/search-onedrive-files
+++ observed/search-onedrive-files
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
-         "items": {
-           "type": "string"
-         },
-         "type": "array"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "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."
        },
        "fetchAllPages": {
          "description": "Follow @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.",
-         "description": "Sort expression, e.g. receivedDateTime desc",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Sort expression, e.g. receivedDateTime desc"
        },
        "q": {
          "description": "Value for the 'q' path segment.",
-         "description": "KQL search query — wrap value in double quotes. Cannot combine with $filter.",
+         "description": "KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter.",
          "type": "string"
        },
        "select": {
-         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime",
-         "type": "string"
+         "anyOf": [
+           {
+             "type": "string"
+           },
+           {
+             "items": {
+               "type": "string"
+             },
+             "type": "array"
+           }
+         ],
+         "description": "Comma-separated fields to return, e.g. id,subject,from,receivedDateTime"
        },
        "skip": {
          "description": "Items to skip for pagination. Not supported with $search.",
-         "type": "number"
+         "minimum": 0,
+         "type": "integer"
        },
+       "skiptoken": {
+         "description": "Next page: the @odata.nextLink from the previous response. Keep the other arguments the same.",
+         "type": "string"
+       },
        "top": {
          "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"
+         "minimum": 0,
+         "type": "integer"
        }
      },
      "required": [
--- pinned/update-calendar-event
+++ observed/update-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "Update the properties of the event object.\n\n💡 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.",
+   "description": "Update an event on the default calendar. Requires eventId (the event's ID from get-calendar-view or list-calendar-events). Times use nested {dateTime, timeZone} objects. UTC is simplest for one-off events; for recurring events use the organizer's own time zone (from get-mailbox-settings or list-supported-time-zones) instead of UTC, since Graph resolves DST against that zone.\n\n💡 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.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/update-planner-task
+++ observed/update-planner-task
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "Update the properties of plannerTask object.\n\n💡 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.",
+   "description": "Update the properties of plannerTask object.\n\n💡 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 is 0-10 (lower = higher priority); Planner's own UI presets are 1=Urgent, 3=Important, 5=Medium, 9=Low.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/update-specific-calendar-event
+++ observed/update-specific-calendar-event
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "Update a specific calendar event.\n\n💡 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.",
+   "description": "Update a specific calendar event. Requires calendarId (from list-calendars) and eventId (from list-specific-calendar-events or get-specific-calendar-view for that same calendar). Times use nested {dateTime, timeZone} objects. UTC is simplest for one-off events; for recurring events use the organizer's own time zone (from get-mailbox-settings or list-supported-time-zones) instead of UTC, since Graph resolves DST against that zone.\n\n💡 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.",
    "execution": {
      "taskSupport": "forbidden"
    },

Changed 2026-09-04 10:48 UTC

2 descriptions rewritten.

--- pinned/get-calendar-view
+++ observed/get-calendar-view
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, from the user's default calendar,\nor from some other calendar of the user.\n\n💡 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 $filter=isOnlineMeeting eq true. To search by subject, use $filter=contains(subject,'keyword'). Teams meetings expose their join link as onlineMeeting/joinUrl (select it with $select=onlineMeeting); the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts.",
+   "description": "Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, from the user's default calendar,\nor from some other calendar of the user.\n\n💡 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.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/get-specific-calendar-view
+++ observed/get-specific-calendar-view
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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.\n\n💡 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 $filter=isOnlineMeeting eq true. Teams meetings expose their join link as onlineMeeting/joinUrl (select it with $select=onlineMeeting); the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts.",
+   "description": "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.\n\n💡 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.",
    "execution": {
      "taskSupport": "forbidden"
    },

Current tools

Show all 202 tool fingerprints
accept-calendar-event
8f605d7206af7185
add-calendar-event-attachment
a378d3b1dd7332b1
add-excel-table-rows
5f11ca66b0d1226b
add-mail-attachment
71a6113face4e4c8
cancel-calendar-event
5fac70731011f1d8
clear-excel-range
ede583ad0f1371e6
copy-drive-item
2333d0717d3cd3c5
copy-mail-message
37c81428aa220601
create-calendar
8380761fc0fabbcc
create-calendar-event
209905459f984d14
create-calendar-event-attachment-upload-session
34971e05f403005a
create-contact-child-folder
0f5420099c3acd96
create-contact-folder
9131833bb1900216
create-contact-in-folder
8e647e36965d3958
create-draft-email
4d79787092feaf6c
create-drive-item-preview
2b646302abafcc2f
create-drive-item-share-link
6caf863fe9dab959
create-excel-chart
ab01d80ccfd1ed81
create-excel-table
e7c45b3841d88b1e
create-focused-inbox-override
388a9bcddb6b9300
create-forward-draft
6424a0dc211922e3
create-mail-attachment-upload-session
4a1a9eb8529d144d
create-mail-child-folder
3c11d60534dadf04
create-mail-folder
a5a5094cc0b56db5
create-mail-rule
307ff1fa17ff1132
create-my-calendar-permission
866c69be6598f014
create-onedrive-folder
8485a9d1b9be0ca6
create-onenote-notebook
3520c4f14c77859c
create-onenote-page
6ec53e1a07d9d8bc
create-onenote-section
82a01ac95ff03049
create-onenote-section-page
c81d7d9cb51722f1
create-outlook-category
edfb5748d110fcb2
create-outlook-contact
9ef9f8af5caeb8dd
create-planner-bucket
80038a3e374096b8
create-planner-plan
faf366651b02a482
create-planner-task
68b6dab33ab50b3f
create-planner-task-message
525eacbdd3f9fe2d
create-reply-all-draft
b29bd544803c166c
create-reply-draft
5d6be7e9a943f31c
create-specific-calendar-event
55debe25fa6ca336
create-subscription
04d55ddf66d3e0f9
create-todo-checklist-item
456f5ca3e83eab89
create-todo-linked-resource
726d894a7970bbe4
create-todo-task
e535b345270066dc
create-todo-task-list
e73bbc166f94a674
create-upload-session
f55fc76a1f8a2026
decline-calendar-event
8afaeb186be95141
delete-calendar
1b138305d5105203
delete-calendar-event
decec65cc215d023
delete-contact-folder
e17c87679b2760c8
delete-drive-item-permission
e1b0cf0a77e65326
delete-excel-range
eba25dee7b6c697e
delete-excel-table-row
6b3872d9c0155b6b
delete-focused-inbox-override
cf1b5f13e1d5c396
delete-mail-attachment
50768e7a8ee9763b
delete-mail-folder
3225f7faa2ef5981
delete-mail-message
1757b0da9c78fec6
delete-mail-rule
592b4c745eb42f34
delete-my-calendar-permission
598218b90fe76843
delete-onedrive-file
c619a1244f46f304
delete-onenote-page
8018e4b987ccb0a4
delete-outlook-contact
c6ffa2043e748626
delete-planner-bucket
f68dd7afbe8fd75d
delete-planner-task-message
1ccf9f5228e084f8
delete-specific-calendar-event
308629a5d6e6aa4e
delete-subscription
a3e46a13b16438f1
delete-todo-checklist-item
4dc97faf9718f4bd
delete-todo-linked-resource
3fa98ec1c4da78b0
delete-todo-task
4b7ff28b9dee293d
delete-todo-task-list
cd7c293b1210302f
dismiss-calendar-event-reminder
9db8ce70868fb282
download-bytes
6f1306f90389c658
download-bytes-to-file
d1215956cfaffab7
format-excel-range
4dc6ae8463039691
format-excel-range-border
36c442ec90e872ff
format-excel-range-fill
08dbaab1adcb4a1f
format-excel-range-font
1cd7bd4d57853880
forward-calendar-event
b6b9ecd382cdb6dd
forward-mail-message
6809da1923529617
get-calendar-event
630047bfadac9af3
get-calendar-view
50c508aa11c0f7e7
get-current-user
e1afe8c95a0e6bb7
get-download-url
f5965a441a03e06d
get-drive-delta
cd8e752037f46d60
get-drive-item
b46bf0d18de23815
get-drive-root-item
d18ede675c9f53a3
get-excel-range
e07b6ffa01fe607e
get-excel-range-format
41aabd27ed2fb355
get-excel-table
1a7176b691633605
get-excel-used-range
eb27ee860f624d2d
get-mail-attachment-content
a5a471f24c808f78
get-mail-message
a913ae92d24067ab
get-mail-message-mime
956131e1e73e7104
get-mail-tips
e24e6317b7b8074c
get-mailbox-settings
f0a56b49f5048a6c
get-my-profile
2ba2757eb37de469
get-onenote-page-content
5a3eff6d5ce34672
get-outlook-contact
334d7600bb30f1fb
get-planner-bucket
4c01a20cd53e50ff
get-planner-plan
4c95d341aebc2615
get-planner-task
849b1e6b858c1783
get-planner-task-details
1a1a37dea1840cdb
get-specific-calendar-event
140c59afd1ee45fa
get-specific-calendar-view
40df3fc00f34c5a4
get-subscription
23667eb553c26eb3
get-todo-task
610c7d87a1ebcaf9
get-upload-url
1b0b3023c415d063
graph-batch
e44c44c5bb3d5bda
insert-excel-range
acf7d629b4483fdd
list-accounts
44052c4d8712ac47
list-all-onenote-sections
22d7041e01b1dc54
list-calendar-event-instances
17f2e069f2652312
list-calendar-events
b1ef63db23e59422
list-calendar-events-delta
481eba2acedda231
list-calendar-view-delta
ea86af8059d9ccd2
list-calendars
3082b1db4a834e70
list-contact-folder-child-folders
7a5b232347ac9b55
list-contact-folder-contacts
4bed46134e3905bb
list-contact-folders
1297b04ce003f1be
list-drive-item-permissions
049fa45ddca33cae
list-drive-item-thumbnails
30e87fe77c382c81
list-drive-item-versions
163bc6d3e2f0d372
list-drives
2c6d4ffcd83c4ae6
list-excel-table-rows
d8de4c5ad8a2ddd8
list-excel-tables
55a347150640a26c
list-excel-worksheets
0cac231bea225179
list-focused-inbox-overrides
054b36de2a23b231
list-folder-files
6e692e636a9cb00b
list-group-planner-plans
52ff9458c0a3e98b
list-mail-attachments
f477ef20c0155da3
list-mail-child-folders
811cd806133f6ace
list-mail-folder-messages
c0977fcf2d297026
list-mail-folder-messages-delta
d0116d6604a0c143
list-mail-folders
782ad8729ed0bc3c
list-mail-messages
1a9c5eafc2c42303
list-mail-rules
8e21f690fa309f73
list-my-calendar-permissions
ab176f5bc76bf22c
list-onenote-notebook-sections
13dae0d4103ba8c7
list-onenote-notebooks
70a6fc3c0de47aa8
list-onenote-pages
119635871cf2c183
list-onenote-section-groups
932a4baab5cc3672
list-onenote-section-pages
bbb84f006c5f7407
list-outlook-categories
d92d243197dde835
list-outlook-contacts
69f6881c699387dd
list-plan-buckets
58a065ea492ae589
list-plan-tasks
8d0875559606b92b
list-planner-task-messages
1ef564c1794030c3
list-planner-tasks
7470820b88a7e5a3
list-specific-calendar-events
1232ddc298b47c2f
list-subscriptions
91580557dc80b763
list-supported-languages
c3ef51d807009b50
list-supported-time-zones
e3948de38012e6cf
list-todo-checklist-items
51c186ff7c7e3480
list-todo-linked-resources
dd68b9e833abb910
list-todo-task-lists
94e1314c9374da75
list-todo-task-lists-delta
74335948cbcb261e
list-todo-tasks
cbddd65edf59fb8a
login
85fcedc301b8db47
logout
107143ab6edb951c
merge-excel-range
ffe42846a064ec16
move-mail-message
57e28066ce138dc4
move-rename-onedrive-item
ebe57bb848a1711c
parse-teams-url
96e64fabbe8febdc
read-mail-text
e71380b5181e4eb5
reauthorize-subscription
a1c6630b20564b06
remove-account
0b874ec34913967e
reply-all-mail-message
0f5601e259cba2cd
reply-mail-message
e197f3a86efe2760
search-onedrive-files
46e21c1c9b340038
select-account
81f88b9ee46b881a
send-draft-message
2847b473a8b49d5d
send-mail
851af36657882949
share-drive-item
ee15fe3678cdb3dd
snooze-calendar-event-reminder
f69cf07fd107655c
sort-excel-range
52a0f9f661403011
tentatively-accept-calendar-event
ee5b0046248afe54
unmerge-excel-range
f61e503285d9cf21
update-calendar
bc8206e9e242e888
update-calendar-event
42b369d432022173
update-contact-folder
63ba533ae0afbad0
update-excel-range
22bbb7e4cfd6625b
update-excel-table-row
4fcc55f228225ea0
update-focused-inbox-override
d0ad1870f7dadb0f
update-mail-folder
9ea13a010d781c76
update-mail-message
3eace002118ecde0
update-mail-rule
327e1a822c5c07f3
update-mailbox-settings
d29e2d1c685de4e5
update-my-calendar-permission
ac6fd9fd1a5faa73
update-onenote-page-content
b2f871d3666c84cd
update-outlook-contact
ecb4a0edaa87992f
update-planner-bucket
5fa733ebe954ac9d
update-planner-plan
58529a22ec37a211
update-planner-task
3fbc9a3eac8a52d6
update-planner-task-details
5a75172478467642
update-specific-calendar-event
af802f89bfd494e7
update-subscription
2c3e50445a94927e
update-todo-checklist-item
534246f5a5002317
update-todo-task
84cd9f15276aee46
update-todo-task-list
41279fdd2b1b9bf3
upload-file-content
0e2362f06ff5e7f7
upload-my-profile-photo
24ee60948f5addb3
verify-login
d9611e2b42e6a137

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx -y mcp-pin@0.2.3 -- <your @softeria/ms-365-mcp-server command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for @softeria/ms-365-mcp-server

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/6b2bed41fbea00f7.svg)](https://mcp-pin.gautamkhosla.com/servers/6b2bed41fbea00f7.html)